using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Google.Protobuf.TestProtos; using NUnit.Framework; namespace Google.Protobuf { /// /// Tests around the generated TestAllTypes message. /// public class GeneratedMessageTest { [Test] public void DefaultValues() { // Single fields var message = new TestAllTypes(); Assert.AreEqual(false, message.SingleBool); Assert.AreEqual(ByteString.Empty, message.SingleBytes); Assert.AreEqual(0.0, message.SingleDouble); Assert.AreEqual(0, message.SingleFixed32); Assert.AreEqual(0L, message.SingleFixed64); Assert.AreEqual(0.0f, message.SingleFloat); Assert.AreEqual(ForeignEnum.FOREIGN_UNSPECIFIED, message.SingleForeignEnum); Assert.IsNull(message.SingleForeignMessage); Assert.AreEqual(ImportEnum.IMPORT_ENUM_UNSPECIFIED, message.SingleImportEnum); Assert.IsNull(message.SingleImportMessage); Assert.AreEqual(0, message.SingleInt32); Assert.AreEqual(0L, message.SingleInt64); Assert.AreEqual(TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED, message.SingleNestedEnum); Assert.IsNull(message.SingleNestedMessage); Assert.IsNull(message.SinglePublicImportMessage); Assert.AreEqual(0, message.SingleSfixed32); Assert.AreEqual(0L, message.SingleSfixed64); Assert.AreEqual(0, message.SingleSint32); Assert.AreEqual(0L, message.SingleSint64); Assert.AreEqual("", message.SingleString); Assert.AreEqual(0U, message.SingleUint32); Assert.AreEqual(0UL, message.SingleUint64); // Repeated fields Assert.AreEqual(0, message.RepeatedBool.Count); Assert.AreEqual(0, message.RepeatedBytes.Count); Assert.AreEqual(0, message.RepeatedDouble.Count); Assert.AreEqual(0, message.RepeatedFixed32.Count); Assert.AreEqual(0, message.RepeatedFixed64.Count); Assert.AreEqual(0, message.RepeatedFloat.Count); Assert.AreEqual(0, message.RepeatedForeignEnum.Count); Assert.AreEqual(0, message.RepeatedForeignMessage.Count); Assert.AreEqual(0, message.RepeatedImportEnum.Count); Assert.AreEqual(0, message.RepeatedImportMessage.Count); Assert.AreEqual(0, message.RepeatedNestedEnum.Count); Assert.AreEqual(0, message.RepeatedNestedMessage.Count); Assert.AreEqual(0, message.RepeatedPublicImportMessage.Count); Assert.AreEqual(0, message.RepeatedSfixed32.Count); Assert.AreEqual(0, message.RepeatedSfixed64.Count); Assert.AreEqual(0, message.RepeatedSint32.Count); Assert.AreEqual(0, message.RepeatedSint64.Count); Assert.AreEqual(0, message.RepeatedString.Count); Assert.AreEqual(0, message.RepeatedUint32.Count); Assert.AreEqual(0, message.RepeatedUint64.Count); // Oneof fields Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.None, message.OneofFieldCase); Assert.AreEqual(0, message.OneofUint32); Assert.AreEqual("", message.OneofString); Assert.AreEqual(ByteString.Empty, message.OneofBytes); Assert.IsNull(message.OneofNestedMessage); } [Test] public void RoundTrip_Empty() { var message = new TestAllTypes(); // Without setting any values, there's nothing to write. byte[] bytes = message.ToByteArray(); Assert.AreEqual(0, bytes.Length); TestAllTypes parsed = TestAllTypes.Parser.ParseFrom(bytes); Assert.AreEqual(message, parsed); } [Test] public void RoundTrip_SingleValues() { var message = new TestAllTypes { SingleBool = true, SingleBytes = ByteString.CopyFrom(new byte[] { 1, 2, 3, 4 }), SingleDouble = 23.5, SingleFixed32 = 23, SingleFixed64 = 1234567890123, SingleFloat = 12.25f, SingleForeignEnum = ForeignEnum.FOREIGN_BAR, SingleForeignMessage = new ForeignMessage { C = 10 }, SingleImportEnum = ImportEnum.IMPORT_BAZ, SingleImportMessage = new ImportMessage { D = 20 }, SingleInt32 = 100, SingleInt64 = 3210987654321, SingleNestedEnum = TestAllTypes.Types.NestedEnum.FOO, SingleNestedMessage = new TestAllTypes.Types.NestedMessage { Bb = 35 }, SinglePublicImportMessage = new PublicImportMessage { E = 54 }, SingleSfixed32 = -123, SingleSfixed64 = -12345678901234, SingleSint32 = -456, SingleSint64 = -12345678901235, SingleString = "test", SingleUint32 = uint.MaxValue, SingleUint64 = ulong.MaxValue }; byte[] bytes = message.ToByteArray(); TestAllTypes parsed = TestAllTypes.Parser.ParseFrom(bytes); Assert.AreEqual(message, parsed); } [Test] public void RoundTrip_RepeatedValues() { var message = new TestAllTypes { RepeatedBool = { true, false }, RepeatedBytes = { ByteString.CopyFrom(new byte[] { 1, 2, 3, 4 }), ByteString.CopyFrom(new byte[] { 5, 6 }) }, RepeatedDouble = { -12.25, 23.5 }, RepeatedFixed32 = { uint.MaxValue, 23 }, RepeatedFixed64 = { ulong.MaxValue, 1234567890123 }, RepeatedFloat = { 100f, 12.25f }, RepeatedForeignEnum = { ForeignEnum.FOREIGN_FOO, ForeignEnum.FOREIGN_BAR }, RepeatedForeignMessage = { new ForeignMessage(), new ForeignMessage { C = 10 } }, RepeatedImportEnum = { ImportEnum.IMPORT_BAZ, ImportEnum.IMPORT_ENUM_UNSPECIFIED }, RepeatedImportMessage = { new ImportMessage { D = 20 }, new ImportMessage { D = 25 } }, RepeatedInt32 = { 100, 200 }, RepeatedInt64 = { 3210987654321, long.MaxValue }, RepeatedNestedEnum = { TestAllTypes.Types.NestedEnum.FOO, TestAllTypes.Types.NestedEnum.NEG }, RepeatedNestedMessage = { new TestAllTypes.Types.NestedMessage { Bb = 35 }, new TestAllTypes.Types.NestedMessage { Bb = 10 } }, RepeatedPublicImportMessage = { new PublicImportMessage { E = 54 }, new PublicImportMessage { E = -1 } }, RepeatedSfixed32 = { -123, 123 }, RepeatedSfixed64 = { -12345678901234, 12345678901234 }, RepeatedSint32 = { -456, 100 }, RepeatedSint64 = { -12345678901235, 123 }, RepeatedString = { "foo", "bar" }, RepeatedUint32 = { uint.MaxValue, uint.MinValue }, RepeatedUint64 = { ulong.MaxValue, uint.MinValue } }; byte[] bytes = message.ToByteArray(); TestAllTypes parsed = TestAllTypes.Parser.ParseFrom(bytes); Assert.AreEqual(message, parsed); } } }