| Index: third_party/protobuf/src/google/protobuf/descriptor_unittest.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/descriptor_unittest.cc b/third_party/protobuf/src/google/protobuf/descriptor_unittest.cc
|
| index 7ec75156b88bf8cb42f0ac1d6840d8ed7d2c3687..f937b9eac253c4b56426b0ac441fa60ecccc946e 100644
|
| --- a/third_party/protobuf/src/google/protobuf/descriptor_unittest.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/descriptor_unittest.cc
|
| @@ -41,11 +41,8 @@
|
| #include <vector>
|
|
|
| #include <google/protobuf/compiler/importer.h>
|
| -#include <google/protobuf/compiler/parser.h>
|
| #include <google/protobuf/unittest.pb.h>
|
| #include <google/protobuf/unittest_custom_options.pb.h>
|
| -#include <google/protobuf/unittest_proto3_arena.pb.h>
|
| -#include <google/protobuf/io/tokenizer.h>
|
| #include <google/protobuf/io/zero_copy_stream_impl.h>
|
| #include <google/protobuf/descriptor.pb.h>
|
| #include <google/protobuf/descriptor.h>
|
| @@ -58,7 +55,7 @@
|
| #include <google/protobuf/stubs/common.h>
|
| #include <google/protobuf/stubs/logging.h>
|
| #include <google/protobuf/stubs/logging.h>
|
| -#include <google/protobuf/stubs/stringprintf.h>
|
| +#include <google/protobuf/stubs/scoped_ptr.h>
|
| #include <google/protobuf/testing/googletest.h>
|
| #include <gtest/gtest.h>
|
|
|
| @@ -492,65 +489,6 @@ TEST_F(FileDescriptorTest, Syntax) {
|
| }
|
| }
|
|
|
| -void ExtractDebugString(
|
| - const FileDescriptor* file, std::set<string>* visited,
|
| - std::vector<std::pair<string, string> >* debug_strings) {
|
| - if (!visited->insert(file->name()).second) {
|
| - return;
|
| - }
|
| - for (int i = 0; i < file->dependency_count(); ++i) {
|
| - ExtractDebugString(file->dependency(i), visited, debug_strings);
|
| - }
|
| - debug_strings->push_back(make_pair(file->name(), file->DebugString()));
|
| -}
|
| -
|
| -class SimpleErrorCollector : public google::protobuf::io::ErrorCollector {
|
| - public:
|
| - // implements ErrorCollector ---------------------------------------
|
| - void AddError(int line, int column, const string& message) {
|
| - last_error_ = StringPrintf("%d:%d:", line, column) + message;
|
| - }
|
| -
|
| - const string& last_error() { return last_error_; }
|
| -
|
| - private:
|
| - string last_error_;
|
| -};
|
| -// Test that the result of FileDescriptor::DebugString() can be used to create
|
| -// the original descriptors.
|
| -TEST_F(FileDescriptorTest, DebugStringRoundTrip) {
|
| - std::set<string> visited;
|
| - std::vector<std::pair<string, string> > debug_strings;
|
| - ExtractDebugString(protobuf_unittest::TestAllTypes::descriptor()->file(),
|
| - &visited, &debug_strings);
|
| - ExtractDebugString(
|
| - protobuf_unittest::TestMessageWithCustomOptions::descriptor()->file(),
|
| - &visited, &debug_strings);
|
| - ExtractDebugString(proto3_arena_unittest::TestAllTypes::descriptor()->file(),
|
| - &visited, &debug_strings);
|
| - ASSERT_GE(debug_strings.size(), 3);
|
| -
|
| - DescriptorPool pool;
|
| - for (int i = 0; i < debug_strings.size(); ++i) {
|
| - const string& name = debug_strings[i].first;
|
| - const string& content = debug_strings[i].second;
|
| - google::protobuf::io::ArrayInputStream input_stream(content.data(), content.size());
|
| - SimpleErrorCollector error_collector;
|
| - google::protobuf::io::Tokenizer tokenizer(&input_stream, &error_collector);
|
| - google::protobuf::compiler::Parser parser;
|
| - parser.RecordErrorsTo(&error_collector);
|
| - FileDescriptorProto proto;
|
| - ASSERT_TRUE(parser.Parse(&tokenizer, &proto))
|
| - << error_collector.last_error() << "\n"
|
| - << content;
|
| - ASSERT_EQ("", error_collector.last_error());
|
| - proto.set_name(name);
|
| - const FileDescriptor* descriptor = pool.BuildFile(proto);
|
| - ASSERT_TRUE(descriptor != NULL) << proto.DebugString();
|
| - EXPECT_EQ(content, descriptor->DebugString());
|
| - }
|
| -}
|
| -
|
| // ===================================================================
|
|
|
| // Test simple flat messages and fields.
|
| @@ -836,9 +774,9 @@ TEST_F(DescriptorTest, FieldFullName) {
|
| TEST_F(DescriptorTest, FieldJsonName) {
|
| EXPECT_EQ("fieldName1", message4_->field(0)->json_name());
|
| EXPECT_EQ("fieldName2", message4_->field(1)->json_name());
|
| - EXPECT_EQ("FieldName3", message4_->field(2)->json_name());
|
| - EXPECT_EQ("FieldName4", message4_->field(3)->json_name());
|
| - EXPECT_EQ("FIELDNAME5", message4_->field(4)->json_name());
|
| + EXPECT_EQ("fieldName3", message4_->field(2)->json_name());
|
| + EXPECT_EQ("fieldName4", message4_->field(3)->json_name());
|
| + EXPECT_EQ("fIELDNAME5", message4_->field(4)->json_name());
|
| EXPECT_EQ("@type", message4_->field(5)->json_name());
|
|
|
| DescriptorProto proto;
|
| @@ -856,20 +794,10 @@ TEST_F(DescriptorTest, FieldJsonName) {
|
| ASSERT_EQ(6, proto.field_size());
|
| EXPECT_EQ("fieldName1", proto.field(0).json_name());
|
| EXPECT_EQ("fieldName2", proto.field(1).json_name());
|
| - EXPECT_EQ("FieldName3", proto.field(2).json_name());
|
| - EXPECT_EQ("FieldName4", proto.field(3).json_name());
|
| - EXPECT_EQ("FIELDNAME5", proto.field(4).json_name());
|
| + EXPECT_EQ("fieldName3", proto.field(2).json_name());
|
| + EXPECT_EQ("fieldName4", proto.field(3).json_name());
|
| + EXPECT_EQ("fIELDNAME5", proto.field(4).json_name());
|
| EXPECT_EQ("@type", proto.field(5).json_name());
|
| -
|
| - // Test generated descriptor.
|
| - const Descriptor* generated = protobuf_unittest::TestJsonName::descriptor();
|
| - ASSERT_EQ(6, generated->field_count());
|
| - EXPECT_EQ("fieldName1", generated->field(0)->json_name());
|
| - EXPECT_EQ("fieldName2", generated->field(1)->json_name());
|
| - EXPECT_EQ("FieldName3", generated->field(2)->json_name());
|
| - EXPECT_EQ("FieldName4", generated->field(3)->json_name());
|
| - EXPECT_EQ("FIELDNAME5", generated->field(4)->json_name());
|
| - EXPECT_EQ("@type", generated->field(5)->json_name());
|
| }
|
|
|
| TEST_F(DescriptorTest, FieldFile) {
|
| @@ -1924,7 +1852,7 @@ TEST_F(ExtensionDescriptorTest, FindExtensionByName) {
|
| }
|
|
|
| TEST_F(ExtensionDescriptorTest, FindAllExtensions) {
|
| - std::vector<const FieldDescriptor*> extensions;
|
| + vector<const FieldDescriptor*> extensions;
|
| pool_.FindAllExtensions(foo_, &extensions);
|
| ASSERT_EQ(4, extensions.size());
|
| EXPECT_EQ(10, extensions[0]->number());
|
| @@ -2688,7 +2616,7 @@ TEST_P(AllowUnknownDependenciesTest, CustomOption) {
|
|
|
| // Verify that no extension options were set, but they were left as
|
| // uninterpreted_options.
|
| - std::vector<const FieldDescriptor*> fields;
|
| + vector<const FieldDescriptor*> fields;
|
| file->options().GetReflection()->ListFields(file->options(), &fields);
|
| ASSERT_EQ(2, fields.size());
|
| EXPECT_TRUE(file->options().has_optimize_for());
|
| @@ -2777,7 +2705,6 @@ TEST(CustomOptions, OptionLocations) {
|
| protobuf_unittest::TestMessageWithCustomOptions::descriptor();
|
| const FileDescriptor* file = message->file();
|
| const FieldDescriptor* field = message->FindFieldByName("field1");
|
| - const OneofDescriptor* oneof = message->FindOneofByName("AnOneof");
|
| const EnumDescriptor* enm = message->FindEnumTypeByName("AnEnum");
|
| // TODO(benjy): Support EnumValue options, once the compiler does.
|
| const ServiceDescriptor* service =
|
| @@ -2792,8 +2719,6 @@ TEST(CustomOptions, OptionLocations) {
|
| field->options().GetExtension(protobuf_unittest::field_opt1));
|
| EXPECT_EQ(42, // Check that we get the default for an option we don't set.
|
| field->options().GetExtension(protobuf_unittest::field_opt2));
|
| - EXPECT_EQ(-99,
|
| - oneof->options().GetExtension(protobuf_unittest::oneof_opt1));
|
| EXPECT_EQ(-789,
|
| enm->options().GetExtension(protobuf_unittest::enum_opt1));
|
| EXPECT_EQ(123,
|
| @@ -3339,85 +3264,6 @@ TEST(CustomOptions, OptionsWithRequiredEnums) {
|
| EXPECT_EQ(protobuf_unittest::NewOptionType::NEW_VALUE, new_enum_opt.value());
|
| }
|
|
|
| -// Test that FileDescriptor::DebugString() formats custom options correctly.
|
| -TEST(CustomOptions, DebugString) {
|
| - DescriptorPool pool;
|
| -
|
| - FileDescriptorProto file_proto;
|
| - MessageOptions::descriptor()->file()->CopyTo(&file_proto);
|
| - ASSERT_TRUE(pool.BuildFile(file_proto) != NULL);
|
| -
|
| - // Add "foo.proto":
|
| - // import "google/protobuf/descriptor.proto";
|
| - // package "protobuf_unittest";
|
| - // option (protobuf_unittest.cc_option1) = 1;
|
| - // option (protobuf_unittest.cc_option2) = 2;
|
| - // extend google.protobuf.FieldOptions {
|
| - // optional int32 cc_option1 = 7736974;
|
| - // optional int32 cc_option2 = 7736975;
|
| - // }
|
| - ASSERT_TRUE(TextFormat::ParseFromString(
|
| - "name: \"foo.proto\" "
|
| - "package: \"protobuf_unittest\" "
|
| - "dependency: \"google/protobuf/descriptor.proto\" "
|
| - "options { "
|
| - " uninterpreted_option { "
|
| - " name { "
|
| - " name_part: \"protobuf_unittest.cc_option1\" "
|
| - " is_extension: true "
|
| - " } "
|
| - " positive_int_value: 1 "
|
| - " } "
|
| - " uninterpreted_option { "
|
| - " name { "
|
| - " name_part: \"protobuf_unittest.cc_option2\" "
|
| - " is_extension: true "
|
| - " } "
|
| - " positive_int_value: 2 "
|
| - " } "
|
| - "} "
|
| - "extension { "
|
| - " name: \"cc_option1\" "
|
| - " extendee: \".google.protobuf.FileOptions\" "
|
| - // This field number is intentionally chosen to be the same as
|
| - // (.fileopt1) defined in unittest_custom_options.proto (linked
|
| - // in this test binary). This is to test whether we are messing
|
| - // generated pool with custom descriptor pools when dealing with
|
| - // custom options.
|
| - " number: 7736974 "
|
| - " label: LABEL_OPTIONAL "
|
| - " type: TYPE_INT32 "
|
| - "}"
|
| - "extension { "
|
| - " name: \"cc_option2\" "
|
| - " extendee: \".google.protobuf.FileOptions\" "
|
| - " number: 7736975 "
|
| - " label: LABEL_OPTIONAL "
|
| - " type: TYPE_INT32 "
|
| - "}",
|
| - &file_proto));
|
| - const FileDescriptor* descriptor = pool.BuildFile(file_proto);
|
| - ASSERT_TRUE(descriptor != NULL);
|
| -
|
| - EXPECT_EQ(2, descriptor->extension_count());
|
| -
|
| - ASSERT_EQ(
|
| - "syntax = \"proto2\";\n"
|
| - "\n"
|
| - "import \"google/protobuf/descriptor.proto\";\n"
|
| - "package protobuf_unittest;\n"
|
| - "\n"
|
| - "option (.protobuf_unittest.cc_option1) = 1;\n"
|
| - "option (.protobuf_unittest.cc_option2) = 2;\n"
|
| - "\n"
|
| - "extend .google.protobuf.FileOptions {\n"
|
| - " optional int32 cc_option1 = 7736974;\n"
|
| - " optional int32 cc_option2 = 7736975;\n"
|
| - "}\n"
|
| - "\n",
|
| - descriptor->DebugString());
|
| -}
|
| -
|
| // ===================================================================
|
|
|
| class ValidationErrorTest : public testing::Test {
|
| @@ -5181,7 +5027,7 @@ TEST_F(ValidationErrorTest, AggregateValueParseError) {
|
| BuildFileWithErrors(
|
| EmbedAggregateValue("aggregate_value: \"1+2\""),
|
| "foo.proto: foo.proto: OPTION_VALUE: Error while parsing option "
|
| - "value for \"foo\": Expected identifier, got: 1\n");
|
| + "value for \"foo\": Expected identifier.\n");
|
| }
|
|
|
| TEST_F(ValidationErrorTest, AggregateValueUnknownFields) {
|
| @@ -5311,7 +5157,7 @@ TEST_F(ValidationErrorTest, ErrorsReportedToLogError) {
|
| "message_type { name: \"Foo\" } ",
|
| &file_proto));
|
|
|
| - std::vector<string> errors;
|
| + vector<string> errors;
|
|
|
| {
|
| ScopedMemoryLog log;
|
| @@ -5705,69 +5551,6 @@ TEST_F(ValidationErrorTest, MapEntryConflictsWithEnum) {
|
| "with an existing enum type.\n");
|
| }
|
|
|
| -TEST_F(ValidationErrorTest, EnumValuesConflictWhenPrefixesStripped) {
|
| - BuildFileWithErrors(
|
| - "syntax: 'proto3'"
|
| - "name: 'foo.proto' "
|
| - "enum_type {"
|
| - " name: 'FooEnum' "
|
| - " value { name: 'FOO_ENUM_BAZ' number: 0 }"
|
| - " value { name: 'BAZ' number: 1 }"
|
| - "}",
|
| - "foo.proto: BAZ: NAME: When enum name is stripped and label is "
|
| - "PascalCased (Baz), this value label conflicts with FOO_ENUM_BAZ. This "
|
| - "will make the proto fail to compile for some languages, such as C#.\n");
|
| -
|
| - BuildFileWithErrors(
|
| - "syntax: 'proto3'"
|
| - "name: 'foo.proto' "
|
| - "enum_type {"
|
| - " name: 'FooEnum' "
|
| - " value { name: 'FOOENUM_BAZ' number: 0 }"
|
| - " value { name: 'BAZ' number: 1 }"
|
| - "}",
|
| - "foo.proto: BAZ: NAME: When enum name is stripped and label is "
|
| - "PascalCased (Baz), this value label conflicts with FOOENUM_BAZ. This "
|
| - "will make the proto fail to compile for some languages, such as C#.\n");
|
| -
|
| - BuildFileWithErrors(
|
| - "syntax: 'proto3'"
|
| - "name: 'foo.proto' "
|
| - "enum_type {"
|
| - " name: 'FooEnum' "
|
| - " value { name: 'FOO_ENUM_BAR_BAZ' number: 0 }"
|
| - " value { name: 'BAR__BAZ' number: 1 }"
|
| - "}",
|
| - "foo.proto: BAR__BAZ: NAME: When enum name is stripped and label is "
|
| - "PascalCased (BarBaz), this value label conflicts with "
|
| - "FOO_ENUM_BAR_BAZ. This will make the proto fail to compile for some "
|
| - "languages, such as C#.\n");
|
| -
|
| - BuildFileWithErrors(
|
| - "syntax: 'proto3'"
|
| - "name: 'foo.proto' "
|
| - "enum_type {"
|
| - " name: 'FooEnum' "
|
| - " value { name: 'FOO_ENUM__BAR_BAZ' number: 0 }"
|
| - " value { name: 'BAR_BAZ' number: 1 }"
|
| - "}",
|
| - "foo.proto: BAR_BAZ: NAME: When enum name is stripped and label is "
|
| - "PascalCased (BarBaz), this value label conflicts with "
|
| - "FOO_ENUM__BAR_BAZ. This will make the proto fail to compile for some "
|
| - "languages, such as C#.\n");
|
| -
|
| - // This isn't an error because the underscore will cause the PascalCase to
|
| - // differ by case (BarBaz vs. Barbaz).
|
| - BuildFile(
|
| - "syntax: 'proto3'"
|
| - "name: 'foo.proto' "
|
| - "enum_type {"
|
| - " name: 'FooEnum' "
|
| - " value { name: 'BAR_BAZ' number: 0 }"
|
| - " value { name: 'BARBAZ' number: 1 }"
|
| - "}");
|
| -}
|
| -
|
| TEST_F(ValidationErrorTest, MapEntryConflictsWithOneof) {
|
| FileDescriptorProto file_proto;
|
| FillValidMapEntry(&file_proto);
|
| @@ -6051,7 +5834,7 @@ TEST_F(ValidationErrorTest, ValidateProto3JsonName) {
|
| " field { name:'name' number:1 label:LABEL_OPTIONAL type:TYPE_INT32 }"
|
| " field { name:'Name' number:2 label:LABEL_OPTIONAL type:TYPE_INT32 }"
|
| "}",
|
| - "foo.proto: Foo: OTHER: The JSON camel-case name of field \"Name\" "
|
| + "foo.proto: Foo: OTHER: The JSON camcel-case name of field \"Name\" "
|
| "conflicts with field \"name\". This is not allowed in proto3.\n");
|
| // Underscores are ignored.
|
| BuildFileWithErrors(
|
| @@ -6062,7 +5845,7 @@ TEST_F(ValidationErrorTest, ValidateProto3JsonName) {
|
| " field { name:'ab' number:1 label:LABEL_OPTIONAL type:TYPE_INT32 }"
|
| " field { name:'_a__b_' number:2 label:LABEL_OPTIONAL type:TYPE_INT32 }"
|
| "}",
|
| - "foo.proto: Foo: OTHER: The JSON camel-case name of field \"_a__b_\" "
|
| + "foo.proto: Foo: OTHER: The JSON camcel-case name of field \"_a__b_\" "
|
| "conflicts with field \"ab\". This is not allowed in proto3.\n");
|
| }
|
|
|
| @@ -6301,7 +6084,7 @@ TEST_F(DatabaseBackedPoolTest, FindAllExtensions) {
|
| for (int i = 0; i < 2; ++i) {
|
| // Repeat the lookup twice, to check that we get consistent
|
| // results despite the fallback database lookup mutating the pool.
|
| - std::vector<const FieldDescriptor*> extensions;
|
| + vector<const FieldDescriptor*> extensions;
|
| pool.FindAllExtensions(foo, &extensions);
|
| ASSERT_EQ(1, extensions.size());
|
| EXPECT_EQ(5, extensions[0]->number());
|
| @@ -6312,7 +6095,7 @@ TEST_F(DatabaseBackedPoolTest, ErrorWithoutErrorCollector) {
|
| ErrorDescriptorDatabase error_database;
|
| DescriptorPool pool(&error_database);
|
|
|
| - std::vector<string> errors;
|
| + vector<string> errors;
|
|
|
| {
|
| ScopedMemoryLog log;
|
|
|