| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 | 
							- using System;
 
- using Google.ProtocolBuffers.TestProtos;
 
- using NUnit.Framework;
 
- namespace Google.ProtocolBuffers.Compatibility
 
- {
 
-     /// <summary>
 
-     /// This abstract base implements several tests to ensure that well-known messages can be written
 
-     /// and read to/from various formats without losing data.  Implementations override the two serialization
 
-     /// methods to provide the tests with the means to read and write for a given format.
 
-     /// </summary>
 
-     public abstract class CompatibilityTests
 
-     {
 
-         protected abstract object SerializeMessage<TMessage, TBuilder>(TMessage message)
 
-             where TMessage : IMessageLite<TMessage, TBuilder>
 
-             where TBuilder : IBuilderLite<TMessage, TBuilder>;
 
-         protected abstract TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
 
-             where TMessage : IMessageLite<TMessage, TBuilder>
 
-             where TBuilder : IBuilderLite<TMessage, TBuilder>;
 
-         protected virtual void AssertOutputEquals(object lhs, object rhs)
 
-         {
 
-             Assert.AreEqual(lhs, rhs);
 
-         }
 
-         [Test]
 
-         public virtual void RoundTripWithEmptyChildMessageSize()
 
-         {
 
-             SizeMessage1 msg = SizeMessage1.CreateBuilder()
 
-                 .SetField100(100)
 
-                 .SetField15(SizeMessage1SubMessage.DefaultInstance)
 
-                 .BuildPartial();
 
-             byte[] contents = msg.ToByteArray();
 
-             object content = SerializeMessage<SizeMessage1, SizeMessage1.Builder>(msg);
 
-             SizeMessage1 copy = DeserializeMessage<SizeMessage1, SizeMessage1.Builder>(content, SizeMessage1.CreateBuilder(), ExtensionRegistry.Empty).BuildPartial();
 
-             Assert.AreEqual(msg, copy);
 
-             AssertOutputEquals(content, SerializeMessage<SizeMessage1, SizeMessage1.Builder>(copy));
 
-             Assert.AreEqual(Convert.ToBase64String(contents), Convert.ToBase64String(copy.ToByteArray()));
 
-         }
 
-         [Test]
 
-         public virtual void RoundTripWithEmptyChildMessageSpeed()
 
-         {
 
-             SpeedMessage1 msg = SpeedMessage1.CreateBuilder()
 
-                 .SetField100(100)
 
-                 .SetField15(SpeedMessage1SubMessage.DefaultInstance)
 
-                 .BuildPartial();
 
-             byte[] contents = msg.ToByteArray();
 
-             object content = SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(msg);
 
-             SpeedMessage1 copy = DeserializeMessage<SpeedMessage1, SpeedMessage1.Builder>(content, SpeedMessage1.CreateBuilder(), ExtensionRegistry.Empty).BuildPartial();
 
-             Assert.AreEqual(msg, copy);
 
-             AssertOutputEquals(content, SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(copy));
 
-             Assert.AreEqual(Convert.ToBase64String(contents), Convert.ToBase64String(copy.ToByteArray()));
 
-         }
 
-         [Test]
 
-         public virtual void RoundTripMessage1OptimizeSize()
 
-         {
 
-             SizeMessage1 msg = SizeMessage1.CreateBuilder().MergeFrom(TestResources.google_message1).Build();
 
-             object content = SerializeMessage<SizeMessage1, SizeMessage1.Builder>(msg);
 
-             SizeMessage1 copy = DeserializeMessage<SizeMessage1, SizeMessage1.Builder>(content, SizeMessage1.CreateBuilder(), ExtensionRegistry.Empty).Build();
 
-             Assert.AreEqual(msg, copy);
 
-             AssertOutputEquals(content, SerializeMessage<SizeMessage1, SizeMessage1.Builder>(copy));
 
-             Assert.AreEqual(Convert.ToBase64String(TestResources.google_message1), Convert.ToBase64String(copy.ToByteArray()));
 
-         }
 
-         [Test]
 
-         public virtual void RoundTripMessage2OptimizeSize()
 
-         {
 
-             SizeMessage2 msg = SizeMessage2.CreateBuilder().MergeFrom(TestResources.google_message2).Build();
 
-             object content = SerializeMessage<SizeMessage2, SizeMessage2.Builder>(msg);
 
-             SizeMessage2 copy = DeserializeMessage<SizeMessage2, SizeMessage2.Builder>(content, SizeMessage2.CreateBuilder(), ExtensionRegistry.Empty).Build();
 
-             Assert.AreEqual(msg, copy);
 
-             AssertOutputEquals(content, SerializeMessage<SizeMessage2, SizeMessage2.Builder>(copy));
 
-             Assert.AreEqual(Convert.ToBase64String(TestResources.google_message2), Convert.ToBase64String(copy.ToByteArray()));
 
-         }
 
-         [Test]
 
-         public virtual void RoundTripMessage1OptimizeSpeed()
 
-         {
 
-             SpeedMessage1 msg = SpeedMessage1.CreateBuilder().MergeFrom(TestResources.google_message1).Build();
 
-             object content = SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(msg);
 
-             SpeedMessage1 copy = DeserializeMessage<SpeedMessage1, SpeedMessage1.Builder>(content, SpeedMessage1.CreateBuilder(), ExtensionRegistry.Empty).Build();
 
-             Assert.AreEqual(msg, copy);
 
-             AssertOutputEquals(content, SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(copy));
 
-             Assert.AreEqual(Convert.ToBase64String(TestResources.google_message1), Convert.ToBase64String(copy.ToByteArray()));
 
-         }
 
-         [Test]
 
-         public virtual void RoundTripMessage2OptimizeSpeed()
 
-         {
 
-             SpeedMessage2 msg = SpeedMessage2.CreateBuilder().MergeFrom(TestResources.google_message2).Build();
 
-             object content = SerializeMessage<SpeedMessage2, SpeedMessage2.Builder>(msg);
 
-             SpeedMessage2 copy = DeserializeMessage<SpeedMessage2, SpeedMessage2.Builder>(content, SpeedMessage2.CreateBuilder(), ExtensionRegistry.Empty).Build();
 
-             Assert.AreEqual(msg, copy);
 
-             AssertOutputEquals(content, SerializeMessage<SpeedMessage2, SpeedMessage2.Builder>(copy));
 
-             Assert.AreEqual(Convert.ToBase64String(TestResources.google_message2), Convert.ToBase64String(copy.ToByteArray()));
 
-         }
 
-         #region Test message builders
 
-         protected static TestAllTypes.Builder AddAllTypes(TestAllTypes.Builder builder)
 
-         {
 
-             return builder.SetOptionalInt32(1001)
 
-                 .SetOptionalInt64(1001)
 
-                 .SetOptionalUint32(1001)
 
-                 .SetOptionalUint64(1001)
 
-                 .SetOptionalSint32(-1001)
 
-                 .SetOptionalSint64(-1001)
 
-                 .SetOptionalFixed32(1001)
 
-                 .SetOptionalFixed64(1001)
 
-                 .SetOptionalSfixed32(-1001)
 
-                 .SetOptionalSfixed64(-1001)
 
-                 .SetOptionalFloat(1001.1001f)
 
-                 .SetOptionalDouble(1001.1001)
 
-                 .SetOptionalBool(true)
 
-                 .SetOptionalString("this is a string value")
 
-                 .SetOptionalBytes(ByteString.CopyFromUtf8("this is an array of bytes"))
 
-                 .SetOptionalGroup(new TestAllTypes.Types.OptionalGroup.Builder().SetA(1001))
 
-                 .SetOptionalNestedMessage(new TestAllTypes.Types.NestedMessage.Builder().SetBb(1001))
 
-                 .SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.FOO)
 
-             ;
 
-         }
 
-         protected static TestAllTypes.Builder AddRepeatedTypes(TestAllTypes.Builder builder, int size)
 
-         {
 
-             //repeated values
 
-             for (int i = 0; i < size; i++)
 
-                 builder.AddRepeatedInt32(1001 + i)
 
-                 .AddRepeatedInt64(1001)
 
-                 .AddRepeatedUint32(1001)
 
-                 .AddRepeatedUint64(1001)
 
-                 .AddRepeatedSint32(-1001)
 
-                 .AddRepeatedSint64(-1001)
 
-                 .AddRepeatedFixed32(1001)
 
-                 .AddRepeatedFixed64(1001)
 
-                 .AddRepeatedSfixed32(-1001)
 
-                 .AddRepeatedSfixed64(-1001)
 
-                 .AddRepeatedFloat(1001.1001f)
 
-                 .AddRepeatedDouble(1001.1001)
 
-                 .AddRepeatedBool(true)
 
-                 .AddRepeatedString("this is a string value")
 
-                 .AddRepeatedBytes(ByteString.CopyFromUtf8("this is an array of bytes"))
 
-                 .AddRepeatedGroup(new TestAllTypes.Types.RepeatedGroup.Builder().SetA(1001))
 
-                 .AddRepeatedNestedMessage(new TestAllTypes.Types.NestedMessage.Builder().SetBb(1001))
 
-                 .AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.FOO)
 
-             ;
 
-             return builder;
 
-         }
 
