|
@@ -673,5 +673,91 @@ message MyMessageList {
|
|
a.GetType("nunit.simple.Proto.MyMessageList", true, true);
|
|
a.GetType("nunit.simple.Proto.MyMessageList", true, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ [Test]
|
|
|
|
+ public void TestProtoFileWithService()
|
|
|
|
+ {
|
|
|
|
+ string test = new StackFrame(false).GetMethod().Name;
|
|
|
|
+ Setup();
|
|
|
|
+ using (TempFile source = TempFile.Attach(test + ".cs"))
|
|
|
|
+ using (ProtoFile proto = new ProtoFile(test + ".proto",
|
|
|
|
+@"
|
|
|
|
+import ""google/protobuf/csharp_options.proto"";
|
|
|
|
+option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;
|
|
|
|
+
|
|
|
|
+package nunit.simple;
|
|
|
|
+// Test a very simple message.
|
|
|
|
+message MyMessage {
|
|
|
|
+ optional string name = 1;
|
|
|
|
+}
|
|
|
|
+// test a very simple service.
|
|
|
|
+service TestService {
|
|
|
|
+ rpc Execute (MyMessage) returns (MyMessage);
|
|
|
|
+}"))
|
|
|
|
+ {
|
|
|
|
+ CopyInGoogleProtoFiles();
|
|
|
|
+
|
|
|
|
+ RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true", "-nest_classes=false");
|
|
|
|
+ Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
|
|
|
|
+
|
|
|
|
+ Assembly a = RunCsc(0, source.TempPath);
|
|
|
|
+ //assert that the service type is in the expected namespace
|
|
|
|
+ Type t1 = a.GetType("nunit.simple.TestService", true, true);
|
|
|
|
+ Assert.IsTrue(typeof(IService).IsAssignableFrom(t1), "Expect an IService");
|
|
|
|
+ Assert.IsTrue(t1.IsAbstract, "Expect abstract class");
|
|
|
|
+ //assert that the Stub subclass type is in the expected namespace
|
|
|
|
+ Type t2 = a.GetType("nunit.simple.TestService+Stub", true, true);
|
|
|
|
+ Assert.IsTrue(t1.IsAssignableFrom(t2), "Expect a sub of TestService");
|
|
|
|
+ Assert.IsFalse(t2.IsAbstract, "Expect concrete class");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [Test]
|
|
|
|
+ public void TestProtoFileWithServiceInternal()
|
|
|
|
+ {
|
|
|
|
+ string test = new StackFrame(false).GetMethod().Name;
|
|
|
|
+ Setup();
|
|
|
|
+ using (TempFile source = TempFile.Attach(test + ".cs"))
|
|
|
|
+ using (ProtoFile proto = new ProtoFile(test + ".proto",
|
|
|
|
+@"
|
|
|
|
+import ""google/protobuf/csharp_options.proto"";
|
|
|
|
+option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;
|
|
|
|
+
|
|
|
|
+package nunit.simple;
|
|
|
|
+// Test a very simple message.
|
|
|
|
+message MyMessage {
|
|
|
|
+ optional string name = 1;
|
|
|
|
+}
|
|
|
|
+// test a very simple service.
|
|
|
|
+service TestService {
|
|
|
|
+ rpc Execute (MyMessage) returns (MyMessage);
|
|
|
|
+}"))
|
|
|
|
+ {
|
|
|
|
+ CopyInGoogleProtoFiles();
|
|
|
|
+
|
|
|
|
+ RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true", "-nest_classes=false", "-public_classes=false");
|
|
|
|
+ Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
|
|
|
|
+
|
|
|
|
+ Assembly a = RunCsc(0, source.TempPath);
|
|
|
|
+ //assert that the service type is in the expected namespace
|
|
|
|
+ Type t1 = a.GetType("nunit.simple.TestService", true, true);
|
|
|
|
+ Assert.IsTrue(typeof(IService).IsAssignableFrom(t1), "Expect an IService");
|
|
|
|
+ Assert.IsTrue(t1.IsAbstract, "Expect abstract class");
|
|
|
|
+ //assert that the Stub subclass type is in the expected namespace
|
|
|
|
+ Type t2 = a.GetType("nunit.simple.TestService+Stub", true, true);
|
|
|
|
+ Assert.IsTrue(t1.IsAssignableFrom(t2), "Expect a sub of TestService");
|
|
|
|
+ Assert.IsFalse(t2.IsAbstract, "Expect concrete class");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static void CopyInGoogleProtoFiles()
|
|
|
|
+ {
|
|
|
|
+ string google = Path.Combine(TempPath, "google\\protobuf");
|
|
|
|
+ Directory.CreateDirectory(google);
|
|
|
|
+ foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))
|
|
|
|
+ {
|
|
|
|
+ File.Copy(file, Path.Combine(google, Path.GetFileName(file)));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|