aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathan Brown <nathan@nkbrown.us>2011-08-09 13:44:13 -0700
committerNathan Brown <Nathan.Brown@harley-davidson.com>2011-08-09 13:44:13 -0700
commit25981d4007eb5df42a25d8847efe805e05126202 (patch)
treee9dc5b23785a455f91df8f7953fa3a47c4c1fb59 /src
parente8c76bd84b0b032ec3ece2455564f3c5731f7e0f (diff)
parentd4b3859b34d5422b53075179f0c9150ff70609b0 (diff)
downloadprotobuf-25981d4007eb5df42a25d8847efe805e05126202.tar.gz
protobuf-25981d4007eb5df42a25d8847efe805e05126202.tar.bz2
protobuf-25981d4007eb5df42a25d8847efe805e05126202.zip
Merge
Diffstat (limited to 'src')
-rw-r--r--src/ProtoGen.Test/TestPreprocessing.cs86
-rw-r--r--src/ProtoGen/ServiceGenerator.cs7
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));