Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Side by Side Diff: third_party/protobuf/csharp/src/Google.Protobuf.Test/FieldCodecTest.cs

Issue 1842653006: Update //third_party/protobuf to version 3. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #region Copyright notice and license
2 // Protocol Buffers - Google's data interchange format
3 // Copyright 2015 Google Inc. All rights reserved.
4 // https://developers.google.com/protocol-buffers/
5 //
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are
8 // met:
9 //
10 // * Redistributions of source code must retain the above copyright
11 // notice, this list of conditions and the following disclaimer.
12 // * Redistributions in binary form must reproduce the above
13 // copyright notice, this list of conditions and the following disclaimer
14 // in the documentation and/or other materials provided with the
15 // distribution.
16 // * Neither the name of Google Inc. nor the names of its
17 // contributors may be used to endorse or promote products derived from
18 // this software without specific prior written permission.
19 //
20 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #endregion
32
33 using System.Collections.Generic;
34 using System.IO;
35 using Google.Protobuf.TestProtos;
36 using NUnit.Framework;
37
38 namespace Google.Protobuf
39 {
40 public class FieldCodecTest
41 {
42 #pragma warning disable 0414 // Used by tests via reflection - do not remove!
43 private static readonly List<ICodecTestData> Codecs = new List<ICodecTes tData>
44 {
45 new FieldCodecTestData<bool>(FieldCodec.ForBool(100), true, "Bool"),
46 new FieldCodecTestData<string>(FieldCodec.ForString(100), "sample", "String"),
47 new FieldCodecTestData<ByteString>(FieldCodec.ForBytes(100), ByteStr ing.CopyFrom(1, 2, 3), "Bytes"),
48 new FieldCodecTestData<int>(FieldCodec.ForInt32(100), -1000, "Int32" ),
49 new FieldCodecTestData<int>(FieldCodec.ForSInt32(100), -1000, "SInt3 2"),
50 new FieldCodecTestData<int>(FieldCodec.ForSFixed32(100), -1000, "SFi xed32"),
51 new FieldCodecTestData<uint>(FieldCodec.ForUInt32(100), 1234, "UInt3 2"),
52 new FieldCodecTestData<uint>(FieldCodec.ForFixed32(100), 1234, "Fixe d32"),
53 new FieldCodecTestData<long>(FieldCodec.ForInt64(100), -1000, "Int64 "),
54 new FieldCodecTestData<long>(FieldCodec.ForSInt64(100), -1000, "SInt 64"),
55 new FieldCodecTestData<long>(FieldCodec.ForSFixed64(100), -1000, "SF ixed64"),
56 new FieldCodecTestData<ulong>(FieldCodec.ForUInt64(100), 1234, "UInt 64"),
57 new FieldCodecTestData<ulong>(FieldCodec.ForFixed64(100), 1234, "Fix ed64"),
58 new FieldCodecTestData<float>(FieldCodec.ForFloat(100), 1234.5f, "Fl oat"),
59 new FieldCodecTestData<double>(FieldCodec.ForDouble(100), 1234567890 .5d, "Double"),
60 new FieldCodecTestData<ForeignEnum>(
61 FieldCodec.ForEnum(100, t => (int) t, t => (ForeignEnum) t), For eignEnum.FOREIGN_BAZ, "Enum"),
62 new FieldCodecTestData<ForeignMessage>(
63 FieldCodec.ForMessage(100, ForeignMessage.Parser), new ForeignMe ssage { C = 10 }, "Message"),
64 };
65 #pragma warning restore 0414
66
67 [Test, TestCaseSource("Codecs")]
68 public void RoundTripWithTag(ICodecTestData codec)
69 {
70 codec.TestRoundTripWithTag();
71 }
72
73 [Test, TestCaseSource("Codecs")]
74 public void RoundTripRaw(ICodecTestData codec)
75 {
76 codec.TestRoundTripRaw();
77 }
78
79 [Test, TestCaseSource("Codecs")]
80 public void CalculateSize(ICodecTestData codec)
81 {
82 codec.TestCalculateSizeWithTag();
83 }
84
85 [Test, TestCaseSource("Codecs")]
86 public void DefaultValue(ICodecTestData codec)
87 {
88 codec.TestDefaultValue();
89 }
90
91 [Test, TestCaseSource("Codecs")]
92 public void FixedSize(ICodecTestData codec)
93 {
94 codec.TestFixedSize();
95 }
96
97 // This is ugly, but it means we can have a non-generic interface.
98 // It feels like NUnit should support this better, but I don't know
99 // of any better ways right now.
100 public interface ICodecTestData
101 {
102 void TestRoundTripRaw();
103 void TestRoundTripWithTag();
104 void TestCalculateSizeWithTag();
105 void TestDefaultValue();
106 void TestFixedSize();
107 }
108
109 public class FieldCodecTestData<T> : ICodecTestData
110 {
111 private readonly FieldCodec<T> codec;
112 private readonly T sampleValue;
113 private readonly string name;
114
115 public FieldCodecTestData(FieldCodec<T> codec, T sampleValue, string name)
116 {
117 this.codec = codec;
118 this.sampleValue = sampleValue;
119 this.name = name;
120 }
121
122 public void TestRoundTripRaw()
123 {
124 var stream = new MemoryStream();
125 var codedOutput = new CodedOutputStream(stream);
126 codec.ValueWriter(codedOutput, sampleValue);
127 codedOutput.Flush();
128 stream.Position = 0;
129 var codedInput = new CodedInputStream(stream);
130 Assert.AreEqual(sampleValue, codec.ValueReader(codedInput));
131 Assert.IsTrue(codedInput.IsAtEnd);
132 }
133
134 public void TestRoundTripWithTag()
135 {
136 var stream = new MemoryStream();
137 var codedOutput = new CodedOutputStream(stream);
138 codec.WriteTagAndValue(codedOutput, sampleValue);
139 codedOutput.Flush();
140 stream.Position = 0;
141 var codedInput = new CodedInputStream(stream);
142 codedInput.AssertNextTag(codec.Tag);
143 Assert.AreEqual(sampleValue, codec.Read(codedInput));
144 Assert.IsTrue(codedInput.IsAtEnd);
145 }
146
147 public void TestCalculateSizeWithTag()
148 {
149 var stream = new MemoryStream();
150 var codedOutput = new CodedOutputStream(stream);
151 codec.WriteTagAndValue(codedOutput, sampleValue);
152 codedOutput.Flush();
153 Assert.AreEqual(stream.Position, codec.CalculateSizeWithTag(samp leValue));
154 }
155
156 public void TestDefaultValue()
157 {
158 // WriteTagAndValue ignores default values
159 var stream = new MemoryStream();
160 var codedOutput = new CodedOutputStream(stream);
161 codec.WriteTagAndValue(codedOutput, codec.DefaultValue);
162 codedOutput.Flush();
163 Assert.AreEqual(0, stream.Position);
164 Assert.AreEqual(0, codec.CalculateSizeWithTag(codec.DefaultValue ));
165 if (typeof(T).IsValueType)
166 {
167 Assert.AreEqual(default(T), codec.DefaultValue);
168 }
169
170 // The plain ValueWriter/ValueReader delegates don't.
171 if (codec.DefaultValue != null) // This part isn't appropriate f or message types.
172 {
173 codedOutput = new CodedOutputStream(stream);
174 codec.ValueWriter(codedOutput, codec.DefaultValue);
175 codedOutput.Flush();
176 Assert.AreNotEqual(0, stream.Position);
177 Assert.AreEqual(stream.Position, codec.ValueSizeCalculator(c odec.DefaultValue));
178 stream.Position = 0;
179 var codedInput = new CodedInputStream(stream);
180 Assert.AreEqual(codec.DefaultValue, codec.ValueReader(codedI nput));
181 }
182 }
183
184 public void TestFixedSize()
185 {
186 Assert.AreEqual(name.Contains("Fixed"), codec.FixedSize != 0);
187 }
188
189 public override string ToString()
190 {
191 return name;
192 }
193 }
194 }
195 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698