-         protected static TestPackedTypes.Builder AddPackedTypes(TestPackedTypes.Builder builder, int size)
 
-         {
 
-             for(int i=0; i < size; i++ )
 
-                 builder.AddPackedInt32(1001)
 
-                 .AddPackedInt64(1001)
 
-                 .AddPackedUint32(1001)
 
-                 .AddPackedUint64(1001)
 
-                 .AddPackedSint32(-1001)
 
-                 .AddPackedSint64(-1001)
 
-                 .AddPackedFixed32(1001)
 
-                 .AddPackedFixed64(1001)
 
-                 .AddPackedSfixed32(-1001)
 
-                 .AddPackedSfixed64(-1001)
 
-                 .AddPackedFloat(1001.1001f)
 
-                 .AddPackedDouble(1001.1001)
 
-                 .AddPackedBool(true)
 
-                 .AddPackedEnum(ForeignEnum.FOREIGN_FOO)
 
-             ;
 
-             return builder;
 
-         }
 
-         #endregion
 
-         [Test]
 
-         public void TestRoundTripAllTypes()
 
-         {
 
-             TestAllTypes msg = AddAllTypes(new TestAllTypes.Builder()).Build();
 
-             object content = SerializeMessage<TestAllTypes, TestAllTypes.Builder>(msg);
 
-             TestAllTypes copy = DeserializeMessage<TestAllTypes, TestAllTypes.Builder>(content, TestAllTypes.CreateBuilder(), ExtensionRegistry.Empty).Build();
 
-             Assert.AreEqual(msg, copy);
 
-             AssertOutputEquals(content, SerializeMessage<TestAllTypes, TestAllTypes.Builder>(copy));
 
-             Assert.AreEqual(Convert.ToBase64String(msg.ToByteArray()), Convert.ToBase64String(copy.ToByteArray()));
 
-         }
 
