Explorar el Código

Add ExtensionSet tests and add checks that non-message extension fields don't fail initialization checks

Sydney Acksman hace 6 años
padre
commit
0c80570a8b

+ 102 - 0
csharp/src/Google.Protobuf.Test/ExtensionSetTest.cs

@@ -0,0 +1,102 @@
+using Google.Protobuf.TestProtos.Proto2;
+using NUnit.Framework;
+
+using static Google.Protobuf.TestProtos.Proto2.UnittestExtensions;
+
+namespace Google.Protobuf
+{
+    public class ExtensionSetTest
+    {
+        [Test]
+        public void EmptyExtensionSet()
+        {
+            ExtensionSet<TestAllExtensions> extensions = new ExtensionSet<TestAllExtensions>();
+            Assert.AreEqual(0, extensions.CalculateSize());
+        }
+
+        [Test]
+        public void MergeExtensionSet()
+        {
+            ExtensionSet<TestAllExtensions> extensions = null;
+            ExtensionSet.Set(ref extensions, OptionalBoolExtension, true);
+
+            ExtensionSet<TestAllExtensions> other = null;
+
+            Assert.IsFalse(ExtensionSet.Has(ref other, OptionalBoolExtension));
+            ExtensionSet.MergeFrom(ref other, extensions);
+            Assert.IsTrue(ExtensionSet.Has(ref other, OptionalBoolExtension));
+        }
+
+        [Test]
+        public void TestMergeCodedInput()
+        {
+            var message = new TestAllExtensions();
+            message.SetExtension(OptionalBoolExtension, true);
+            var serialized = message.ToByteArray();
+
+            var other = TestAllExtensions.Parser
+                .WithExtensionRegistry(new ExtensionRegistry() { OptionalBoolExtension })
+                .ParseFrom(serialized);
+
+            Assert.AreEqual(message, other);
+            Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
+        }
+
+        [Test]
+        public void TestMergeMessage()
+        {
+            var message = new TestAllExtensions();
+            message.SetExtension(OptionalBoolExtension, true);
+
+            var other = new TestAllExtensions();
+
+            Assert.AreNotEqual(message, other);
+            Assert.AreNotEqual(message.CalculateSize(), other.CalculateSize());
+
+            other.MergeFrom(message);
+
+            Assert.AreEqual(message, other);
+            Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
+        }
+
+        [Test]
+        public void TestEquals()
+        {
+            var message = new TestAllExtensions();
+            message.SetExtension(OptionalBoolExtension, true);
+
+            var other = new TestAllExtensions();
+
+            Assert.AreNotEqual(message, other);
+            Assert.AreNotEqual(message.CalculateSize(), other.CalculateSize());
+
+            other.SetExtension(OptionalBoolExtension, true);
+
+            Assert.AreEqual(message, other);
+            Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
+        }
+
+        [Test]
+        public void TestHashCode()
+        {
+            var message = new TestAllExtensions();
+            var hashCode = message.GetHashCode();
+
+            message.SetExtension(OptionalBoolExtension, true);
+
+            Assert.AreNotEqual(hashCode, message.GetHashCode());
+        }
+
+        [Test]
+        public void TestClone()
+        {
+            var message = new TestAllExtensions();
+            message.SetExtension(OptionalBoolExtension, true);
+
+            var other = message.Clone();
+
+            Assert.AreEqual(message, other);
+            Assert.AreEqual(message.CalculateSize(), message.CalculateSize());
+        }
+    }
+}

+ 8 - 0
csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs

@@ -254,6 +254,14 @@ namespace Google.Protobuf
             extensionMessage.C = 3;
 
             Assert.True(message.IsInitialized());
+
+            message.SetExtension(Proto2.UnittestExtensions.OptionalBoolExtension, true);
+
+            Assert.True(message.IsInitialized());
+
+            message.GetOrRegisterExtension(Proto2.UnittestExtensions.RepeatedBoolExtension).Add(true);
+
+            Assert.True(message.IsInitialized());
         }
 
         [Test]