diff options
author | Nathan Brown <nathan@nkbrown.us> | 2011-08-09 13:44:13 -0700 |
---|---|---|
committer | Nathan Brown <Nathan.Brown@harley-davidson.com> | 2011-08-09 13:44:13 -0700 |
commit | 25981d4007eb5df42a25d8847efe805e05126202 (patch) | |
tree | e9dc5b23785a455f91df8f7953fa3a47c4c1fb59 | |
parent | e8c76bd84b0b032ec3ece2455564f3c5731f7e0f (diff) | |
parent | d4b3859b34d5422b53075179f0c9150ff70609b0 (diff) | |
download | protobuf-25981d4007eb5df42a25d8847efe805e05126202.tar.gz protobuf-25981d4007eb5df42a25d8847efe805e05126202.tar.bz2 protobuf-25981d4007eb5df42a25d8847efe805e05126202.zip |
Merge
-rw-r--r-- | src/ProtoGen.Test/TestPreprocessing.cs | 86 | ||||
-rw-r--r-- | src/ProtoGen/ServiceGenerator.cs | 7 |
2 files changed, 90 insertions, 3 deletions
diff --git a/src/ProtoGen.Test/TestPreprocessing.cs b/src/ProtoGen.Test/TestPreprocessing.cs index af1d22ab..4a57b3b5 100644 --- a/src/ProtoGen.Test/TestPreprocessing.cs +++ b/src/ProtoGen.Test/TestPreprocessing.cs @@ -673,5 +673,91 @@ message MyMessageList { 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)));
+ }
+ }
}
}
\ No newline at end of file diff --git a/src/ProtoGen/ServiceGenerator.cs b/src/ProtoGen/ServiceGenerator.cs index 8a4a95be..ac84d3d8 100644 --- a/src/ProtoGen/ServiceGenerator.cs +++ b/src/ProtoGen/ServiceGenerator.cs @@ -76,7 +76,7 @@ namespace Google.ProtocolBuffers.ProtoGen DescriptorUtil.GetQualifiedUmbrellaClassName(Descriptor.File.CSharpOptions),
Descriptor.Index);
writer.WriteLine("}");
- writer.WriteLine("{0} pbd::ServiceDescriptor DescriptorForType {{", ClassAccessLevel);
+ writer.WriteLine("public pbd::ServiceDescriptor DescriptorForType {");
writer.WriteLine(" get { return Descriptor; }");
writer.WriteLine("}");
@@ -92,7 +92,7 @@ namespace Google.ProtocolBuffers.ProtoGen private void GenerateCallMethod(TextGenerator writer)
{
writer.WriteLine();
- writer.WriteLine("public void CallMethod(", ClassAccessLevel);
+ writer.WriteLine("public void CallMethod(");
writer.WriteLine(" pbd::MethodDescriptor method,");
writer.WriteLine(" pb::IRpcController controller,");
writer.WriteLine(" pb::IMessage request,");
@@ -174,7 +174,8 @@ namespace Google.ProtocolBuffers.ProtoGen foreach (MethodDescriptor method in Descriptor.Methods)
{
writer.WriteLine();
- writer.WriteLine("public override void {0}(", NameHelpers.UnderscoresToPascalCase(method.Name));
+ writer.WriteLine("{0} override void {1}(", ClassAccessLevel,
+ NameHelpers.UnderscoresToPascalCase(method.Name));
writer.WriteLine(" pb::IRpcController controller,");
writer.WriteLine(" {0} request,", GetClassName(method.InputType));
writer.WriteLine(" global::System.Action<{0}> done) {{", GetClassName(method.OutputType));
|