public void RoundTrip_Maps()
        {
            var message = new TestMap
            {
                MapBoolBool =
                {
                    { false, true  },
                    { true,  false }
                },
                MapInt32Bytes =
                {
                    {  5, ByteString.CopyFrom(6, 7, 8) },
                    { 25, ByteString.CopyFrom(1, 2,3, 4, 5) },
                    { 10, ByteString.Empty }
                },
                MapInt32ForeignMessage =
                {
                    { 0, new ForeignMessage {
                          C = 10
                      } },
                    { 5, new ForeignMessage() },
                },
                MapInt32Enum =
                {
                    {    1, MapEnum.Bar },
                    { 2000, MapEnum.Foo }
                }
            };

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertRoundtrip(TestMap.Parser, message);
        }
        public void RoundTrip_ExtensionGroups()
        {
            var message = new TestAllExtensions();

            message.SetExtension(UnittestExtensions.OptionalGroupExtension, new OptionalGroup_extension {
                A = 10
            });
            message.GetOrInitializeExtension(UnittestExtensions.RepeatedGroupExtension).AddRange(new[]
            {
                new RepeatedGroup_extension {
                    A = 10
                },
                new RepeatedGroup_extension {
                    A = 20
                },
                new RepeatedGroup_extension {
                    A = 30
                }
            });

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertRoundtrip(
                TestAllExtensions.Parser.WithExtensionRegistry(new ExtensionRegistry()
            {
                UnittestExtensions.OptionalGroupExtension, UnittestExtensions.RepeatedGroupExtension
            }),
                message);
        }
        public void RoundTrip_Groups()
        {
            var message = new TestAllTypes
            {
                OptionalGroup = new TestAllTypes.Types.OptionalGroup
                {
                    A = 10
                },
                RepeatedGroup =
                {
                    new TestAllTypes.Types.RepeatedGroup {
                        A = 10
                    },
                    new TestAllTypes.Types.RepeatedGroup {
                        A = 20
                    },
                    new TestAllTypes.Types.RepeatedGroup {
                        A = 30
                    }
                }
            };

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertRoundtrip(Proto2.TestAllTypes.Parser, message);
        }
        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);

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertRoundtrip(TestAllTypes.Parser, message);
        }
        public void RoundTrip_RepeatedValues()
        {
            var message = new TestAllTypes
            {
                RepeatedBool           = { true, false },
                RepeatedBytes          = { ByteString.CopyFrom(1, 2, 3, 4), ByteString.CopyFrom(5, 6) },
                RepeatedDouble         = { -12.25, 23.5 },
                RepeatedFixed32        = { uint.MaxValue, 23 },
                RepeatedFixed64        = { ulong.MaxValue, 1234567890123 },
                RepeatedFloat          = { 100f, 12.25f },
                RepeatedForeignEnum    = { ForeignEnum.ForeignFoo, ForeignEnum.ForeignBar },
                RepeatedForeignMessage = { new ForeignMessage(), new ForeignMessage {
                                               C = 10
                                           } },
                RepeatedImportEnum    = { ImportEnum.ImportBaz, ImportEnum.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 }
            };

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertRoundtrip(TestAllTypes.Parser, message);
        }
        public void RoundTrip_NestedExtensionGroup()
        {
            var message = new TestGroupExtension();

            message.SetExtension(TestNestedExtension.Extensions.OptionalGroupExtension, new TestNestedExtension.Types.OptionalGroup_extension {
                A = 10
            });

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertRoundtrip(
                TestGroupExtension.Parser.WithExtensionRegistry(new ExtensionRegistry()
            {
                TestNestedExtension.Extensions.OptionalGroupExtension
            }),
                message);
        }
        public void OneofSerialization_DefaultValue()
        {
            var message = new TestAllTypes();

            message.OneofString = "this would take a bit of space";
            message.OneofUint32 = 0; // This is the default value for UInt32; normally wouldn't be serialized
            var bytes = message.ToByteArray();

            Assert.AreEqual(3, bytes.Length); // 2 bytes for the tag + 1 for the value - it's still serialized

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertRoundtrip(TestAllTypes.Parser, message, parsedMessage =>
            {
                Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.OneofUint32, parsedMessage.OneofFieldCase);
            });
        }
        public void OneofSerialization_NonDefaultValue()
        {
            var message = new TestAllTypes();

            message.OneofString = "this would take a bit of space";
            message.OneofUint32 = 10;
            var bytes = message.ToByteArray();

            Assert.AreEqual(3, bytes.Length); // 2 bytes for the tag + 1 for the value - no string!

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertRoundtrip(TestAllTypes.Parser, message, parsedMessage =>
            {
                Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.OneofUint32, parsedMessage.OneofFieldCase);
            });
        }
        public void MapWithEmptyEntry()
        {
            var message = new TestMap
            {
                MapInt32Bytes = { { 0, ByteString.Empty } }
            };

            byte[] bytes = message.ToByteArray();
            Assert.AreEqual(2, bytes.Length); // Tag for field entry (1 byte), length of entry (0; 1 byte)

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertReadingMessage(
                TestMap.Parser,
                bytes,
                parsed =>
            {
                Assert.AreEqual(1, parsed.MapInt32Bytes.Count);
                Assert.AreEqual(ByteString.Empty, parsed.MapInt32Bytes[0]);
            });
        }
Esempio n. 10
0
        public void TestMergeCodedInput()
        {
            var message = new TestAllExtensions();

            message.SetExtension(OptionalBoolExtension, true);
            var serialized = message.ToByteArray();

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertReadingMessage(
                TestAllExtensions.Parser.WithExtensionRegistry(new ExtensionRegistry()
            {
                OptionalBoolExtension
            }),
                serialized,
                other =>
            {
                Assert.AreEqual(message, other);
                Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
            });
        }
Esempio n. 11
0
        public void RoundTrip_SingleValues()
        {
            var message = new TestAllTypes
            {
                SingleBool           = true,
                SingleBytes          = ByteString.CopyFrom(1, 2, 3, 4),
                SingleDouble         = 23.5,
                SingleFixed32        = 23,
                SingleFixed64        = 1234567890123,
                SingleFloat          = 12.25f,
                SingleForeignEnum    = ForeignEnum.ForeignBar,
                SingleForeignMessage = new ForeignMessage {
                    C = 10
                },
                SingleImportEnum    = ImportEnum.ImportBaz,
                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
            };

            MessageParsingHelpers.AssertWritingMessage(message);

            MessageParsingHelpers.AssertRoundtrip(TestAllTypes.Parser, message);
        }