Commit 17347e3d authored by Feng Xiao's avatar Feng Xiao

Fix for Visual Studio 2008.

parent 283c40c8
...@@ -447,7 +447,7 @@ string JSOneofIndex(const OneofDescriptor* oneof) { ...@@ -447,7 +447,7 @@ string JSOneofIndex(const OneofDescriptor* oneof) {
// Decodes a codepoint in \x0000 -- \xFFFF. Since JS strings are UTF-16, we only // Decodes a codepoint in \x0000 -- \xFFFF. Since JS strings are UTF-16, we only
// need to handle the BMP (16-bit range) here. // need to handle the BMP (16-bit range) here.
uint16_t DecodeUTF8Codepoint(uint8_t* bytes, size_t* length) { uint16 DecodeUTF8Codepoint(uint8* bytes, size_t* length) {
if (*length == 0) { if (*length == 0) {
return 0; return 0;
} }
...@@ -491,14 +491,14 @@ string EscapeJSString(const string& in, bool is_utf8) { ...@@ -491,14 +491,14 @@ string EscapeJSString(const string& in, bool is_utf8) {
string result; string result;
size_t decoded = 0; size_t decoded = 0;
for (size_t i = 0; i < in.size(); i += decoded) { for (size_t i = 0; i < in.size(); i += decoded) {
uint16_t codepoint = 0; uint16 codepoint = 0;
if (is_utf8) { if (is_utf8) {
// Decode the next UTF-8 codepoint. // Decode the next UTF-8 codepoint.
size_t have_bytes = in.size() - i; size_t have_bytes = in.size() - i;
uint8_t bytes[3] = { uint8 bytes[3] = {
static_cast<uint8_t>(in[i]), static_cast<uint8>(in[i]),
static_cast<uint8_t>(((i + 1) < in.size()) ? in[i + 1] : 0), static_cast<uint8>(((i + 1) < in.size()) ? in[i + 1] : 0),
static_cast<uint8_t>(((i + 2) < in.size()) ? in[i + 2] : 0), static_cast<uint8>(((i + 2) < in.size()) ? in[i + 2] : 0),
}; };
codepoint = DecodeUTF8Codepoint(bytes, &have_bytes); codepoint = DecodeUTF8Codepoint(bytes, &have_bytes);
if (have_bytes == 0) { if (have_bytes == 0) {
...@@ -506,7 +506,7 @@ string EscapeJSString(const string& in, bool is_utf8) { ...@@ -506,7 +506,7 @@ string EscapeJSString(const string& in, bool is_utf8) {
} }
decoded = have_bytes; decoded = have_bytes;
} else { } else {
codepoint = static_cast<uint16_t>(static_cast<uint8_t>(in[i])); codepoint = static_cast<uint16>(static_cast<uint8>(in[i]));
decoded = 1; decoded = 1;
} }
......
...@@ -746,23 +746,6 @@ TEST(StringPiece, Comparisons2) { ...@@ -746,23 +746,6 @@ TEST(StringPiece, Comparisons2) {
EXPECT_TRUE(abc.ends_with("nopqrstuvwxyz")); EXPECT_TRUE(abc.ends_with("nopqrstuvwxyz"));
} }
TEST(StringPiece, HashFunction) {
hash_set<StringPiece> set;
set.insert(StringPiece("hello"));
EXPECT_EQ(1, set.size());
// Insert a StringPiece of the same value again and should NOT increment
// size of the set.
set.insert(StringPiece("hello"));
EXPECT_EQ(1, set.size());
// Insert a StringPiece with different value and check that size of the set
// has been increment by one.
set.insert(StringPiece("world"));
EXPECT_EQ(2, set.size());
}
TEST(ComparisonOpsTest, StringCompareNotAmbiguous) { TEST(ComparisonOpsTest, StringCompareNotAmbiguous) {
EXPECT_EQ("hello", string("hello")); EXPECT_EQ("hello", string("hello"));
EXPECT_LT("hello", string("world")); EXPECT_LT("hello", string("world"));
......
...@@ -1685,13 +1685,17 @@ TEST_P(ProtoStreamObjectWriterFieldMaskTest, MapKeyMustBeEscapedCorrectly) { ...@@ -1685,13 +1685,17 @@ TEST_P(ProtoStreamObjectWriterFieldMaskTest, MapKeyMustBeEscapedCorrectly) {
TEST_P(ProtoStreamObjectWriterFieldMaskTest, MapKeyCanContainAnyChars) { TEST_P(ProtoStreamObjectWriterFieldMaskTest, MapKeyCanContainAnyChars) {
FieldMaskTest expected; FieldMaskTest expected;
expected.mutable_single_mask()->add_paths( expected.mutable_single_mask()->add_paths(
"path.to.map[\"(),[],\\\"'!@#$%^&*123_|War孙天涌,./?><\\\\\"]"); // \xE5\xAD\x99 is the UTF-8 byte sequence for chinese character 孙.
// We cannot embed non-ASCII characters in the code directly because
// some windows compilers will try to interpret them using the system's
// current encoding and end up with invalid UTF-8 byte sequence.
"path.to.map[\"(),[],\\\"'!@#$%^&*123_|War\xE5\xAD\x99,./?><\\\\\"]");
expected.mutable_single_mask()->add_paths("path.to.map[\"key2\"]"); expected.mutable_single_mask()->add_paths("path.to.map[\"key2\"]");
ow_->StartObject(""); ow_->StartObject("");
ow_->RenderString( ow_->RenderString(
"single_mask", "single_mask",
"path.to.map[\"(),[],\\\"'!@#$%^&*123_|War孙天涌,./?><\\\\\"]," "path.to.map[\"(),[],\\\"'!@#$%^&*123_|War\xE5\xAD\x99,./?><\\\\\"],"
"path.to.map[\"key2\"]"); "path.to.map[\"key2\"]");
ow_->EndObject(); ow_->EndObject();
......
...@@ -2816,15 +2816,20 @@ class MatchingTest : public testing::Test { ...@@ -2816,15 +2816,20 @@ class MatchingTest : public testing::Test {
const Message& msg1, const Message& msg2, const Message& msg1, const Message& msg2,
bool result) { bool result) {
string output; string output;
io::StringOutputStream output_stream(&output); {
MessageDifferencer::StreamReporter reporter(&output_stream); // Before we return the "output" string, we must make sure the
reporter.set_report_modified_aggregates(true); // StreamReporter is destructored because its destructor will
differencer->set_report_matches(true); // flush the stream.
differencer->ReportDifferencesTo(&reporter); io::StringOutputStream output_stream(&output);
if (result) { MessageDifferencer::StreamReporter reporter(&output_stream);
EXPECT_TRUE(differencer->Compare(msg1, msg2)); reporter.set_report_modified_aggregates(true);
} else { differencer->set_report_matches(true);
EXPECT_FALSE(differencer->Compare(msg1, msg2)); differencer->ReportDifferencesTo(&reporter);
if (result) {
EXPECT_TRUE(differencer->Compare(msg1, msg2));
} else {
EXPECT_FALSE(differencer->Compare(msg1, msg2));
}
} }
return output; return output;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment