blob: 951e856a5961789a01435d89bf8ef8d53d08a9c3 [file] [log] [blame]
Jan Tattermusch238fd352020-04-15 10:08:19 +02001using Google.Protobuf.TestProtos.Proto2;
Sydney Acksman0c805702019-05-05 14:58:20 -05002using NUnit.Framework;
3
4using static Google.Protobuf.TestProtos.Proto2.UnittestExtensions;
5
6namespace Google.Protobuf
7{
8 public class ExtensionSetTest
9 {
10 [Test]
11 public void EmptyExtensionSet()
12 {
13 ExtensionSet<TestAllExtensions> extensions = new ExtensionSet<TestAllExtensions>();
14 Assert.AreEqual(0, extensions.CalculateSize());
15 }
16
17 [Test]
18 public void MergeExtensionSet()
19 {
20 ExtensionSet<TestAllExtensions> extensions = null;
21 ExtensionSet.Set(ref extensions, OptionalBoolExtension, true);
22
23 ExtensionSet<TestAllExtensions> other = null;
24
25 Assert.IsFalse(ExtensionSet.Has(ref other, OptionalBoolExtension));
26 ExtensionSet.MergeFrom(ref other, extensions);
27 Assert.IsTrue(ExtensionSet.Has(ref other, OptionalBoolExtension));
28 }
29
30 [Test]
31 public void TestMergeCodedInput()
32 {
33 var message = new TestAllExtensions();
34 message.SetExtension(OptionalBoolExtension, true);
35 var serialized = message.ToByteArray();
36
Jan Tattermuschf9f92a62020-06-03 16:26:05 +020037 MessageParsingHelpers.AssertWritingMessage(message);
38
Jan Tattermusch238fd352020-04-15 10:08:19 +020039 MessageParsingHelpers.AssertReadingMessage(
40 TestAllExtensions.Parser.WithExtensionRegistry(new ExtensionRegistry() { OptionalBoolExtension }),
41 serialized,
42 other =>
43 {
44 Assert.AreEqual(message, other);
45 Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
46 });
Sydney Acksman0c805702019-05-05 14:58:20 -050047 }
48
49 [Test]
50 public void TestMergeMessage()
51 {
52 var message = new TestAllExtensions();
53 message.SetExtension(OptionalBoolExtension, true);
54
55 var other = new TestAllExtensions();
56
57 Assert.AreNotEqual(message, other);
58 Assert.AreNotEqual(message.CalculateSize(), other.CalculateSize());
59
60 other.MergeFrom(message);
61
62 Assert.AreEqual(message, other);
63 Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
64 }
65
66 [Test]
Jan Tattermuschdd97af82020-04-22 09:03:15 +020067 public void TryMergeFieldFrom_CodedInputStream()
68 {
69 var message = new TestAllExtensions();
70 message.SetExtension(OptionalStringExtension, "abcd");
71
72 var input = new CodedInputStream(message.ToByteArray());
73 input.ExtensionRegistry = new ExtensionRegistry() { OptionalStringExtension };
74 input.ReadTag(); // TryMergeFieldFrom expects that a tag was just read and will inspect the LastTag value
75
76 ExtensionSet<TestAllExtensions> extensionSet = null;
77 // test the legacy overload of TryMergeFieldFrom that takes a CodedInputStream
78 Assert.IsTrue(ExtensionSet.TryMergeFieldFrom(ref extensionSet, input));
79 Assert.AreEqual("abcd", ExtensionSet.Get(ref extensionSet, OptionalStringExtension));
80 }
81
82 [Test]
Sydney Acksman0c805702019-05-05 14:58:20 -050083 public void TestEquals()
84 {
85 var message = new TestAllExtensions();
86 message.SetExtension(OptionalBoolExtension, true);
87
88 var other = new TestAllExtensions();
89
90 Assert.AreNotEqual(message, other);
91 Assert.AreNotEqual(message.CalculateSize(), other.CalculateSize());
92
93 other.SetExtension(OptionalBoolExtension, true);
94
95 Assert.AreEqual(message, other);
96 Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
97 }
98
99 [Test]
100 public void TestHashCode()
101 {
102 var message = new TestAllExtensions();
103 var hashCode = message.GetHashCode();
104
105 message.SetExtension(OptionalBoolExtension, true);
106
107 Assert.AreNotEqual(hashCode, message.GetHashCode());
108 }
109
110 [Test]
111 public void TestClone()
112 {
113 var message = new TestAllExtensions();
114 message.SetExtension(OptionalBoolExtension, true);
115
116 var other = message.Clone();
117
118 Assert.AreEqual(message, other);
Jon Skeetcea36532021-01-20 08:06:34 +0000119 Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
120 }
121
122 [Test]
123 public void TestDefaultValueRoundTrip()
124 {
125 var message = new TestAllExtensions();
126 message.SetExtension(OptionalBoolExtension, false);
127 Assert.IsFalse(message.GetExtension(OptionalBoolExtension));
128 Assert.IsTrue(message.HasExtension(OptionalBoolExtension));
129
130 var bytes = message.ToByteArray();
131 var registry = new ExtensionRegistry { OptionalBoolExtension };
132 var parsed = TestAllExtensions.Parser.WithExtensionRegistry(registry).ParseFrom(bytes);
133 Assert.IsFalse(parsed.GetExtension(OptionalBoolExtension));
134 Assert.IsTrue(parsed.HasExtension(OptionalBoolExtension));
Sydney Acksman0c805702019-05-05 14:58:20 -0500135 }
136 }
137}