• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #region Copyright notice and license
2 // Protocol Buffers - Google's data interchange format
3 // Copyright 2008 Google Inc.  All rights reserved.
4 //
5 // Use of this source code is governed by a BSD-style
6 // license that can be found in the LICENSE file or at
7 // https://developers.google.com/open-source/licenses/bsd
8 #endregion
9 
10 using NUnit.Framework;
11 using ProtobufUnittest;
12 using System;
13 using System.IO;
14 using UnitTest.Issues.TestProtos;
15 
16 namespace Google.Protobuf.Test
17 {
18     public class Proto3OptionalTest
19     {
20         [Test]
OptionalInt32FieldLifecycle()21         public void OptionalInt32FieldLifecycle()
22         {
23             var message = new TestProto3Optional();
24             Assert.IsFalse(message.HasOptionalInt32);
25             Assert.AreEqual(0, message.OptionalInt32);
26 
27             message.OptionalInt32 = 5;
28             Assert.IsTrue(message.HasOptionalInt32);
29             Assert.AreEqual(5, message.OptionalInt32);
30 
31             message.OptionalInt32 = 0;
32             Assert.IsTrue(message.HasOptionalInt32);
33             Assert.AreEqual(0, message.OptionalInt32);
34 
35             message.ClearOptionalInt32();
36             Assert.IsFalse(message.HasOptionalInt32);
37             Assert.AreEqual(0, message.OptionalInt32);
38         }
39 
40         [Test]
OptionalStringFieldLifecycle()41         public void OptionalStringFieldLifecycle()
42         {
43             var message = new TestProto3Optional();
44             Assert.IsFalse(message.HasOptionalString);
45             Assert.AreEqual("", message.OptionalString);
46 
47             message.OptionalString = "x";
48             Assert.IsTrue(message.HasOptionalString);
49             Assert.AreEqual("x", message.OptionalString);
50 
51             message.OptionalString = "";
52             Assert.IsTrue(message.HasOptionalString);
53             Assert.AreEqual("", message.OptionalString);
54 
55             message.ClearOptionalString();
56             Assert.IsFalse(message.HasOptionalString);
57             Assert.AreEqual("", message.OptionalString);
58 
59             Assert.Throws<ArgumentNullException>(() => message.OptionalString = null);
60         }
61 
62         [Test]
Clone()63         public void Clone()
64         {
65             var original = new TestProto3Optional { OptionalInt64 = 0L };
66 
67             var clone = original.Clone();
68             Assert.False(clone.HasOptionalInt32);
69             Assert.AreEqual(0, clone.OptionalInt32);
70             Assert.True(clone.HasOptionalInt64);
71             Assert.AreEqual(0L, clone.OptionalInt64);
72         }
73 
74         [Test]
Serialization_NotSet()75         public void Serialization_NotSet()
76         {
77             var stream = new MemoryStream();
78             var message = new TestProto3Optional();
79             message.WriteTo(stream);
80             Assert.AreEqual(0, stream.Length);
81         }
82 
83         [Test]
Serialization_SetToDefault()84         public void Serialization_SetToDefault()
85         {
86             var stream = new MemoryStream();
87             var message = new TestProto3Optional { OptionalInt32 = 0 };
88             message.WriteTo(stream);
89             Assert.AreEqual(2, stream.Length); // Tag and value
90         }
91 
92         [Test]
Serialization_Roundtrip()93         public void Serialization_Roundtrip()
94         {
95             var original = new TestProto3Optional { OptionalInt64 = 0L, OptionalFixed32 = 5U };
96             var stream = new MemoryStream();
97             original.WriteTo(stream);
98             stream.Position = 0;
99             var deserialized = TestProto3Optional.Parser.ParseFrom(stream);
100 
101             Assert.AreEqual(0, deserialized.OptionalInt32);
102             Assert.IsFalse(deserialized.HasOptionalInt32);
103 
104             Assert.AreEqual(0L, deserialized.OptionalInt64);
105             Assert.IsTrue(deserialized.HasOptionalInt64);
106 
107             Assert.AreEqual(5U, deserialized.OptionalFixed32);
108             Assert.IsTrue(deserialized.HasOptionalFixed32);
109         }
110 
111         [Test]
Equality_IgnoresPresence()112         public void Equality_IgnoresPresence()
113         {
114             var message1 = new TestProto3Optional { OptionalInt32 = 0 };
115             var message2 = new TestProto3Optional();
116 
117             Assert.IsTrue(message1.Equals(message2));
118             message1.ClearOptionalInt32();
119         }
120 
121         [Test]
MixedFields()122         public void MixedFields()
123         {
124             var descriptor = MixedRegularAndOptional.Descriptor;
125             Assert.AreEqual(1, descriptor.Oneofs.Count);
126             Assert.AreEqual(0, descriptor.RealOneofCount);
127             Assert.True(descriptor.Oneofs[0].IsSynthetic);
128         }
129     }
130 }
131