From b5a7ed241127412d4d9c22c79b3961239bef49e8 Mon Sep 17 00:00:00 2001 From: csharptest Date: Sat, 1 Oct 2011 15:10:05 -0500 Subject: [PATCH] Conditional extensions in serialization, Removed usages of extensions methods from unit tests --- .../Extensions.cs | 76 +++- .../ProtocolBuffers.Serialization.csproj | 16 +- .../ProtocolBuffersLite.Serialization.csproj | 16 +- .../ReusableBuilderTest.cs | 4 +- .../TestMimeMessageFormats.cs | 44 +- .../TestRpcForMimeTypes.cs | 8 +- .../TestWriterFormatJson.cs | 16 +- .../TestWriterFormatXml.cs | 16 +- .../ProtocolBuffersLite.Test.csproj | 8 +- .../TestRpcForMimeTypes.cs | 386 ------------------ .../TestRpcGenerator.cs | 171 -------- 11 files changed, 126 insertions(+), 635 deletions(-) delete mode 100644 src/ProtocolBuffersLite.Test/TestRpcForMimeTypes.cs delete mode 100644 src/ProtocolBuffersLite.Test/TestRpcGenerator.cs diff --git a/src/ProtocolBuffers.Serialization/Extensions.cs b/src/ProtocolBuffers.Serialization/Extensions.cs index ebcaa9fdba..fc7a6dba56 100644 --- a/src/ProtocolBuffers.Serialization/Extensions.cs +++ b/src/ProtocolBuffers.Serialization/Extensions.cs @@ -17,7 +17,11 @@ namespace Google.ProtocolBuffers /// Serializes the message to JSON text. This is a trivial wrapper /// around Serialization.JsonFormatWriter.WriteMessage. /// - public static string ToJson(this IMessageLite message) + public static string ToJson( +#if !NET20 + this +#endif + IMessageLite message) { JsonFormatWriter w = JsonFormatWriter.CreateInstance(); w.WriteMessage(message); @@ -27,7 +31,11 @@ namespace Google.ProtocolBuffers /// Serializes the message to XML text. This is a trivial wrapper /// around Serialization.XmlFormatWriter.WriteMessage. /// - public static string ToXml(this IMessageLite message) + public static string ToXml( +#if !NET20 + this +#endif + IMessageLite message) { StringWriter w = new StringWriter(new StringBuilder(4096)); XmlFormatWriter.CreateInstance(w).WriteMessage(message); @@ -37,7 +45,11 @@ namespace Google.ProtocolBuffers /// Serializes the message to XML text using the element name provided. /// This is a trivial wrapper around Serialization.XmlFormatWriter.WriteMessage. /// - public static string ToXml(this IMessageLite message, string rootElementName) + public static string ToXml( +#if !NET20 + this +#endif + IMessageLite message, string rootElementName) { StringWriter w = new StringWriter(new StringBuilder(4096)); XmlFormatWriter.CreateInstance(w).WriteMessage(rootElementName, message); @@ -51,7 +63,11 @@ namespace Google.ProtocolBuffers /// Options specific to writing this message and/or content type /// The mime type of the content to be written /// The stream to write the message to - public static void WriteTo(this IMessageLite message, MessageFormatOptions options, string contentType, Stream output) + public static void WriteTo( +#if !NET20 + this +#endif + IMessageLite message, MessageFormatOptions options, string contentType, Stream output) { ICodedOutputStream codedOutput = MessageFormatFactory.CreateOutputStream(options, contentType, output); @@ -71,7 +87,11 @@ namespace Google.ProtocolBuffers /// /// Merges a JSON object into this builder and returns /// - public static TBuilder MergeFromJson(this TBuilder builder, string jsonText) where TBuilder : IBuilderLite + public static TBuilder MergeFromJson( +#if !NET20 + this +#endif + TBuilder builder, string jsonText) where TBuilder : IBuilderLite { return JsonFormatReader.CreateInstance(jsonText) .Merge(builder); @@ -79,14 +99,22 @@ namespace Google.ProtocolBuffers /// /// Merges a JSON object into this builder and returns /// - public static TBuilder MergeFromJson(this TBuilder builder, TextReader reader) where TBuilder : IBuilderLite + public static TBuilder MergeFromJson( +#if !NET20 + this +#endif + TBuilder builder, TextReader reader) where TBuilder : IBuilderLite { return MergeFromJson(builder, reader, ExtensionRegistry.Empty); } /// /// Merges a JSON object into this builder using the extensions provided and returns /// - public static TBuilder MergeFromJson(this TBuilder builder, TextReader reader, ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite + public static TBuilder MergeFromJson( +#if !NET20 + this +#endif + TBuilder builder, TextReader reader, ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite { return JsonFormatReader.CreateInstance(reader) .Merge(builder, extensionRegistry); @@ -95,7 +123,11 @@ namespace Google.ProtocolBuffers /// /// Merges an XML object into this builder and returns /// - public static TBuilder MergeFromXml(this TBuilder builder, XmlReader reader) where TBuilder : IBuilderLite + public static TBuilder MergeFromXml( +#if !NET20 + this +#endif + TBuilder builder, XmlReader reader) where TBuilder : IBuilderLite { return MergeFromXml(builder, XmlFormatReader.DefaultRootElementName, reader, ExtensionRegistry.Empty); } @@ -103,7 +135,11 @@ namespace Google.ProtocolBuffers /// /// Merges an XML object into this builder and returns /// - public static TBuilder MergeFromXml(this TBuilder builder, string rootElementName, XmlReader reader) where TBuilder : IBuilderLite + public static TBuilder MergeFromXml( +#if !NET20 + this +#endif + TBuilder builder, string rootElementName, XmlReader reader) where TBuilder : IBuilderLite { return MergeFromXml(builder, rootElementName, reader, ExtensionRegistry.Empty); } @@ -111,8 +147,12 @@ namespace Google.ProtocolBuffers /// /// Merges an XML object into this builder using the extensions provided and returns /// - public static TBuilder MergeFromXml(this TBuilder builder, string rootElementName, XmlReader reader, - ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite + public static TBuilder MergeFromXml( +#if !NET20 + this +#endif + TBuilder builder, string rootElementName, XmlReader reader, + ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite { return XmlFormatReader.CreateInstance(reader) .Merge(rootElementName, builder, extensionRegistry); @@ -127,7 +167,11 @@ namespace Google.ProtocolBuffers /// The mime type of the input stream content /// The stream to read the message from /// The same builder instance that was supplied in the builder parameter - public static TBuilder MergeFrom(this TBuilder builder, MessageFormatOptions options, string contentType, Stream input) where TBuilder : IBuilderLite + public static TBuilder MergeFrom( +#if !NET20 + this +#endif + TBuilder builder, MessageFormatOptions options, string contentType, Stream input) where TBuilder : IBuilderLite { ICodedInputStream codedInput = MessageFormatFactory.CreateInputStream(options, contentType, input); codedInput.ReadMessageStart(); @@ -150,14 +194,18 @@ namespace Google.ProtocolBuffers /// The input stream /// The mime type for the output stream /// The output stream - public static void HttpCallMethod(this IRpcServerStub stub, string methodName, MessageFormatOptions options, + public static void HttpCallMethod( +#if !NET20 + this +#endif + IRpcServerStub stub, string methodName, MessageFormatOptions options, string contentType, Stream input, string responseType, Stream output) { ICodedInputStream codedInput = MessageFormatFactory.CreateInputStream(options, contentType, input); codedInput.ReadMessageStart(); IMessageLite response = stub.CallMethod(methodName, codedInput, options.ExtensionRegistry); codedInput.ReadMessageEnd(); - response.WriteTo(options, responseType, output); + WriteTo(response, options, responseType, output); } #endregion diff --git a/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.csproj b/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.csproj index afd66a9fff..457b166722 100644 --- a/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.csproj +++ b/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.csproj @@ -34,6 +34,7 @@ false false true + TRACE;NET20; true @@ -42,7 +43,7 @@ bin\Debug\ $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 - DEBUG;TRACE + $(DefineConstants)DEBUG; prompt 4 true @@ -54,7 +55,7 @@ bin\Release\ $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 - TRACE + $(DefineConstants) prompt 4 true @@ -67,7 +68,7 @@ bin\Debug_Silverlight2\ $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 - DEBUG;TRACE;SILVERLIGHT2 + $(DefineConstants)DEBUG;SILVERLIGHT2 prompt 4 true @@ -79,7 +80,7 @@ bin\Release_Silverlight2\ $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 - TRACE;SILVERLIGHT2 + $(DefineConstants)SILVERLIGHT2 prompt 4 true @@ -89,12 +90,7 @@ - - - False - ..\..\lib\System.Core\System.Core.dll - False - + diff --git a/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.csproj b/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.csproj index 8087bcf754..5888d5585f 100644 --- a/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.csproj +++ b/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.csproj @@ -34,6 +34,7 @@ false false true + TRACE;NET20; true @@ -42,7 +43,7 @@ bin\Debug\ $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 - DEBUG;TRACE + $(DefineConstants)DEBUG prompt 4 true @@ -54,7 +55,7 @@ bin\Release\ $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 - TRACE + $(DefineConstants) prompt 4 true @@ -67,7 +68,7 @@ bin\Debug_Silverlight2\ $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 - DEBUG;TRACE;SILVERLIGHT2 + $(DefineConstants)DEBUG;SILVERLIGHT2 prompt 4 true @@ -79,7 +80,7 @@ bin\Release_Silverlight2\ $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 - TRACE;SILVERLIGHT2 + $(DefineConstants)SILVERLIGHT2 prompt 4 true @@ -89,12 +90,7 @@ - - - False - ..\..\lib\System.Core\System.Core.dll - False - + diff --git a/src/ProtocolBuffers.Test/ReusableBuilderTest.cs b/src/ProtocolBuffers.Test/ReusableBuilderTest.cs index 58d643ede7..d5755f6f6b 100644 --- a/src/ProtocolBuffers.Test/ReusableBuilderTest.cs +++ b/src/ProtocolBuffers.Test/ReusableBuilderTest.cs @@ -90,8 +90,8 @@ namespace Google.ProtocolBuffers TestAllTypes m2 = b1.Build(); - Assert.AreEqual("{\"optional_foreign_message\":{},\"repeated_int32\":[2],\"default_int32\":1}", m1.ToJson()); - Assert.AreEqual("{\"optional_foreign_message\":{\"c\":7},\"repeated_int32\":[2,6],\"default_int32\":5}", m2.ToJson()); + Assert.AreEqual("{\"optional_foreign_message\":{},\"repeated_int32\":[2],\"default_int32\":1}", Extensions.ToJson(m1)); + Assert.AreEqual("{\"optional_foreign_message\":{\"c\":7},\"repeated_int32\":[2,6],\"default_int32\":5}", Extensions.ToJson(m2)); } [Test] diff --git a/src/ProtocolBuffers.Test/TestMimeMessageFormats.cs b/src/ProtocolBuffers.Test/TestMimeMessageFormats.cs index 0ed8d381c9..619f4357bc 100644 --- a/src/ProtocolBuffers.Test/TestMimeMessageFormats.cs +++ b/src/ProtocolBuffers.Test/TestMimeMessageFormats.cs @@ -98,9 +98,9 @@ namespace Google.ProtocolBuffers [Test] public void TestMergeFromJsonType() { - TestXmlMessage msg = new TestXmlMessage.Builder().MergeFrom( + TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(), new MessageFormatOptions(), "application/json", new MemoryStream(Encoding.ASCII.GetBytes( - TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToJson() + Extensions.ToJson(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build()) ))) .Build(); Assert.AreEqual("a", msg.Text); @@ -109,9 +109,9 @@ namespace Google.ProtocolBuffers [Test] public void TestMergeFromXmlType() { - TestXmlMessage msg = new TestXmlMessage.Builder().MergeFrom( + TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(), new MessageFormatOptions(), "application/xml", new MemoryStream(Encoding.ASCII.GetBytes( - TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToXml() + Extensions.ToXml(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build()) ))) .Build(); Assert.AreEqual("a", msg.Text); @@ -120,7 +120,7 @@ namespace Google.ProtocolBuffers [Test] public void TestMergeFromProtoType() { - TestXmlMessage msg = new TestXmlMessage.Builder().MergeFrom( + TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(), new MessageFormatOptions(), "application/vnd.google.protobuf", new MemoryStream( TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToByteArray() )) @@ -132,8 +132,8 @@ namespace Google.ProtocolBuffers public void TestWriteToJsonType() { MemoryStream ms = new MemoryStream(); - TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() - .WriteTo(new MessageFormatOptions(), "application/json", ms); + Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(), + new MessageFormatOptions(), "application/json", ms); Assert.AreEqual(@"{""text"":""a"",""number"":1}", Encoding.UTF8.GetString(ms.ToArray())); } @@ -141,8 +141,8 @@ namespace Google.ProtocolBuffers public void TestWriteToXmlType() { MemoryStream ms = new MemoryStream(); - TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() - .WriteTo(new MessageFormatOptions(), "application/xml", ms); + Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(), + new MessageFormatOptions(), "application/xml", ms); Assert.AreEqual("a1", Encoding.UTF8.GetString(ms.ToArray())); } @@ -150,8 +150,8 @@ namespace Google.ProtocolBuffers public void TestWriteToProtoType() { MemoryStream ms = new MemoryStream(); - TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() - .WriteTo(new MessageFormatOptions(), "application/vnd.google.protobuf", ms); + Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(), + new MessageFormatOptions(), "application/vnd.google.protobuf", ms); byte[] bytes = TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToByteArray(); Assert.AreEqual(bytes, ms.ToArray()); @@ -171,7 +171,7 @@ namespace Google.ProtocolBuffers XmlReaderRootElementName = "my-root-node" }; - TestXmlMessage msg = new TestXmlMessage.Builder().MergeFrom( + TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(), options, "application/xml", ms) .Build(); @@ -191,7 +191,7 @@ namespace Google.ProtocolBuffers }; MemoryStream ms = new MemoryStream(); - message.WriteTo(options, "application/xml", ms); + Extensions.WriteTo(message, options, "application/xml", ms); ms.Position = 0; TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); @@ -207,8 +207,8 @@ namespace Google.ProtocolBuffers public void TestJsonFormatted() { MemoryStream ms = new MemoryStream(); - TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() - .WriteTo(new MessageFormatOptions() { FormattedOutput = true }, "application/json", ms); + Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(), + new MessageFormatOptions() { FormattedOutput = true }, "application/json", ms); Assert.AreEqual("{\r\n \"text\": \"a\",\r\n \"number\": 1\r\n}", Encoding.UTF8.GetString(ms.ToArray())); } @@ -216,8 +216,8 @@ namespace Google.ProtocolBuffers public void TestXmlFormatted() { MemoryStream ms = new MemoryStream(); - TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() - .WriteTo(new MessageFormatOptions() { FormattedOutput = true }, "application/xml", ms); + Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(), + new MessageFormatOptions() { FormattedOutput = true }, "application/xml", ms); Assert.AreEqual("\r\n a\r\n 1\r\n", Encoding.UTF8.GetString(ms.ToArray())); } @@ -233,10 +233,10 @@ namespace Google.ProtocolBuffers Assert.AreEqual(1, options.MimeInputTypes.Count); Stream xmlStream = new MemoryStream(Encoding.ASCII.GetBytes( - TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToXml() - )); + Extensions.ToXml(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build()) + )); - TestXmlMessage msg = new TestXmlMessage.Builder().MergeFrom( + TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(), options, "-custom-XML-mime-type-", xmlStream) .Build(); Assert.AreEqual("a", msg.Text); @@ -255,8 +255,8 @@ namespace Google.ProtocolBuffers Assert.AreEqual(1, options.MimeOutputTypes.Count); MemoryStream ms = new MemoryStream(); - TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build() - .WriteTo(options, "-custom-XML-mime-type-", ms); + Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(), + options, "-custom-XML-mime-type-", ms); Assert.AreEqual("a1", Encoding.UTF8.GetString(ms.ToArray())); } diff --git a/src/ProtocolBuffers.Test/TestRpcForMimeTypes.cs b/src/ProtocolBuffers.Test/TestRpcForMimeTypes.cs index a8d2b1638e..6575e0fd1b 100644 --- a/src/ProtocolBuffers.Test/TestRpcForMimeTypes.cs +++ b/src/ProtocolBuffers.Test/TestRpcForMimeTypes.cs @@ -123,8 +123,8 @@ namespace Google.ProtocolBuffers void IHttpTransfer.Execute(string method, string contentType, Stream input, string acceptType, Stream output) { - //Extension for: Google.ProtocolBuffers.Serialization.Http.ServiceExtensions.HttpCallMethod(_stub, - _stub.HttpCallMethod( + //3.5: _stub.HttpCallMethod( + Extensions.HttpCallMethod(_stub, method, Options, contentType, input, acceptType, output @@ -165,14 +165,14 @@ namespace Google.ProtocolBuffers MemoryStream output = new MemoryStream(); //Write to _mimeType format - request.WriteTo(Options, _mimeType, input); + Extensions.WriteTo(request, Options, _mimeType, input); input.Position = 0; _wire.Execute(method, _mimeType, input, _mimeType, output); //Read from _mimeType format output.Position = 0; - response.MergeFrom(Options, _mimeType, output); + Extensions.MergeFrom(response, Options, _mimeType, output); return response.Build(); } diff --git a/src/ProtocolBuffers.Test/TestWriterFormatJson.cs b/src/ProtocolBuffers.Test/TestWriterFormatJson.cs index 1a1a480d9d..98215ebc9d 100644 --- a/src/ProtocolBuffers.Test/TestWriterFormatJson.cs +++ b/src/ProtocolBuffers.Test/TestWriterFormatJson.cs @@ -15,7 +15,8 @@ namespace Google.ProtocolBuffers { TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); - builder.MergeFromJson(@"{""valid"":true}"); + //3.5: builder.MergeFromJson(@"{""valid"":true}"); + Extensions.MergeFromJson(builder, @"{""valid"":true}"); TestXmlMessage message = builder.Build(); Assert.AreEqual(true, message.Valid); @@ -29,7 +30,8 @@ namespace Google.ProtocolBuffers .SetValid(true) .Build(); - string json = message.ToJson(); + //3.5: string json = message.ToJson(); + string json = Extensions.ToJson(message); Assert.AreEqual(@"{""valid"":true}", json); } @@ -100,9 +102,9 @@ namespace Google.ProtocolBuffers public void TestToJsonParseFromJson() { TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build(); - string json = msg.ToJson(); + string json = Extensions.ToJson(msg); Assert.AreEqual("{\"default_bool\":true}", json); - TestAllTypes copy = new TestAllTypes.Builder().MergeFromJson(json).Build(); + TestAllTypes copy = Extensions.MergeFromJson(new TestAllTypes.Builder(), json).Build(); Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool); Assert.AreEqual(msg, copy); } @@ -111,9 +113,9 @@ namespace Google.ProtocolBuffers public void TestToJsonParseFromJsonReader() { TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build(); - string json = msg.ToJson(); + string json = Extensions.ToJson(msg); Assert.AreEqual("{\"default_bool\":true}", json); - TestAllTypes copy = new TestAllTypes.Builder().MergeFromJson(new StringReader(json)).Build(); + TestAllTypes copy = Extensions.MergeFromJson(new TestAllTypes.Builder(), new StringReader(json)).Build(); Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool); Assert.AreEqual(msg, copy); } @@ -429,7 +431,7 @@ namespace Google.ProtocolBuffers StringBuilder sb = new StringBuilder(8192); for (int i = 0; i < 80; i++) sb.Append("{\"child\":"); - TestXmlRescursive msg = new TestXmlRescursive.Builder().MergeFromJson(sb.ToString()).Build(); + TestXmlRescursive msg = Extensions.MergeFromJson(new TestXmlRescursive.Builder(), sb.ToString()).Build(); } [Test, ExpectedException(typeof(FormatException))] public void FailWithEmptyText() diff --git a/src/ProtocolBuffers.Test/TestWriterFormatXml.cs b/src/ProtocolBuffers.Test/TestWriterFormatXml.cs index a52d04e1e6..aa4db87520 100644 --- a/src/ProtocolBuffers.Test/TestWriterFormatXml.cs +++ b/src/ProtocolBuffers.Test/TestWriterFormatXml.cs @@ -18,7 +18,8 @@ namespace Google.ProtocolBuffers TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); XmlReader rdr = XmlReader.Create(new StringReader(@"true")); - builder.MergeFromXml(rdr); + //3.5: builder.MergeFromXml(rdr); + Extensions.MergeFromXml(builder, rdr); TestXmlMessage message = builder.Build(); Assert.AreEqual(true, message.Valid); @@ -32,7 +33,8 @@ namespace Google.ProtocolBuffers .SetValid(true) .Build(); - string Xml = message.ToXml(); + //3.5: string Xml = message.ToXml(); + string Xml = Extensions.ToXml(message); Assert.AreEqual(@"true", Xml); } @@ -75,9 +77,9 @@ namespace Google.ProtocolBuffers public void TestToXmlParseFromXml() { TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build(); - string xml = msg.ToXml(); + string xml = Extensions.ToXml(msg); Assert.AreEqual("true", xml); - TestAllTypes copy = new TestAllTypes.Builder().MergeFromXml(XmlReader.Create(new StringReader(xml))).Build(); + TestAllTypes copy = Extensions.MergeFromXml(new TestAllTypes.Builder(), XmlReader.Create(new StringReader(xml))).Build(); Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool); Assert.AreEqual(msg, copy); } @@ -86,9 +88,9 @@ namespace Google.ProtocolBuffers public void TestToXmlParseFromXmlWithRootName() { TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build(); - string xml = msg.ToXml("message"); + string xml = Extensions.ToXml(msg, "message"); Assert.AreEqual("true", xml); - TestAllTypes copy = new TestAllTypes.Builder().MergeFromXml("message", XmlReader.Create(new StringReader(xml))).Build(); + TestAllTypes copy = Extensions.MergeFromXml(new TestAllTypes.Builder(), "message", XmlReader.Create(new StringReader(xml))).Build(); Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool); Assert.AreEqual(msg, copy); } @@ -447,7 +449,7 @@ namespace Google.ProtocolBuffers StringBuilder sb = new StringBuilder(8192); for (int i = 0; i < 80; i++) sb.Append(""); - TestXmlRescursive msg = new TestXmlRescursive.Builder().MergeFromXml("child", XmlReader.Create(new StringReader(sb.ToString()))).Build(); + TestXmlRescursive msg = Extensions.MergeFromXml(new TestXmlRescursive.Builder(), "child", XmlReader.Create(new StringReader(sb.ToString()))).Build(); } } } diff --git a/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj b/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj index 6a71a277e6..b846ff1a3f 100644 --- a/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj +++ b/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj @@ -56,6 +56,12 @@ Properties\AssemblyInfo.cs + + TestRpcForMimeTypes.cs + + + TestRpcGenerator.cs + @@ -67,8 +73,6 @@ - - diff --git a/src/ProtocolBuffersLite.Test/TestRpcForMimeTypes.cs b/src/ProtocolBuffersLite.Test/TestRpcForMimeTypes.cs deleted file mode 100644 index a8d2b1638e..0000000000 --- a/src/ProtocolBuffersLite.Test/TestRpcForMimeTypes.cs +++ /dev/null @@ -1,386 +0,0 @@ -#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 Google.ProtocolBuffers; -using Google.ProtocolBuffers.Serialization.Http; -using Google.ProtocolBuffers.TestProtos; -using NUnit.Framework; -using System.IO; -using Google.ProtocolBuffers.Serialization; -using System.Text; - -namespace Google.ProtocolBuffers -{ - /// - /// This class verifies the correct code is generated from unittest_rpc_interop.proto and provides a small demonstration - /// of using the new IRpcDispatch to write a client/server - /// - [TestFixture] - public class TestRpcForMimeTypes - { - /// - /// A sample implementation of the ISearchService for testing - /// - private class ExampleSearchImpl : ISearchService - { - SearchResponse ISearchService.Search(SearchRequest searchRequest) - { - if (searchRequest.CriteriaCount == 0) - { - throw new ArgumentException("No criteria specified.", new InvalidOperationException()); - } - SearchResponse.Builder resp = SearchResponse.CreateBuilder(); - foreach (string criteria in searchRequest.CriteriaList) - { - resp.AddResults( - SearchResponse.Types.ResultItem.CreateBuilder().SetName(criteria).SetUrl("http://search.com"). - Build()); - } - return resp.Build(); - } - - SearchResponse ISearchService.RefineSearch(RefineSearchRequest refineSearchRequest) - { - SearchResponse.Builder resp = refineSearchRequest.PreviousResults.ToBuilder(); - foreach (string criteria in refineSearchRequest.CriteriaList) - { - resp.AddResults( - SearchResponse.Types.ResultItem.CreateBuilder().SetName(criteria).SetUrl("http://refine.com"). - Build()); - } - return resp.Build(); - } - } - - /// - /// An example extraction of the wire protocol - /// - private interface IHttpTransfer - { - void Execute(string method, string contentType, Stream input, string acceptType, Stream output); - } - - /// - /// An example of a server responding to a web/http request - /// - private class ExampleHttpServer : IHttpTransfer - { - public readonly MessageFormatOptions Options = - new MessageFormatOptions - { - ExtensionRegistry = ExtensionRegistry.Empty, - FormattedOutput = true, - XmlReaderOptions = XmlReaderOptions.ReadNestedArrays, - XmlReaderRootElementName = "request", - XmlWriterOptions = XmlWriterOptions.OutputNestedArrays, - XmlWriterRootElementName = "response" - }; - - private readonly IRpcServerStub _stub; - - public ExampleHttpServer(ISearchService implementation) - { - //on the server, we create a dispatch to call the appropriate method by name - IRpcDispatch dispatch = new SearchService.Dispatch(implementation); - //we then wrap that dispatch in a server stub which will deserialize the wire bytes to the message - //type appropriate for the method name being invoked. - _stub = new SearchService.ServerStub(dispatch); - } - - void IHttpTransfer.Execute(string method, string contentType, Stream input, string acceptType, Stream output) - { - //Extension for: Google.ProtocolBuffers.Serialization.Http.ServiceExtensions.HttpCallMethod(_stub, - _stub.HttpCallMethod( - method, Options, - contentType, input, - acceptType, output - ); - } - } - - /// - /// An example of a client sending a wire request - /// - private class ExampleClient : IRpcDispatch - { - public readonly MessageFormatOptions Options = - new MessageFormatOptions - { - ExtensionRegistry = ExtensionRegistry.Empty, - FormattedOutput = true, - XmlReaderOptions = XmlReaderOptions.ReadNestedArrays, - XmlReaderRootElementName = "response", - XmlWriterOptions = XmlWriterOptions.OutputNestedArrays, - XmlWriterRootElementName = "request" - }; - - - private readonly IHttpTransfer _wire; - private readonly string _mimeType; - - public ExampleClient(IHttpTransfer wire, string mimeType) - { - _wire = wire; - _mimeType = mimeType; - } - - TMessage IRpcDispatch.CallMethod(string method, IMessageLite request, - IBuilderLite response) - { - MemoryStream input = new MemoryStream(); - MemoryStream output = new MemoryStream(); - - //Write to _mimeType format - request.WriteTo(Options, _mimeType, input); - - input.Position = 0; - _wire.Execute(method, _mimeType, input, _mimeType, output); - - //Read from _mimeType format - output.Position = 0; - response.MergeFrom(Options, _mimeType, output); - - return response.Build(); - } - } - - /// - /// Test sending and recieving messages via text/json - /// - [Test] - public void TestClientServerWithJsonFormat() - { - ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl()); - //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting - IHttpTransfer wire = server; - - ISearchService client = new SearchService(new ExampleClient(wire, "text/json")); - //now the client has a real, typed, interface to work with: - SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build()); - Assert.AreEqual(1, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - //The test part of this, call the only other method - result = - client.RefineSearch( - RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build()); - Assert.AreEqual(2, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - Assert.AreEqual("Refine", result.ResultsList[1].Name); - Assert.AreEqual("http://refine.com", result.ResultsList[1].Url); - } - - /// - /// Test sending and recieving messages via text/json - /// - [Test] - public void TestClientServerWithXmlFormat() - { - ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl()); - //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting - IHttpTransfer wire = server; - - ISearchService client = new SearchService(new ExampleClient(wire, "text/xml")); - //now the client has a real, typed, interface to work with: - SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build()); - Assert.AreEqual(1, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - //The test part of this, call the only other method - result = - client.RefineSearch( - RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build()); - Assert.AreEqual(2, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - Assert.AreEqual("Refine", result.ResultsList[1].Name); - Assert.AreEqual("http://refine.com", result.ResultsList[1].Url); - } - - /// - /// Test sending and recieving messages via text/json - /// - [Test] - public void TestClientServerWithProtoFormat() - { - ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl()); - //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting - IHttpTransfer wire = server; - - ISearchService client = new SearchService(new ExampleClient(wire, "application/x-protobuf")); - //now the client has a real, typed, interface to work with: - SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build()); - Assert.AreEqual(1, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - //The test part of this, call the only other method - result = - client.RefineSearch( - RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build()); - Assert.AreEqual(2, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - Assert.AreEqual("Refine", result.ResultsList[1].Name); - Assert.AreEqual("http://refine.com", result.ResultsList[1].Url); - } - - /// - /// Test sending and recieving messages via text/json - /// - [Test] - public void TestClientServerWithCustomFormat() - { - ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl()); - //Setup our custom mime-type format as the only format supported: - server.Options.MimeInputTypes.Clear(); - server.Options.MimeInputTypes.Add("foo/bar", CodedInputStream.CreateInstance); - server.Options.MimeOutputTypes.Clear(); - server.Options.MimeOutputTypes.Add("foo/bar", CodedOutputStream.CreateInstance); - - //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting - IHttpTransfer wire = server; - - ExampleClient exclient = new ExampleClient(wire, "foo/bar"); - //Add our custom mime-type format - exclient.Options.MimeInputTypes.Add("foo/bar", CodedInputStream.CreateInstance); - exclient.Options.MimeOutputTypes.Add("foo/bar", CodedOutputStream.CreateInstance); - ISearchService client = new SearchService(exclient); - - //now the client has a real, typed, interface to work with: - SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build()); - Assert.AreEqual(1, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - //The test part of this, call the only other method - result = - client.RefineSearch( - RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build()); - Assert.AreEqual(2, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - Assert.AreEqual("Refine", result.ResultsList[1].Name); - Assert.AreEqual("http://refine.com", result.ResultsList[1].Url); - } - - /// - /// Test sending and recieving messages via text/json - /// - [Test] - public void TestServerWithUriFormat() - { - ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl()); - //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting - IHttpTransfer wire = server; - - MemoryStream input = new MemoryStream(Encoding.UTF8.GetBytes("?Criteria=Test&Criteria=Test+of%20URI")); - MemoryStream output = new MemoryStream(); - - //Call the server - wire.Execute("Search", - MessageFormatOptions.ContentFormUrlEncoded, input, - MessageFormatOptions.ContentTypeProtoBuffer, output - ); - - SearchResponse result = SearchResponse.ParseFrom(output.ToArray()); - Assert.AreEqual(2, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - Assert.AreEqual("Test of URI", result.ResultsList[1].Name); - Assert.AreEqual("http://search.com", result.ResultsList[1].Url); - } - - /// - /// Test sending and recieving messages via text/json - /// - [Test, ExpectedException(typeof(ArgumentOutOfRangeException))] - public void TestInvalidMimeType() - { - ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl()); - //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting - IHttpTransfer wire = server; - - MemoryStream input = new MemoryStream(); - MemoryStream output = new MemoryStream(); - - //Call the server - wire.Execute("Search", - "bad/mime", input, - MessageFormatOptions.ContentTypeProtoBuffer, output - ); - Assert.Fail(); - } - - /// - /// Test sending and recieving messages via text/json - /// - [Test] - public void TestDefaultMimeType() - { - ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl()); - - //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting - IHttpTransfer wire = server; - - - MemoryStream input = new MemoryStream(new SearchRequest.Builder().AddCriteria("Test").Build().ToByteArray()); - MemoryStream output = new MemoryStream(); - - //With this default set, any invalid/unknown mime-type will be mapped to use that format - server.Options.DefaultContentType = MessageFormatOptions.ContentTypeProtoBuffer; - - wire.Execute("Search", - "foo", input, - "bar", output - ); - - SearchResponse result = SearchResponse.ParseFrom(output.ToArray()); - Assert.AreEqual(1, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - } - } -} \ No newline at end of file diff --git a/src/ProtocolBuffersLite.Test/TestRpcGenerator.cs b/src/ProtocolBuffersLite.Test/TestRpcGenerator.cs deleted file mode 100644 index 5f159b6273..0000000000 --- a/src/ProtocolBuffersLite.Test/TestRpcGenerator.cs +++ /dev/null @@ -1,171 +0,0 @@ -#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 Google.ProtocolBuffers; -using Google.ProtocolBuffers.TestProtos; -using NUnit.Framework; - -namespace Google.ProtocolBuffers -{ - /// - /// This class verifies the correct code is generated from unittest_rpc_interop.proto and provides a small demonstration - /// of using the new IRpcDispatch to write a client/server - /// - [TestFixture] - public class TestRpcGenerator - { - /// - /// A sample implementation of the ISearchService for testing - /// - private class ExampleSearchImpl : ISearchService - { - SearchResponse ISearchService.Search(SearchRequest searchRequest) - { - if (searchRequest.CriteriaCount == 0) - { - throw new ArgumentException("No criteria specified.", new InvalidOperationException()); - } - SearchResponse.Builder resp = SearchResponse.CreateBuilder(); - foreach (string criteria in searchRequest.CriteriaList) - { - resp.AddResults( - SearchResponse.Types.ResultItem.CreateBuilder().SetName(criteria).SetUrl("http://search.com"). - Build()); - } - return resp.Build(); - } - - SearchResponse ISearchService.RefineSearch(RefineSearchRequest refineSearchRequest) - { - SearchResponse.Builder resp = refineSearchRequest.PreviousResults.ToBuilder(); - foreach (string criteria in refineSearchRequest.CriteriaList) - { - resp.AddResults( - SearchResponse.Types.ResultItem.CreateBuilder().SetName(criteria).SetUrl("http://refine.com"). - Build()); - } - return resp.Build(); - } - } - - /// - /// An example extraction of the wire protocol - /// - private interface IWireTransfer - { - byte[] Execute(string method, byte[] message); - } - - /// - /// An example of a server responding to a wire request - /// - private class ExampleServerHost : IWireTransfer - { - private readonly IRpcServerStub _stub; - - public ExampleServerHost(ISearchService implementation) - { - //on the server, we create a dispatch to call the appropriate method by name - IRpcDispatch dispatch = new SearchService.Dispatch(implementation); - //we then wrap that dispatch in a server stub which will deserialize the wire bytes to the message - //type appropriate for the method name being invoked. - _stub = new SearchService.ServerStub(dispatch); - } - - byte[] IWireTransfer.Execute(string method, byte[] message) - { - //now when we recieve a wire transmission to invoke a method by name with a byte[] or stream payload - //we just simply call the sub: - IMessageLite response = _stub.CallMethod(method, CodedInputStream.CreateInstance(message), - ExtensionRegistry.Empty); - //now we return the expected response message: - return response.ToByteArray(); - } - } - - /// - /// An example of a client sending a wire request - /// - private class ExampleClient : IRpcDispatch - { - private readonly IWireTransfer _wire; - - public ExampleClient(IWireTransfer wire) - { - _wire = wire; - } - - TMessage IRpcDispatch.CallMethod(string method, IMessageLite request, - IBuilderLite response) - { - byte[] rawResponse = _wire.Execute(method, request.ToByteArray()); - response.MergeFrom(rawResponse); - return response.Build(); - } - } - - /// - /// Put it all together to create one seamless client/server experience full of rich-type goodness ;) - /// All you need to do is send/recieve the method name and message bytes across the wire. - /// - [Test] - public void TestClientServerDispatch() - { - ExampleServerHost server = new ExampleServerHost(new ExampleSearchImpl()); - //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting - IWireTransfer wire = server; - - ISearchService client = new SearchService(new ExampleClient(wire)); - //now the client has a real, typed, interface to work with: - SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build()); - Assert.AreEqual(1, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - //The test part of this, call the only other method - result = - client.RefineSearch( - RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build()); - Assert.AreEqual(2, result.ResultsCount); - Assert.AreEqual("Test", result.ResultsList[0].Name); - Assert.AreEqual("http://search.com", result.ResultsList[0].Url); - - Assert.AreEqual("Refine", result.ResultsList[1].Name); - Assert.AreEqual("http://refine.com", result.ResultsList[1].Url); - } - } -} \ No newline at end of file