-         [Test]
 
-         public void TestRoundTripRepeatedTypes()
 
-         {
 
-             TestAllTypes msg = AddRepeatedTypes(new TestAllTypes.Builder(), 5).Build();
 
-             object content = SerializeMessage<TestAllTypes, TestAllTypes.Builder>(msg);
 
-             TestAllTypes copy = DeserializeMessage<TestAllTypes, TestAllTypes.Builder>(content, TestAllTypes.CreateBuilder(), ExtensionRegistry.Empty).Build();
 
-             Assert.AreEqual(msg, copy);
 
-             AssertOutputEquals(content, SerializeMessage<TestAllTypes, TestAllTypes.Builder>(copy));
 
-             Assert.AreEqual(Convert.ToBase64String(msg.ToByteArray()), Convert.ToBase64String(copy.ToByteArray()));
 
-         }
 
-         [Test]
 
-         public void TestRoundTripPackedTypes()
 
-         {
 
-             TestPackedTypes msg = AddPackedTypes(new TestPackedTypes.Builder(), 5).Build();
 
-             object content = SerializeMessage<TestPackedTypes, TestPackedTypes.Builder>(msg);
 
-             TestPackedTypes copy = DeserializeMessage<TestPackedTypes, TestPackedTypes.Builder>(content, TestPackedTypes.CreateBuilder(), ExtensionRegistry.Empty).Build();
 
-             Assert.AreEqual(msg, copy);
 
-             AssertOutputEquals(content, SerializeMessage<TestPackedTypes, TestPackedTypes.Builder>(copy));
 
-             Assert.AreEqual(Convert.ToBase64String(msg.ToByteArray()), Convert.ToBase64String(copy.ToByteArray()));
 
-         }
 
-     }
 
- }
 
 
  |