|  | @@ -29,7 +29,6 @@
 | 
	
		
			
				|  |  |  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #include <memory>
 | 
	
		
			
				|  |  | -#include <list>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #include <google/protobuf/compiler/ruby/ruby_generator.h>
 | 
	
		
			
				|  |  |  #include <google/protobuf/compiler/command_line_interface.h>
 | 
	
	
		
			
				|  | @@ -57,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.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void RubyTest(string proto_file) {
 | 
	
		
			
				|  |  | +TEST(RubyGeneratorTest, Proto3GeneratorTest) {
 | 
	
		
			
				|  |  |    string ruby_tests = FindRubyTestDir();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    google::protobuf::compiler::CommandLineInterface cli;
 | 
	
	
		
			
				|  | @@ -69,23 +68,22 @@ void RubyTest(string proto_file) {
 | 
	
		
			
				|  |  |    // Copy generated_code.proto to the temporary test directory.
 | 
	
		
			
				|  |  |    string test_input;
 | 
	
		
			
				|  |  |    GOOGLE_CHECK_OK(File::GetContents(
 | 
	
		
			
				|  |  | -      ruby_tests + proto_file + ".proto",
 | 
	
		
			
				|  |  | +      ruby_tests + "/ruby_generated_code.proto",
 | 
	
		
			
				|  |  |        &test_input,
 | 
	
		
			
				|  |  |        true));
 | 
	
		
			
				|  |  |    GOOGLE_CHECK_OK(File::SetContents(
 | 
	
		
			
				|  |  | -      TestTempDir() + proto_file + ".proto",
 | 
	
		
			
				|  |  | +      TestTempDir() + "/ruby_generated_code.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();
 | 
	
		
			
				|  |  | -  string proto_target = TestTempDir() + proto_file + ".proto";
 | 
	
		
			
				|  |  |    const char* argv[] = {
 | 
	
		
			
				|  |  |      "protoc",
 | 
	
		
			
				|  |  |      ruby_out.c_str(),
 | 
	
		
			
				|  |  |      proto_path.c_str(),
 | 
	
		
			
				|  |  | -    proto_target.c_str(),
 | 
	
		
			
				|  |  | +    "ruby_generated_code.proto",
 | 
	
		
			
				|  |  |    };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    EXPECT_EQ(0, cli.Run(4, argv));
 | 
	
	
		
			
				|  | @@ -93,35 +91,61 @@ void RubyTest(string proto_file) {
 | 
	
		
			
				|  |  |    // Load the generated output and compare to the expected result.
 | 
	
		
			
				|  |  |    string output;
 | 
	
		
			
				|  |  |    GOOGLE_CHECK_OK(File::GetContentsAsText(
 | 
	
		
			
				|  |  | -      TestTempDir() + proto_file + "_pb.rb",
 | 
	
		
			
				|  |  | +      TestTempDir() + "/ruby_generated_code_pb.rb",
 | 
	
		
			
				|  |  |        &output,
 | 
	
		
			
				|  |  |        true));
 | 
	
		
			
				|  |  |    string expected_output;
 | 
	
		
			
				|  |  |    GOOGLE_CHECK_OK(File::GetContentsAsText(
 | 
	
		
			
				|  |  | -      ruby_tests + proto_file + "_pb.rb",
 | 
	
		
			
				|  |  | +      ruby_tests + "/ruby_generated_code_pb.rb",
 | 
	
		
			
				|  |  |        &expected_output,
 | 
	
		
			
				|  |  |        true));
 | 
	
		
			
				|  |  |    EXPECT_EQ(expected_output, output);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -TEST(RubyGeneratorTest, Proto3GeneratorTest) {
 | 
	
		
			
				|  |  | -  RubyTest("/ruby_generated_code");
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  TEST(RubyGeneratorTest, Proto2GeneratorTest) {
 | 
	
		
			
				|  |  | -    RubyTest("/ruby_generated_code_proto2");
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  string ruby_tests = FindRubyTestDir();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -TEST(RubyGeneratorTest, Proto3ImplicitPackageTest) {
 | 
	
		
			
				|  |  | -    RubyTest("/ruby_generated_pkg_implicit");
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  google::protobuf::compiler::CommandLineInterface cli;
 | 
	
		
			
				|  |  | +  cli.SetInputsAreProtoPathRelative(true);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -TEST(RubyGeneratorTest, Proto3ExplictPackageTest) {
 | 
	
		
			
				|  |  | -    RubyTest("/ruby_generated_pkg_explicit");
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  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));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -TEST(RubyGeneratorTest, Proto3ExplictLegacyPackageTest) {
 | 
	
		
			
				|  |  | -    RubyTest("/ruby_generated_pkg_explicit_legacy");
 | 
	
		
			
				|  |  | +  // 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
 |