Exemplo n.º 1
0
        public void MergingCornerCase()
        {
            var message = new TestWellKnownTypes {
                Int32Field = 5
            };

            // Create a byte array which has the data of an Int32Value explicitly containing a value of 0.
            // This wouldn't normally happen.
            byte[] bytes;
            var    wrapperTag = WireFormat.MakeTag(TestWellKnownTypes.Int32FieldFieldNumber, WireFormat.WireType.LengthDelimited);
            var    valueTag   = WireFormat.MakeTag(Int32Value.ValueFieldNumber, WireFormat.WireType.Varint);

            using (var stream = new MemoryStream())
            {
                var coded = new CodedOutputStream(stream);
                coded.WriteTag(wrapperTag);
                coded.WriteLength(2); // valueTag + a value 0, each one byte
                coded.WriteTag(valueTag);
                coded.WriteInt32(0);
                coded.Flush();
                bytes = stream.ToArray();
            }

            message.MergeFrom(bytes);
            // A normal implementation would have 0 now, as the explicit default would have been overwritten the 5.
            Assert.AreEqual(5, message.Int32Field);
        }
Exemplo n.º 2
0
        public void MergingMessageWithZero(int?originValue, int?mergingValue, int?expectedResult)
        {
            // This differs from the MergingStreamCornerCase because when we merge message *objects*,
            // we ignore default values from the "source".
            var message1 = new TestWellKnownTypes {
                Int32Field = originValue
            };
            var message2 = new TestWellKnownTypes {
                Int32Field = mergingValue
            };

            message1.MergeFrom(message2);
            Assert.AreEqual(expectedResult, message1.Int32Field);
        }
Exemplo n.º 3
0
        public void MergingStreamNoValue()
        {
            var message = new TestWellKnownTypes {
                Int32Field = 5
            };

            // Create a byte array which an Int32 field, but with no value.
            var bytes = new TestWellKnownTypes {
                Int32Field = 0
            }.ToByteArray();

            Assert.AreEqual(2, bytes.Length); // The tag for Int32Field is a single byte, then a byte indicating a 0-length message.
            message.MergeFrom(bytes);

            // The "implicit" 0 did *not* overwrite the value.
            // (This is the correct behaviour.)
            Assert.AreEqual(5, message.Int32Field);
        }
Exemplo n.º 4
0
        public void Merging(string original, string merged, string expected)
        {
            var originalMessage = new TestWellKnownTypes {
                StringField = original
            };
            var mergingMessage = new TestWellKnownTypes {
                StringField = merged
            };

            originalMessage.MergeFrom(mergingMessage);
            Assert.AreEqual(expected, originalMessage.StringField);

            // Try it using MergeFrom(CodedInputStream) too...
            originalMessage = new TestWellKnownTypes {
                StringField = original
            };
            originalMessage.MergeFrom(mergingMessage.ToByteArray());
            Assert.AreEqual(expected, originalMessage.StringField);
        }
Exemplo n.º 5
0
        public void MergingCornerCase()
        {
            var message = new TestWellKnownTypes { Int32Field = 5 };

            // Create a byte array which has the data of an Int32Value explicitly containing a value of 0.
            // This wouldn't normally happen.
            byte[] bytes;
            var wrapperTag = WireFormat.MakeTag(TestWellKnownTypes.Int32FieldFieldNumber, WireFormat.WireType.LengthDelimited);
            var valueTag = WireFormat.MakeTag(Int32Value.ValueFieldNumber, WireFormat.WireType.Varint);
            using (var stream = new MemoryStream())
            {
                var coded = new CodedOutputStream(stream);
                coded.WriteTag(wrapperTag);
                coded.WriteLength(2); // valueTag + a value 0, each one byte
                coded.WriteTag(valueTag);
                coded.WriteInt32(0);
                coded.Flush();
                bytes = stream.ToArray();
            }

            message.MergeFrom(bytes);
            // A normal implementation would have 0 now, as the explicit default would have been overwritten the 5.
            Assert.AreEqual(5, message.Int32Field);
        }
Exemplo n.º 6
0
        public void Merging(string original, string merged, string expected)
        {
            var originalMessage = new TestWellKnownTypes { StringField = original };
            var mergingMessage = new TestWellKnownTypes { StringField = merged };
            originalMessage.MergeFrom(mergingMessage);
            Assert.AreEqual(expected, originalMessage.StringField);

            // Try it using MergeFrom(CodedInputStream) too...
            originalMessage = new TestWellKnownTypes { StringField = original };
            originalMessage.MergeFrom(mergingMessage.ToByteArray());
            Assert.AreEqual(expected, originalMessage.StringField);
        }
Exemplo n.º 7
0
 public void MergingMessageWithZero(int? originValue, int? mergingValue, int? expectedResult)
 {
     // This differs from the MergingStreamCornerCase because when we merge message *objects*,
     // we ignore default values from the "source".
     var message1 = new TestWellKnownTypes { Int32Field = originValue };
     var message2 = new TestWellKnownTypes { Int32Field = mergingValue };
     message1.MergeFrom(message2);
     Assert.AreEqual(expectedResult, message1.Int32Field);
 }
Exemplo n.º 8
0
        public void MergingStreamNoValue()
        {
            var message = new TestWellKnownTypes { Int32Field = 5 };

            // Create a byte array which an Int32 field, but with no value.
            var bytes = new TestWellKnownTypes { Int32Field = 0 }.ToByteArray();
            Assert.AreEqual(2, bytes.Length); // The tag for Int32Field is a single byte, then a byte indicating a 0-length message.
            message.MergeFrom(bytes);

            // The "implicit" 0 did *not* overwrite the value.
            // (This is the correct behaviour.)
            Assert.AreEqual(5, message.Int32Field);
        }