diff options
author | csharptest <roger@csharptest.net> | 2011-05-20 15:15:34 -0500 |
---|---|---|
committer | rogerk <devnull@localhost> | 2011-05-20 15:15:34 -0500 |
commit | 71f662c33e9938951eec3da97140aed25aa815d7 (patch) | |
tree | c322e13686cad5c8bff9e54d7585fc8e4adf6537 /src/ProtoGen.Test | |
parent | d965c666ecf405f4e997ab251e72551508a14678 (diff) | |
download | protobuf-71f662c33e9938951eec3da97140aed25aa815d7.tar.gz protobuf-71f662c33e9938951eec3da97140aed25aa815d7.tar.bz2 protobuf-71f662c33e9938951eec3da97140aed25aa815d7.zip |
reformatted all code to .NET standard formatting
Diffstat (limited to 'src/ProtoGen.Test')
-rw-r--r-- | src/ProtoGen.Test/DependencyResolutionTest.cs | 274 | ||||
-rw-r--r-- | src/ProtoGen.Test/Properties/AssemblyInfo.cs | 76 | ||||
-rw-r--r-- | src/ProtoGen.Test/TempFile.cs | 113 | ||||
-rw-r--r-- | src/ProtoGen.Test/TestPreprocessing.cs | 1287 |
4 files changed, 925 insertions, 825 deletions
diff --git a/src/ProtoGen.Test/DependencyResolutionTest.cs b/src/ProtoGen.Test/DependencyResolutionTest.cs index 7e19d443..8ac5b348 100644 --- a/src/ProtoGen.Test/DependencyResolutionTest.cs +++ b/src/ProtoGen.Test/DependencyResolutionTest.cs @@ -1,126 +1,150 @@ -#region Copyright notice and license -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#endregion - -using System.Collections.Generic; -using Google.ProtocolBuffers.DescriptorProtos; -using Google.ProtocolBuffers.Descriptors; -using NUnit.Framework; - -namespace Google.ProtocolBuffers.ProtoGen { - /// <summary> - /// Tests for the dependency resolution in Generator. - /// </summary> - [TestFixture] - public class DependencyResolutionTest { - - [Test] - public void TwoDistinctFiles() { - FileDescriptorProto first = new FileDescriptorProto.Builder { Name="First" }.Build(); - FileDescriptorProto second = new FileDescriptorProto.Builder { Name="Second" }.Build(); - FileDescriptorSet set = new FileDescriptorSet { FileList = { first, second } }; - - IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set); - Assert.AreEqual(2, converted.Count); - Assert.AreEqual("First", converted[0].Name); - Assert.AreEqual(0, converted[0].Dependencies.Count); - Assert.AreEqual("Second", converted[1].Name); - Assert.AreEqual(0, converted[1].Dependencies.Count); - } - - [Test] - public void FirstDependsOnSecond() { - FileDescriptorProto first = new FileDescriptorProto.Builder { Name = "First", DependencyList = {"Second"} }.Build(); - FileDescriptorProto second = new FileDescriptorProto.Builder { Name = "Second" }.Build(); - FileDescriptorSet set = new FileDescriptorSet { FileList = { first, second } }; - IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set); - Assert.AreEqual(2, converted.Count); - Assert.AreEqual("First", converted[0].Name); - Assert.AreEqual(1, converted[0].Dependencies.Count); - Assert.AreEqual(converted[1], converted[0].Dependencies[0]); - Assert.AreEqual("Second", converted[1].Name); - Assert.AreEqual(0, converted[1].Dependencies.Count); - } - - [Test] - public void SecondDependsOnFirst() { - FileDescriptorProto first = new FileDescriptorProto.Builder { Name = "First" }.Build(); - FileDescriptorProto second = new FileDescriptorProto.Builder { Name = "Second", DependencyList = {"First"} }.Build(); - FileDescriptorSet set = new FileDescriptorSet { FileList = { first, second } }; - IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set); - Assert.AreEqual(2, converted.Count); - Assert.AreEqual("First", converted[0].Name); - Assert.AreEqual(0, converted[0].Dependencies.Count); - Assert.AreEqual("Second", converted[1].Name); - Assert.AreEqual(1, converted[1].Dependencies.Count); - Assert.AreEqual(converted[0], converted[1].Dependencies[0]); - } - - [Test] - public void CircularDependency() { - FileDescriptorProto first = new FileDescriptorProto.Builder { Name = "First", DependencyList = { "Second" } }.Build(); - FileDescriptorProto second = new FileDescriptorProto.Builder { Name = "Second", DependencyList = { "First" } }.Build(); - FileDescriptorSet set = new FileDescriptorSet { FileList = { first, second } }; - try { - Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set); - Assert.Fail("Expected exception"); - } catch (DependencyResolutionException) { - // Expected - } - } - - [Test] - public void MissingDependency() { - FileDescriptorProto first = new FileDescriptorProto.Builder { Name = "First", DependencyList = { "Second" } }.Build(); - FileDescriptorSet set = new FileDescriptorSet { FileList = { first } }; - try { - Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set); - Assert.Fail("Expected exception"); - } catch (DependencyResolutionException) { - // Expected - } - } - - [Test] - public void SelfDependency() { - FileDescriptorProto first = new FileDescriptorProto.Builder { Name = "First", DependencyList = { "First" } }.Build(); - FileDescriptorSet set = new FileDescriptorSet { FileList = { first } }; - try { - Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set); - Assert.Fail("Expected exception"); - } catch (DependencyResolutionException) { - // Expected - } - } - } +#region Copyright notice and license
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+// http://github.com/jskeet/dotnet-protobufs/
+// Original C++/Java/Python code:
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System.Collections.Generic;
+using Google.ProtocolBuffers.DescriptorProtos;
+using Google.ProtocolBuffers.Descriptors;
+using NUnit.Framework;
+
+namespace Google.ProtocolBuffers.ProtoGen
+{
+ /// <summary>
+ /// Tests for the dependency resolution in Generator.
+ /// </summary>
+ [TestFixture]
+ public class DependencyResolutionTest
+ {
+ [Test]
+ public void TwoDistinctFiles()
+ {
+ FileDescriptorProto first = new FileDescriptorProto.Builder {Name = "First"}.Build();
+ FileDescriptorProto second = new FileDescriptorProto.Builder {Name = "Second"}.Build();
+ FileDescriptorSet set = new FileDescriptorSet {FileList = {first, second}};
+
+ IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
+ Assert.AreEqual(2, converted.Count);
+ Assert.AreEqual("First", converted[0].Name);
+ Assert.AreEqual(0, converted[0].Dependencies.Count);
+ Assert.AreEqual("Second", converted[1].Name);
+ Assert.AreEqual(0, converted[1].Dependencies.Count);
+ }
+
+ [Test]
+ public void FirstDependsOnSecond()
+ {
+ FileDescriptorProto first =
+ new FileDescriptorProto.Builder {Name = "First", DependencyList = {"Second"}}.Build();
+ FileDescriptorProto second = new FileDescriptorProto.Builder {Name = "Second"}.Build();
+ FileDescriptorSet set = new FileDescriptorSet {FileList = {first, second}};
+ IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
+ Assert.AreEqual(2, converted.Count);
+ Assert.AreEqual("First", converted[0].Name);
+ Assert.AreEqual(1, converted[0].Dependencies.Count);
+ Assert.AreEqual(converted[1], converted[0].Dependencies[0]);
+ Assert.AreEqual("Second", converted[1].Name);
+ Assert.AreEqual(0, converted[1].Dependencies.Count);
+ }
+
+ [Test]
+ public void SecondDependsOnFirst()
+ {
+ FileDescriptorProto first = new FileDescriptorProto.Builder {Name = "First"}.Build();
+ FileDescriptorProto second =
+ new FileDescriptorProto.Builder {Name = "Second", DependencyList = {"First"}}.Build();
+ FileDescriptorSet set = new FileDescriptorSet {FileList = {first, second}};
+ IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
+ Assert.AreEqual(2, converted.Count);
+ Assert.AreEqual("First", converted[0].Name);
+ Assert.AreEqual(0, converted[0].Dependencies.Count);
+ Assert.AreEqual("Second", converted[1].Name);
+ Assert.AreEqual(1, converted[1].Dependencies.Count);
+ Assert.AreEqual(converted[0], converted[1].Dependencies[0]);
+ }
+
+ [Test]
+ public void CircularDependency()
+ {
+ FileDescriptorProto first =
+ new FileDescriptorProto.Builder {Name = "First", DependencyList = {"Second"}}.Build();
+ FileDescriptorProto second =
+ new FileDescriptorProto.Builder {Name = "Second", DependencyList = {"First"}}.Build();
+ FileDescriptorSet set = new FileDescriptorSet {FileList = {first, second}};
+ try
+ {
+ Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
+ Assert.Fail("Expected exception");
+ }
+ catch (DependencyResolutionException)
+ {
+ // Expected
+ }
+ }
+
+ [Test]
+ public void MissingDependency()
+ {
+ FileDescriptorProto first =
+ new FileDescriptorProto.Builder {Name = "First", DependencyList = {"Second"}}.Build();
+ FileDescriptorSet set = new FileDescriptorSet {FileList = {first}};
+ try
+ {
+ Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
+ Assert.Fail("Expected exception");
+ }
+ catch (DependencyResolutionException)
+ {
+ // Expected
+ }
+ }
+
+ [Test]
+ public void SelfDependency()
+ {
+ FileDescriptorProto first =
+ new FileDescriptorProto.Builder {Name = "First", DependencyList = {"First"}}.Build();
+ FileDescriptorSet set = new FileDescriptorSet {FileList = {first}};
+ try
+ {
+ Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);
+ Assert.Fail("Expected exception");
+ }
+ catch (DependencyResolutionException)
+ {
+ // Expected
+ }
+ }
+ }
}
\ No newline at end of file diff --git a/src/ProtoGen.Test/Properties/AssemblyInfo.cs b/src/ProtoGen.Test/Properties/AssemblyInfo.cs index d663c00a..8a64bf4b 100644 --- a/src/ProtoGen.Test/Properties/AssemblyInfo.cs +++ b/src/ProtoGen.Test/Properties/AssemblyInfo.cs @@ -1,36 +1,40 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ProtoGen.Test")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ProtoGen.Test")] -[assembly: AssemblyCopyright("Copyright © 2008")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("40720ee3-2d15-4271-8c42-8f9cfd01b52f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("2.3.0.277")] -[assembly: AssemblyVersion("2.3.0.277")] -[assembly: AssemblyFileVersion("2.3.0.277")] +using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+
+[assembly: AssemblyTitle("ProtoGen.Test")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ProtoGen.Test")]
+[assembly: AssemblyCopyright("Copyright © 2008")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+
+[assembly: Guid("40720ee3-2d15-4271-8c42-8f9cfd01b52f")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("2.3.0.277")]
+
+[assembly: AssemblyVersion("2.3.0.277")]
+[assembly: AssemblyFileVersion("2.3.0.277")]
\ No newline at end of file diff --git a/src/ProtoGen.Test/TempFile.cs b/src/ProtoGen.Test/TempFile.cs index e41b591b..74a183f5 100644 --- a/src/ProtoGen.Test/TempFile.cs +++ b/src/ProtoGen.Test/TempFile.cs @@ -1,54 +1,59 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; - -namespace Google.ProtocolBuffers.ProtoGen -{ - class ProtoFile : TempFile - { - public ProtoFile(string filename, string contents) - : base(filename, contents) - { - } - } - class TempFile : IDisposable - { - private string tempFile; - - public static TempFile Attach(string path) - { - return new TempFile(path, null); - } - - protected TempFile(string filename, string contents) { - tempFile = filename; - if (contents != null) - { - File.WriteAllText(tempFile, contents, new UTF8Encoding(false)); - } - } - - public TempFile(string contents) - : this(Path.GetTempFileName(), contents) - { - } - - public string TempPath { get { return tempFile; } } - - public void ChangeExtension(string ext) - { - string newFile = Path.ChangeExtension(tempFile, ext); - File.Move(tempFile, newFile); - tempFile = newFile; - } - - public void Dispose() - { - if (File.Exists(tempFile)) - { - File.Delete(tempFile); - } - } - } -} +using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace Google.ProtocolBuffers.ProtoGen
+{
+ internal class ProtoFile : TempFile
+ {
+ public ProtoFile(string filename, string contents)
+ : base(filename, contents)
+ {
+ }
+ }
+
+ internal class TempFile : IDisposable
+ {
+ private string tempFile;
+
+ public static TempFile Attach(string path)
+ {
+ return new TempFile(path, null);
+ }
+
+ protected TempFile(string filename, string contents)
+ {
+ tempFile = filename;
+ if (contents != null)
+ {
+ File.WriteAllText(tempFile, contents, new UTF8Encoding(false));
+ }
+ }
+
+ public TempFile(string contents)
+ : this(Path.GetTempFileName(), contents)
+ {
+ }
+
+ public string TempPath
+ {
+ get { return tempFile; }
+ }
+
+ public void ChangeExtension(string ext)
+ {
+ string newFile = Path.ChangeExtension(tempFile, ext);
+ File.Move(tempFile, newFile);
+ tempFile = newFile;
+ }
+
+ public void Dispose()
+ {
+ if (File.Exists(tempFile))
+ {
+ File.Delete(tempFile);
+ }
+ }
+ }
+}
\ No newline at end of file diff --git a/src/ProtoGen.Test/TestPreprocessing.cs b/src/ProtoGen.Test/TestPreprocessing.cs index 53cd5fec..af1d22ab 100644 --- a/src/ProtoGen.Test/TestPreprocessing.cs +++ b/src/ProtoGen.Test/TestPreprocessing.cs @@ -1,610 +1,677 @@ -#region Copyright notice and license -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#endregion -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Reflection; -using NUnit.Framework; - -namespace Google.ProtocolBuffers.ProtoGen -{ - [TestFixture] - [Category("Preprocessor")] - public partial class TestPreprocessing - { - private static readonly string TempPath = Path.Combine(Path.GetTempPath(), "proto-gen-test"); - private const string DefaultProto = @" -package nunit.simple; -// Test a very simple message. -message MyMessage { - optional string name = 1; -}"; - - #region TestFixture SetUp/TearDown - private static readonly string OriginalWorkingDirectory = Environment.CurrentDirectory; - [TestFixtureSetUp] - public virtual void Setup() - { - Teardown(); - Directory.CreateDirectory(TempPath); - Environment.CurrentDirectory = TempPath; - } - - [TestFixtureTearDown] - public virtual void Teardown() - { - Environment.CurrentDirectory = OriginalWorkingDirectory; - if (Directory.Exists(TempPath)) - { - Directory.Delete(TempPath, true); - } - } - #endregion - #region Helper Methods RunProtoGen / RunCsc - void RunProtoGen(int expect, params string[] args) - { - TextWriter tout = Console.Out, terr = Console.Error; - StringWriter temp = new StringWriter(); - Console.SetOut(temp); - Console.SetError(temp); - try - { - Assert.AreEqual(expect, ProgramPreprocess.Run(args), "ProtoGen Failed: {0}", temp); - } - finally - { - Console.SetOut(tout); - Console.SetError(terr); - } - } - - private Assembly RunCsc(int expect, params string[] sources) - { - using (TempFile tempDll = new TempFile(String.Empty)) - { - tempDll.ChangeExtension(".dll"); - List<string> args = new List<string>(); - args.Add("/nologo"); - args.Add("/target:library"); - args.Add("/debug-"); - args.Add(String.Format(@"""/out:{0}""", tempDll.TempPath)); - args.Add("/r:System.dll"); - args.Add(String.Format(@"""/r:{0}""", typeof (Google.ProtocolBuffers.DescriptorProtos.DescriptorProto).Assembly.Location)); - args.AddRange(sources); - - string exe = Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(), "csc.exe"); - ProcessStartInfo psi = new ProcessStartInfo(exe); - psi.CreateNoWindow = true; - psi.UseShellExecute = false; - psi.RedirectStandardOutput = true; - psi.RedirectStandardError = true; - psi.Arguments = string.Join(" ", args.ToArray()); - Process p = Process.Start(psi); - p.WaitForExit(); - string errorText = p.StandardOutput.ReadToEnd() + p.StandardError.ReadToEnd(); - Assert.AreEqual(expect, p.ExitCode, "CSC.exe Failed: {0}", errorText); - - Assembly asm = null; - if (p.ExitCode == 0) - { - byte[] allbytes = File.ReadAllBytes(tempDll.TempPath); - asm = Assembly.Load(allbytes); - - foreach (Type t in asm.GetTypes()) - { - Debug.WriteLine(t.FullName, asm.FullName); - } - } - return asm; - } - } - #endregion - - // ******************************************************************* - // The following tests excercise options for protogen.exe - // ******************************************************************* - - [Test] - public void TestProtoFile() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto)) - { - RunProtoGen(0, proto.TempPath); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple." + test, true, true); - } - } - [Test] - public void TestProtoFileWithConflictingType() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", @" -package nunit.simple; -// Test a very simple message. -message " + test + @" { - optional string name = 1; -} ")) - { - RunProtoGen(0, proto.TempPath); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple." + test, true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple.Proto." + test, true, true); - } - } - [Test] - public void TestProtoFileWithNamespace() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto)) - { - RunProtoGen(0, proto.TempPath, "-namespace:MyNewNamespace"); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("MyNewNamespace.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("MyNewNamespace." + test, true, true); - } - } - [Test] - public void TestProtoFileWithUmbrellaClassName() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach("MyUmbrellaClassname.cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto)) - { - RunProtoGen(0, proto.TempPath, "/umbrella_classname=MyUmbrellaClassname"); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple.MyUmbrellaClassname", true, true); - } - } - [Test] - public void TestProtoFileWithNestedClass() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto)) - { - RunProtoGen(0, proto.TempPath, "-nest_classes:true"); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple." + test, true, true); - } - } - [Test] - public void TestProtoFileWithExpandedNsDirectories() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(@"nunit\simple\" + test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto)) - { - RunProtoGen(0, proto.TempPath, "-expand_namespace_directories:true"); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple." + test, true, true); - } - } - [Test] - public void TestProtoFileDisablingClsComplianceFlags() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", @" -package nunit.simple; -// Test a very simple message. -message MyMessage { - optional uint32 name = 1; -} ")) - { - //CS3021: Warning as Error: xx does not need a CLSCompliant attribute because the assembly does not have a CLSCompliant attribute - RunProtoGen(0, proto.TempPath); - RunCsc(1, source.TempPath, "/warnaserror+"); - //Now we know it fails, make it pass by turning off cls_compliance generation - RunProtoGen(0, proto.TempPath, "-cls_compliance:false"); - Assembly a = RunCsc(0, source.TempPath, "/warnaserror+"); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple." + test, true, true); - } - } - [Test] - public void TestProtoFileWithNewExtension() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(test + ".Generated.cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto)) - { - RunProtoGen(0, proto.TempPath, "-file_extension:.Generated.cs"); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple." + test, true, true); - } - } - [Test] - public void TestProtoFileWithUmbrellaNamespace() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto)) - { - RunProtoGen(0, proto.TempPath, "-umbrella_namespace:MyUmbrella.Namespace"); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple.MyUmbrella.Namespace." + test, true, true); - } - } - [Test] - public void TestProtoFileWithIgnoredUmbrellaNamespaceDueToNesting() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto)) - { - RunProtoGen(0, proto.TempPath, "-nest_classes:true", "-umbrella_namespace:MyUmbrella.Namespace"); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple." + test, true, true); - } - } - [Test] - public void TestProtoFileWithExplicitEmptyUmbrellaNamespace() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", @" -package nunit.simple; -// Test a very simple message. -message " + test + @" { - optional string name = 1; -} ")) - { - //Forces the umbrella class to not use a namespace even if a collision with a type is detected. - RunProtoGen(0, proto.TempPath, "-umbrella_namespace:"); - //error CS0441: 'nunit.simple.TestProtoFileWithExplicitEmptyUmbrellaNamespace': a class cannot be both static and sealed - RunCsc(1, source.TempPath); - } - } - [Test] - public void TestProtoFileWithNewOutputFolder() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(@"generated-code\" + test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto)) - { - RunProtoGen(1, proto.TempPath, "-output_directory:generated-code"); - Directory.CreateDirectory("generated-code"); - RunProtoGen(0, proto.TempPath, "-output_directory:generated-code"); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple." + test, true, true); - } - } - [Test] - public void TestProtoFileAndIgnoreGoogleProtobuf() - { - 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).namespace = ""MyNewNamespace""; -" + DefaultProto)) - { - 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))); - } - - Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length); - RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true"); - Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length); - - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("MyNewNamespace.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("MyNewNamespace." + test, true, true); - } - } - [Test] - public void TestProtoFileWithoutIgnoreGoogleProtobuf() - { - 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).namespace = ""MyNewNamespace""; -" + DefaultProto)) - { - 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))); - } - - Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length); - //Without the option this fails due to being unable to resolve google/protobuf descriptors - RunProtoGen(1, proto.TempPath, "-ignore_google_protobuf:false"); - } - } - - // ******************************************************************* - // The following tests excercise options for protoc.exe - // ******************************************************************* - - [Test] - public void TestProtoFileWithIncludeImports() - { - 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).namespace = ""MyNewNamespace""; - -package nunit.simple; -// Test a very simple message. -message MyMessage { - optional string name = 1; -} ")) - { - 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))); - } - - Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length); - //if you specify the protoc option --include_imports this should build three source files - RunProtoGen(0, proto.TempPath, "--include_imports"); - Assert.AreEqual(3, Directory.GetFiles(TempPath, "*.cs").Length); - - //you can (and should) simply omit the inclusion of the extra source files in your project - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("MyNewNamespace.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("MyNewNamespace." + test, true, true); - } - } - [Test] - public void TestProtoFileWithIncludeImportsAndIgnoreGoogleProtobuf() - { - 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).namespace = ""MyNewNamespace""; - -package nunit.simple; -// Test a very simple message. -message MyMessage { - optional string name = 1; -} ")) - { - 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))); - - Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length); - //Even with --include_imports, if you provide -ignore_google_protobuf:true you only get the one source file - RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true", "--include_imports"); - Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length); - - //you can (and should) simply omit the inclusion of the extra source files in your project - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("MyNewNamespace.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("MyNewNamespace." + test, true, true); - } - } - [Test] - public void TestProtoFileKeepingTheProtoBuffer() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile protobuf = TempFile.Attach(test + ".pb")) - using (TempFile source = TempFile.Attach(test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", @" -package nunit.simple; -// Test a very simple message. -message MyMessage { - optional string name = 1; -} ")) - { - RunProtoGen(0, proto.TempPath, "--descriptor_set_out=" + protobuf.TempPath); - Assert.IsTrue(File.Exists(protobuf.TempPath), "Missing: " + protobuf.TempPath); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple." + test, true, true); - } - } - //Seems the --proto_path or -I option is non-functional for me. Maybe others have luck? - [Test, Ignore("http://code.google.com/p/protobuf/issues/detail?id=40")] - public void TestProtoFileInDifferentDirectory() - { - string test = new StackFrame(false).GetMethod().Name; - Setup(); - using (TempFile source = TempFile.Attach(test + ".cs")) - using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto)) - { - Environment.CurrentDirectory = OriginalWorkingDirectory; - RunProtoGen(0, proto.TempPath, "--proto_path=" + TempPath); - Assembly a = RunCsc(0, source.TempPath); - //assert that the message type is in the expected namespace - Type t = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple." + test, true, true); - } - } - - // ******************************************************************* - // Handling of mutliple input files - // ******************************************************************* - - [Test] - public void TestMultipleProtoFiles() - { - Setup(); - using (TempFile source1 = TempFile.Attach("MyMessage.cs")) - using (ProtoFile proto1 = new ProtoFile("MyMessage.proto", @" -package nunit.simple; -// Test a very simple message. -message MyMessage { - optional string name = 1; -}")) - using (TempFile source2 = TempFile.Attach("MyMessageList.cs")) - using (ProtoFile proto2 = new ProtoFile("MyMessageList.proto", @" -package nunit.simple; -import ""MyMessage.proto""; -// Test a very simple message. -message MyMessageList { - repeated MyMessage messages = 1; -}")) - { - RunProtoGen(0, proto1.TempPath, proto2.TempPath); - Assembly a = RunCsc(0, source1.TempPath, source2.TempPath); - //assert that the message type is in the expected namespace - Type t1 = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t1), "Expect an IMessage"); - //assert that the message type is in the expected namespace - Type t2 = a.GetType("nunit.simple.MyMessageList", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t2), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple.Proto.MyMessage", true, true); - a.GetType("nunit.simple.Proto.MyMessageList", true, true); - } - } - [Test] - public void TestOneProtoFileWithBufferFile() - { - Setup(); - using (TempFile source1 = TempFile.Attach("MyMessage.cs")) - using (TempFile protobuf = TempFile.Attach("MyMessage.pb")) - using (ProtoFile proto1 = new ProtoFile("MyMessage.proto", @" -package nunit.simple; -// Test a very simple message. -message MyMessage { - optional string name = 1; -}")) - using (TempFile source2 = TempFile.Attach("MyMessageList.cs")) - using (ProtoFile proto2 = new ProtoFile("MyMessageList.proto", @" -package nunit.simple; -import ""MyMessage.proto""; -// Test a very simple message. -message MyMessageList { - repeated MyMessage messages = 1; -}")) - { - //build the proto buffer for MyMessage - RunProtoGen(0, proto1.TempPath, "--descriptor_set_out=" + protobuf.TempPath); - //build the MyMessageList proto-buffer and generate code by including MyMessage.pb - RunProtoGen(0, proto2.TempPath, protobuf.TempPath); - Assembly a = RunCsc(0, source1.TempPath, source2.TempPath); - //assert that the message type is in the expected namespace - Type t1 = a.GetType("nunit.simple.MyMessage", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t1), "Expect an IMessage"); - //assert that the message type is in the expected namespace - Type t2 = a.GetType("nunit.simple.MyMessageList", true, true); - Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t2), "Expect an IMessage"); - //assert that we can find the static descriptor type - a.GetType("nunit.simple.Proto.MyMessage", true, true); - a.GetType("nunit.simple.Proto.MyMessageList", true, true); - } - } - } -} +#region Copyright notice and license
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+// http://github.com/jskeet/dotnet-protobufs/
+// Original C++/Java/Python code:
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Reflection;
+using NUnit.Framework;
+
+namespace Google.ProtocolBuffers.ProtoGen
+{
+ [TestFixture]
+ [Category("Preprocessor")]
+ public partial class TestPreprocessing
+ {
+ private static readonly string TempPath = Path.Combine(Path.GetTempPath(), "proto-gen-test");
+
+ private const string DefaultProto =
+ @"
+package nunit.simple;
+// Test a very simple message.
+message MyMessage {
+ optional string name = 1;
+}";
+
+ #region TestFixture SetUp/TearDown
+
+ private static readonly string OriginalWorkingDirectory = Environment.CurrentDirectory;
+
+ [TestFixtureSetUp]
+ public virtual void Setup()
+ {
+ Teardown();
+ Directory.CreateDirectory(TempPath);
+ Environment.CurrentDirectory = TempPath;
+ }
+
+ [TestFixtureTearDown]
+ public virtual void Teardown()
+ {
+ Environment.CurrentDirectory = OriginalWorkingDirectory;
+ if (Directory.Exists(TempPath))
+ {
+ Directory.Delete(TempPath, true);
+ }
+ }
+
+ #endregion
+
+ #region Helper Methods RunProtoGen / RunCsc
+
+ private void RunProtoGen(int expect, params string[] args)
+ {
+ TextWriter tout = Console.Out, terr = Console.Error;
+ StringWriter temp = new StringWriter();
+ Console.SetOut(temp);
+ Console.SetError(temp);
+ try
+ {
+ Assert.AreEqual(expect, ProgramPreprocess.Run(args), "ProtoGen Failed: {0}", temp);
+ }
+ finally
+ {
+ Console.SetOut(tout);
+ Console.SetError(terr);
+ }
+ }
+
+ private Assembly RunCsc(int expect, params string[] sources)
+ {
+ using (TempFile tempDll = new TempFile(String.Empty))
+ {
+ tempDll.ChangeExtension(".dll");
+ List<string> args = new List<string>();
+ args.Add("/nologo");
+ args.Add("/target:library");
+ args.Add("/debug-");
+ args.Add(String.Format(@"""/out:{0}""", tempDll.TempPath));
+ args.Add("/r:System.dll");
+ args.Add(String.Format(@"""/r:{0}""",
+ typeof (Google.ProtocolBuffers.DescriptorProtos.DescriptorProto).Assembly.
+ Location));
+ args.AddRange(sources);
+
+ string exe = Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(),
+ "csc.exe");
+ ProcessStartInfo psi = new ProcessStartInfo(exe);
+ psi.CreateNoWindow = true;
+ psi.UseShellExecute = false;
+ psi.RedirectStandardOutput = true;
+ psi.RedirectStandardError = true;
+ psi.Arguments = string.Join(" ", args.ToArray());
+ Process p = Process.Start(psi);
+ p.WaitForExit();
+ string errorText = p.StandardOutput.ReadToEnd() + p.StandardError.ReadToEnd();
+ Assert.AreEqual(expect, p.ExitCode, "CSC.exe Failed: {0}", errorText);
+
+ Assembly asm = null;
+ if (p.ExitCode == 0)
+ {
+ byte[] allbytes = File.ReadAllBytes(tempDll.TempPath);
+ asm = Assembly.Load(allbytes);
+
+ foreach (Type t in asm.GetTypes())
+ {
+ Debug.WriteLine(t.FullName, asm.FullName);
+ }
+ }
+ return asm;
+ }
+ }
+
+ #endregion
+
+ // *******************************************************************
+ // The following tests excercise options for protogen.exe
+ // *******************************************************************
+
+ [Test]
+ public void TestProtoFile()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(test + ".cs"))
+ using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
+ {
+ RunProtoGen(0, proto.TempPath);
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithConflictingType()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(test + ".cs"))
+ using (
+ ProtoFile proto = new ProtoFile(test + ".proto",
+ @"
+package nunit.simple;
+// Test a very simple message.
+message " +
+ test + @" {
+ optional string name = 1;
+} "))
+ {
+ RunProtoGen(0, proto.TempPath);
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple." + test, true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple.Proto." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithNamespace()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(test + ".cs"))
+ using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
+ {
+ RunProtoGen(0, proto.TempPath, "-namespace:MyNewNamespace");
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("MyNewNamespace." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithUmbrellaClassName()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach("MyUmbrellaClassname.cs"))
+ using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
+ {
+ RunProtoGen(0, proto.TempPath, "/umbrella_classname=MyUmbrellaClassname");
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple.MyUmbrellaClassname", true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithNestedClass()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(test + ".cs"))
+ using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
+ {
+ RunProtoGen(0, proto.TempPath, "-nest_classes:true");
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithExpandedNsDirectories()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(@"nunit\simple\" + test + ".cs"))
+ using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
+ {
+ RunProtoGen(0, proto.TempPath, "-expand_namespace_directories:true");
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileDisablingClsComplianceFlags()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(test + ".cs"))
+ using (
+ ProtoFile proto = new ProtoFile(test + ".proto",
+ @"
+package nunit.simple;
+// Test a very simple message.
+message MyMessage {
+ optional uint32 name = 1;
+} ")
+ )
+ {
+ //CS3021: Warning as Error: xx does not need a CLSCompliant attribute because the assembly does not have a CLSCompliant attribute
+ RunProtoGen(0, proto.TempPath);
+ RunCsc(1, source.TempPath, "/warnaserror+");
+ //Now we know it fails, make it pass by turning off cls_compliance generation
+ RunProtoGen(0, proto.TempPath, "-cls_compliance:false");
+ Assembly a = RunCsc(0, source.TempPath, "/warnaserror+");
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithNewExtension()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(test + ".Generated.cs"))
+ using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
+ {
+ RunProtoGen(0, proto.TempPath, "-file_extension:.Generated.cs");
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithUmbrellaNamespace()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(test + ".cs"))
+ using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
+ {
+ RunProtoGen(0, proto.TempPath, "-umbrella_namespace:MyUmbrella.Namespace");
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple.MyUmbrella.Namespace." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithIgnoredUmbrellaNamespaceDueToNesting()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(test + ".cs"))
+ using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
+ {
+ RunProtoGen(0, proto.TempPath, "-nest_classes:true", "-umbrella_namespace:MyUmbrella.Namespace");
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithExplicitEmptyUmbrellaNamespace()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(test + ".cs"))
+ using (
+ ProtoFile proto = new ProtoFile(test + ".proto",
+ @"
+package nunit.simple;
+// Test a very simple message.
+message " +
+ test + @" {
+ optional string name = 1;
+} "))
+ {
+ //Forces the umbrella class to not use a namespace even if a collision with a type is detected.
+ RunProtoGen(0, proto.TempPath, "-umbrella_namespace:");
+ //error CS0441: 'nunit.simple.TestProtoFileWithExplicitEmptyUmbrellaNamespace': a class cannot be both static and sealed
+ RunCsc(1, source.TempPath);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithNewOutputFolder()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(@"generated-code\" + test + ".cs"))
+ using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
+ {
+ RunProtoGen(1, proto.TempPath, "-output_directory:generated-code");
+ Directory.CreateDirectory("generated-code");
+ RunProtoGen(0, proto.TempPath, "-output_directory:generated-code");
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileAndIgnoreGoogleProtobuf()
+ {
+ 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).namespace = ""MyNewNamespace"";
+" +
+ DefaultProto))
+ {
+ 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)));
+ }
+
+ Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
+ RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true");
+ Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
+
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("MyNewNamespace." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithoutIgnoreGoogleProtobuf()
+ {
+ 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).namespace = ""MyNewNamespace"";
+" +
+ DefaultProto))
+ {
+ 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)));
+ }
+
+ Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
+ //Without the option this fails due to being unable to resolve google/protobuf descriptors
+ RunProtoGen(1, proto.TempPath, "-ignore_google_protobuf:false");
+ }
+ }
+
+ // *******************************************************************
+ // The following tests excercise options for protoc.exe
+ // *******************************************************************
+
+ [Test]
+ public void TestProtoFileWithIncludeImports()
+ {
+ 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).namespace = ""MyNewNamespace"";
+
+package nunit.simple;
+// Test a very simple message.
+message MyMessage {
+ optional string name = 1;
+} ")
+ )
+ {
+ 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)));
+ }
+
+ Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
+ //if you specify the protoc option --include_imports this should build three source files
+ RunProtoGen(0, proto.TempPath, "--include_imports");
+ Assert.AreEqual(3, Directory.GetFiles(TempPath, "*.cs").Length);
+
+ //you can (and should) simply omit the inclusion of the extra source files in your project
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("MyNewNamespace." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileWithIncludeImportsAndIgnoreGoogleProtobuf()
+ {
+ 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).namespace = ""MyNewNamespace"";
+
+package nunit.simple;
+// Test a very simple message.
+message MyMessage {
+ optional string name = 1;
+} ")
+ )
+ {
+ 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)));
+
+ Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);
+ //Even with --include_imports, if you provide -ignore_google_protobuf:true you only get the one source file
+ RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true", "--include_imports");
+ Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);
+
+ //you can (and should) simply omit the inclusion of the extra source files in your project
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("MyNewNamespace.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("MyNewNamespace." + test, true, true);
+ }
+ }
+
+ [Test]
+ public void TestProtoFileKeepingTheProtoBuffer()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile protobuf = TempFile.Attach(test + ".pb"))
+ using (TempFile source = TempFile.Attach(test + ".cs"))
+ using (
+ ProtoFile proto = new ProtoFile(test + ".proto",
+ @"
+package nunit.simple;
+// Test a very simple message.
+message MyMessage {
+ optional string name = 1;
+} ")
+ )
+ {
+ RunProtoGen(0, proto.TempPath, "--descriptor_set_out=" + protobuf.TempPath);
+ Assert.IsTrue(File.Exists(protobuf.TempPath), "Missing: " + protobuf.TempPath);
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple." + test, true, true);
+ }
+ }
+
+ //Seems the --proto_path or -I option is non-functional for me. Maybe others have luck?
+ [Test, Ignore("http://code.google.com/p/protobuf/issues/detail?id=40")]
+ public void TestProtoFileInDifferentDirectory()
+ {
+ string test = new StackFrame(false).GetMethod().Name;
+ Setup();
+ using (TempFile source = TempFile.Attach(test + ".cs"))
+ using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))
+ {
+ Environment.CurrentDirectory = OriginalWorkingDirectory;
+ RunProtoGen(0, proto.TempPath, "--proto_path=" + TempPath);
+ Assembly a = RunCsc(0, source.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple." + test, true, true);
+ }
+ }
+
+ // *******************************************************************
+ // Handling of mutliple input files
+ // *******************************************************************
+
+ [Test]
+ public void TestMultipleProtoFiles()
+ {
+ Setup();
+ using (TempFile source1 = TempFile.Attach("MyMessage.cs"))
+ using (
+ ProtoFile proto1 = new ProtoFile("MyMessage.proto",
+ @"
+package nunit.simple;
+// Test a very simple message.
+message MyMessage {
+ optional string name = 1;
+}")
+ )
+ using (TempFile source2 = TempFile.Attach("MyMessageList.cs"))
+ using (
+ ProtoFile proto2 = new ProtoFile("MyMessageList.proto",
+ @"
+package nunit.simple;
+import ""MyMessage.proto"";
+// Test a very simple message.
+message MyMessageList {
+ repeated MyMessage messages = 1;
+}")
+ )
+ {
+ RunProtoGen(0, proto1.TempPath, proto2.TempPath);
+ Assembly a = RunCsc(0, source1.TempPath, source2.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t1 = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t1), "Expect an IMessage");
+ //assert that the message type is in the expected namespace
+ Type t2 = a.GetType("nunit.simple.MyMessageList", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t2), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple.Proto.MyMessage", true, true);
+ a.GetType("nunit.simple.Proto.MyMessageList", true, true);
+ }
+ }
+
+ [Test]
+ public void TestOneProtoFileWithBufferFile()
+ {
+ Setup();
+ using (TempFile source1 = TempFile.Attach("MyMessage.cs"))
+ using (TempFile protobuf = TempFile.Attach("MyMessage.pb"))
+ using (
+ ProtoFile proto1 = new ProtoFile("MyMessage.proto",
+ @"
+package nunit.simple;
+// Test a very simple message.
+message MyMessage {
+ optional string name = 1;
+}")
+ )
+ using (TempFile source2 = TempFile.Attach("MyMessageList.cs"))
+ using (
+ ProtoFile proto2 = new ProtoFile("MyMessageList.proto",
+ @"
+package nunit.simple;
+import ""MyMessage.proto"";
+// Test a very simple message.
+message MyMessageList {
+ repeated MyMessage messages = 1;
+}")
+ )
+ {
+ //build the proto buffer for MyMessage
+ RunProtoGen(0, proto1.TempPath, "--descriptor_set_out=" + protobuf.TempPath);
+ //build the MyMessageList proto-buffer and generate code by including MyMessage.pb
+ RunProtoGen(0, proto2.TempPath, protobuf.TempPath);
+ Assembly a = RunCsc(0, source1.TempPath, source2.TempPath);
+ //assert that the message type is in the expected namespace
+ Type t1 = a.GetType("nunit.simple.MyMessage", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t1), "Expect an IMessage");
+ //assert that the message type is in the expected namespace
+ Type t2 = a.GetType("nunit.simple.MyMessageList", true, true);
+ Assert.IsTrue(typeof (IMessage).IsAssignableFrom(t2), "Expect an IMessage");
+ //assert that we can find the static descriptor type
+ a.GetType("nunit.simple.Proto.MyMessage", true, true);
+ a.GetType("nunit.simple.Proto.MyMessageList", true, true);
+ }
+ }
+ }
+}
\ No newline at end of file |