| Index: third_party/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc
|
| ===================================================================
|
| --- third_party/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc (revision 216642)
|
| +++ third_party/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc (working copy)
|
| @@ -122,6 +122,10 @@
|
| // substring.
|
| void ExpectErrorSubstring(const string& expected_substring);
|
|
|
| + // Like ExpectErrorSubstring, but checks that Run() returned zero.
|
| + void ExpectErrorSubstringWithZeroReturnCode(
|
| + const string& expected_substring);
|
| +
|
| // Returns true if ExpectErrorSubstring(expected_substring) would pass, but
|
| // does not fail otherwise.
|
| bool HasAlternateErrorSubstring(const string& expected_substring);
|
| @@ -225,7 +229,7 @@
|
| // Register generators.
|
| CodeGenerator* generator = new MockCodeGenerator("test_generator");
|
| mock_generators_to_delete_.push_back(generator);
|
| - cli_.RegisterGenerator("--test_out", generator, "Test output.");
|
| + cli_.RegisterGenerator("--test_out", "--test_opt", generator, "Test output.");
|
| cli_.RegisterGenerator("-t", generator, "Test output.");
|
|
|
| generator = new MockCodeGenerator("alt_generator");
|
| @@ -345,6 +349,12 @@
|
| EXPECT_PRED_FORMAT2(testing::IsSubstring, expected_substring, error_text_);
|
| }
|
|
|
| +void CommandLineInterfaceTest::ExpectErrorSubstringWithZeroReturnCode(
|
| + const string& expected_substring) {
|
| + EXPECT_EQ(0, return_code_);
|
| + EXPECT_PRED_FORMAT2(testing::IsSubstring, expected_substring, error_text_);
|
| +}
|
| +
|
| bool CommandLineInterfaceTest::HasAlternateErrorSubstring(
|
| const string& expected_substring) {
|
| EXPECT_NE(0, return_code_);
|
| @@ -544,6 +554,32 @@
|
| ExpectGenerated("test_plugin", "TestPluginParameter", "foo.proto", "Foo");
|
| }
|
|
|
| +TEST_F(CommandLineInterfaceTest, ExtraGeneratorParameters) {
|
| + // Test that generator parameters specified with the option flag are
|
| + // correctly passed to the code generator.
|
| +
|
| + CreateTempFile("foo.proto",
|
| + "syntax = \"proto2\";\n"
|
| + "message Foo {}\n");
|
| + // Create the "a" and "b" sub-directories.
|
| + CreateTempDir("a");
|
| + CreateTempDir("b");
|
| +
|
| + Run("protocol_compiler "
|
| + "--test_opt=foo1 "
|
| + "--test_out=bar:$tmpdir/a "
|
| + "--test_opt=foo2 "
|
| + "--test_out=baz:$tmpdir/b "
|
| + "--test_opt=foo3 "
|
| + "--proto_path=$tmpdir foo.proto");
|
| +
|
| + ExpectNoErrors();
|
| + ExpectGenerated(
|
| + "test_generator", "bar,foo1,foo2,foo3", "foo.proto", "Foo", "a");
|
| + ExpectGenerated(
|
| + "test_generator", "baz,foo1,foo2,foo3", "foo.proto", "Foo", "b");
|
| +}
|
| +
|
| TEST_F(CommandLineInterfaceTest, Insert) {
|
| // Test running a generator that inserts code into another's output.
|
|
|
| @@ -779,8 +815,35 @@
|
| if (HasFatalFailure()) return;
|
| ASSERT_EQ(1, descriptor_set.file_size());
|
| EXPECT_EQ("bar.proto", descriptor_set.file(0).name());
|
| + // Descriptor set should not have source code info.
|
| + EXPECT_FALSE(descriptor_set.file(0).has_source_code_info());
|
| }
|
|
|
| +TEST_F(CommandLineInterfaceTest, WriteDescriptorSetWithSourceInfo) {
|
| + CreateTempFile("foo.proto",
|
| + "syntax = \"proto2\";\n"
|
| + "message Foo {}\n");
|
| + CreateTempFile("bar.proto",
|
| + "syntax = \"proto2\";\n"
|
| + "import \"foo.proto\";\n"
|
| + "message Bar {\n"
|
| + " optional Foo foo = 1;\n"
|
| + "}\n");
|
| +
|
| + Run("protocol_compiler --descriptor_set_out=$tmpdir/descriptor_set "
|
| + "--include_source_info --proto_path=$tmpdir bar.proto");
|
| +
|
| + ExpectNoErrors();
|
| +
|
| + FileDescriptorSet descriptor_set;
|
| + ReadDescriptorSet("descriptor_set", &descriptor_set);
|
| + if (HasFatalFailure()) return;
|
| + ASSERT_EQ(1, descriptor_set.file_size());
|
| + EXPECT_EQ("bar.proto", descriptor_set.file(0).name());
|
| + // Source code info included.
|
| + EXPECT_TRUE(descriptor_set.file(0).has_source_code_info());
|
| +}
|
| +
|
| TEST_F(CommandLineInterfaceTest, WriteTransitiveDescriptorSet) {
|
| CreateTempFile("foo.proto",
|
| "syntax = \"proto2\";\n"
|
| @@ -807,8 +870,42 @@
|
| }
|
| EXPECT_EQ("foo.proto", descriptor_set.file(0).name());
|
| EXPECT_EQ("bar.proto", descriptor_set.file(1).name());
|
| + // Descriptor set should not have source code info.
|
| + EXPECT_FALSE(descriptor_set.file(0).has_source_code_info());
|
| + EXPECT_FALSE(descriptor_set.file(1).has_source_code_info());
|
| }
|
|
|
| +TEST_F(CommandLineInterfaceTest, WriteTransitiveDescriptorSetWithSourceInfo) {
|
| + CreateTempFile("foo.proto",
|
| + "syntax = \"proto2\";\n"
|
| + "message Foo {}\n");
|
| + CreateTempFile("bar.proto",
|
| + "syntax = \"proto2\";\n"
|
| + "import \"foo.proto\";\n"
|
| + "message Bar {\n"
|
| + " optional Foo foo = 1;\n"
|
| + "}\n");
|
| +
|
| + Run("protocol_compiler --descriptor_set_out=$tmpdir/descriptor_set "
|
| + "--include_imports --include_source_info --proto_path=$tmpdir bar.proto");
|
| +
|
| + ExpectNoErrors();
|
| +
|
| + FileDescriptorSet descriptor_set;
|
| + ReadDescriptorSet("descriptor_set", &descriptor_set);
|
| + if (HasFatalFailure()) return;
|
| + ASSERT_EQ(2, descriptor_set.file_size());
|
| + if (descriptor_set.file(0).name() == "bar.proto") {
|
| + std::swap(descriptor_set.mutable_file()->mutable_data()[0],
|
| + descriptor_set.mutable_file()->mutable_data()[1]);
|
| + }
|
| + EXPECT_EQ("foo.proto", descriptor_set.file(0).name());
|
| + EXPECT_EQ("bar.proto", descriptor_set.file(1).name());
|
| + // Source code info included.
|
| + EXPECT_TRUE(descriptor_set.file(0).has_source_code_info());
|
| + EXPECT_TRUE(descriptor_set.file(1).has_source_code_info());
|
| +}
|
| +
|
| // -------------------------------------------------------------------
|
|
|
| TEST_F(CommandLineInterfaceTest, ParseErrors) {
|
| @@ -1129,6 +1226,17 @@
|
| #endif
|
| }
|
|
|
| +TEST_F(CommandLineInterfaceTest, PluginReceivesSourceCodeInfo) {
|
| + CreateTempFile("foo.proto",
|
| + "syntax = \"proto2\";\n"
|
| + "message MockCodeGenerator_HasSourceCodeInfo {}\n");
|
| +
|
| + Run("protocol_compiler --plug_out=$tmpdir --proto_path=$tmpdir foo.proto");
|
| +
|
| + ExpectErrorSubstring(
|
| + "Saw message type MockCodeGenerator_HasSourceCodeInfo: 1.");
|
| +}
|
| +
|
| TEST_F(CommandLineInterfaceTest, GeneratorPluginNotFound) {
|
| // Test what happens if the plugin isn't found.
|
|
|
| @@ -1171,11 +1279,11 @@
|
| TEST_F(CommandLineInterfaceTest, HelpText) {
|
| Run("test_exec_name --help");
|
|
|
| - ExpectErrorSubstring("Usage: test_exec_name ");
|
| - ExpectErrorSubstring("--test_out=OUT_DIR");
|
| - ExpectErrorSubstring("Test output.");
|
| - ExpectErrorSubstring("--alt_out=OUT_DIR");
|
| - ExpectErrorSubstring("Alt output.");
|
| + ExpectErrorSubstringWithZeroReturnCode("Usage: test_exec_name ");
|
| + ExpectErrorSubstringWithZeroReturnCode("--test_out=OUT_DIR");
|
| + ExpectErrorSubstringWithZeroReturnCode("Test output.");
|
| + ExpectErrorSubstringWithZeroReturnCode("--alt_out=OUT_DIR");
|
| + ExpectErrorSubstringWithZeroReturnCode("Alt output.");
|
| }
|
|
|
| TEST_F(CommandLineInterfaceTest, GccFormatErrors) {
|
|
|