diff options
author | Harshit Chopra <harshit@squareup.com> | 2017-08-25 12:11:15 -0700 |
---|---|---|
committer | Harshit Chopra <harshit@squareup.com> | 2018-09-27 14:21:16 -0400 |
commit | d0535cc09e6eac1bddddd51c20b5738c0e841765 (patch) | |
tree | f712febe270ba656970f65b952114e14650103b6 /src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc | |
parent | 048f5c26a783f5f92061aec3aab19986e5c8d435 (diff) | |
download | protobuf-d0535cc09e6eac1bddddd51c20b5738c0e841765.tar.gz protobuf-d0535cc09e6eac1bddddd51c20b5738c0e841765.tar.bz2 protobuf-d0535cc09e6eac1bddddd51c20b5738c0e841765.zip |
Adds support for proto2 syntax for Ruby gem.
This change only adds basic proto2 support without advanced features
like extensions, custom options, maps, etc.
The protoc binary now generates ruby code for proto2 syntax.
However, for now, it is restricted to proto2 files without advanced features
like extensions, in which case it still errors out.
This change also modifies the DSL to add proto messages to the DescriptorPool.
There is a new DSL Builder#add_file to create a new FileDescriptor. With this,
the generated ruby DSL looks something like:
Google::Protobuf::DescriptorPool.generated_pool.build do
add_file "test.proto" do
add_message "foo" do
optional :val, :int32, 1
end
end
end
Diffstat (limited to 'src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc')
-rw-r--r-- | src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc b/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc index 1aabe8aa..984d6b89 100644 --- a/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc +++ b/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc @@ -56,7 +56,7 @@ string FindRubyTestDir() { // Some day, we may integrate build systems between protoc and the language // extensions to the point where we can do this test in a more automated way. -TEST(RubyGeneratorTest, GeneratorTest) { +TEST(RubyGeneratorTest, Proto3GeneratorTest) { string ruby_tests = FindRubyTestDir(); google::protobuf::compiler::CommandLineInterface cli; @@ -102,6 +102,52 @@ TEST(RubyGeneratorTest, GeneratorTest) { EXPECT_EQ(expected_output, output); } +TEST(RubyGeneratorTest, Proto2GeneratorTest) { + string ruby_tests = FindRubyTestDir(); + + google::protobuf::compiler::CommandLineInterface cli; + cli.SetInputsAreProtoPathRelative(true); + + ruby::Generator ruby_generator; + cli.RegisterGenerator("--ruby_out", &ruby_generator, ""); + + // Copy generated_code.proto to the temporary test directory. + string test_input; + GOOGLE_CHECK_OK(File::GetContents( + ruby_tests + "/ruby_generated_code_proto2.proto", + &test_input, + true)); + GOOGLE_CHECK_OK(File::SetContents( + TestTempDir() + "/ruby_generated_code_proto2.proto", + test_input, + true)); + + // Invoke the proto compiler (we will be inside TestTempDir() at this point). + string ruby_out = "--ruby_out=" + TestTempDir(); + string proto_path = "--proto_path=" + TestTempDir(); + const char* argv[] = { + "protoc", + ruby_out.c_str(), + proto_path.c_str(), + "ruby_generated_code_proto2.proto", + }; + + EXPECT_EQ(0, cli.Run(4, argv)); + + // Load the generated output and compare to the expected result. + string output; + GOOGLE_CHECK_OK(File::GetContents( + TestTempDir() + "/ruby_generated_code_proto2_pb.rb", + &output, + true)); + string expected_output; + GOOGLE_CHECK_OK(File::GetContents( + ruby_tests + "/ruby_generated_code_proto2_pb.rb", + &expected_output, + true)); + EXPECT_EQ(expected_output, output); +} + } // namespace } // namespace ruby } // namespace compiler |