PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/src/ProtocolBuffersLite.Test/AbstractBuilderLiteTest.cs

https://code.google.com/p/protobuf-csharp-port/
C# | 309 lines | 226 code | 52 blank | 31 comment | 0 complexity | 2136c812f28587fe4cbaa730e8aaa5c9 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0, GPL-2.0
  1. #region Copyright notice and license
  2. // Protocol Buffers - Google's data interchange format
  3. // Copyright 2008 Google Inc. All rights reserved.
  4. // http://github.com/jskeet/dotnet-protobufs/
  5. // Original C++/Java/Python code:
  6. // http://code.google.com/p/protobuf/
  7. //
  8. // Redistribution and use in source and binary forms, with or without
  9. // modification, are permitted provided that the following conditions are
  10. // met:
  11. //
  12. // * Redistributions of source code must retain the above copyright
  13. // notice, this list of conditions and the following disclaimer.
  14. // * Redistributions in binary form must reproduce the above
  15. // copyright notice, this list of conditions and the following disclaimer
  16. // in the documentation and/or other materials provided with the
  17. // distribution.
  18. // * Neither the name of Google Inc. nor the names of its
  19. // contributors may be used to endorse or promote products derived from
  20. // this software without specific prior written permission.
  21. //
  22. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  23. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  24. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  25. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  26. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  27. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  28. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  29. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  30. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  31. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  32. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  33. #endregion
  34. using System;
  35. using System.Collections.Generic;
  36. using System.IO;
  37. using Google.ProtocolBuffers;
  38. using Google.ProtocolBuffers.TestProtos;
  39. using Microsoft.VisualStudio.TestTools.UnitTesting;
  40. namespace Google.ProtocolBuffers
  41. {
  42. [TestClass]
  43. public class AbstractBuilderLiteTest
  44. {
  45. [TestMethod]
  46. public void TestMergeFromCodedInputStream()
  47. {
  48. TestAllTypesLite copy,
  49. msg = TestAllTypesLite.CreateBuilder()
  50. .SetOptionalUint32(uint.MaxValue).Build();
  51. copy = TestAllTypesLite.DefaultInstance;
  52. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  53. using (MemoryStream ms = new MemoryStream(msg.ToByteArray()))
  54. {
  55. CodedInputStream ci = CodedInputStream.CreateInstance(ms);
  56. copy = copy.ToBuilder().MergeFrom(ci).Build();
  57. }
  58. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  59. }
  60. [TestMethod]
  61. public void TestIBuilderLiteWeakClear()
  62. {
  63. TestAllTypesLite copy, msg = TestAllTypesLite.DefaultInstance;
  64. copy = msg.ToBuilder().SetOptionalString("Should be removed.").Build();
  65. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  66. copy = (TestAllTypesLite) ((IBuilderLite) copy.ToBuilder()).WeakClear().WeakBuild();
  67. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  68. }
  69. [TestMethod]
  70. public void TestBuilderLiteMergeFromCodedInputStream()
  71. {
  72. TestAllTypesLite copy,
  73. msg = TestAllTypesLite.CreateBuilder()
  74. .SetOptionalString("Should be merged.").Build();
  75. copy = TestAllTypesLite.DefaultInstance;
  76. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  77. copy =
  78. copy.ToBuilder().MergeFrom(CodedInputStream.CreateInstance(new MemoryStream(msg.ToByteArray()))).Build();
  79. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  80. }
  81. [TestMethod]
  82. public void TestBuilderLiteMergeDelimitedFrom()
  83. {
  84. TestAllTypesLite copy,
  85. msg = TestAllTypesLite.CreateBuilder()
  86. .SetOptionalString("Should be merged.").Build();
  87. copy = TestAllTypesLite.DefaultInstance;
  88. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  89. Stream s = new MemoryStream();
  90. msg.WriteDelimitedTo(s);
  91. s.Position = 0;
  92. copy = copy.ToBuilder().MergeDelimitedFrom(s).Build();
  93. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  94. }
  95. [TestMethod]
  96. public void TestBuilderLiteMergeDelimitedFromExtensions()
  97. {
  98. TestAllExtensionsLite copy,
  99. msg = TestAllExtensionsLite.CreateBuilder()
  100. .SetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite,
  101. "Should be merged.").Build();
  102. copy = TestAllExtensionsLite.DefaultInstance;
  103. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  104. Stream s = new MemoryStream();
  105. msg.WriteDelimitedTo(s);
  106. s.Position = 0;
  107. ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
  108. UnitTestLiteProtoFile.RegisterAllExtensions(registry);
  109. copy = copy.ToBuilder().MergeDelimitedFrom(s, registry).Build();
  110. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  111. Assert.AreEqual("Should be merged.", copy.GetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite));
  112. }
  113. [TestMethod]
  114. public void TestBuilderLiteMergeFromStream()
  115. {
  116. TestAllTypesLite copy,
  117. msg = TestAllTypesLite.CreateBuilder()
  118. .SetOptionalString("Should be merged.").Build();
  119. copy = TestAllTypesLite.DefaultInstance;
  120. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  121. Stream s = new MemoryStream();
  122. msg.WriteTo(s);
  123. s.Position = 0;
  124. copy = copy.ToBuilder().MergeFrom(s).Build();
  125. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  126. }
  127. [TestMethod]
  128. public void TestBuilderLiteMergeFromStreamExtensions()
  129. {
  130. TestAllExtensionsLite copy,
  131. msg = TestAllExtensionsLite.CreateBuilder()
  132. .SetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite,
  133. "Should be merged.").Build();
  134. copy = TestAllExtensionsLite.DefaultInstance;
  135. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  136. Stream s = new MemoryStream();
  137. msg.WriteTo(s);
  138. s.Position = 0;
  139. ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
  140. UnitTestLiteProtoFile.RegisterAllExtensions(registry);
  141. copy = copy.ToBuilder().MergeFrom(s, registry).Build();
  142. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  143. Assert.AreEqual("Should be merged.", copy.GetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite));
  144. }
  145. [TestMethod]
  146. public void TestIBuilderLiteWeakMergeFromIMessageLite()
  147. {
  148. TestAllTypesLite copy,
  149. msg = TestAllTypesLite.CreateBuilder()
  150. .SetOptionalString("Should be merged.").Build();
  151. copy = TestAllTypesLite.DefaultInstance;
  152. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  153. copy = (TestAllTypesLite) ((IBuilderLite) copy.ToBuilder()).WeakMergeFrom((IMessageLite) msg).WeakBuild();
  154. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  155. }
  156. [TestMethod]
  157. public void TestIBuilderLiteWeakMergeFromByteString()
  158. {
  159. TestAllTypesLite copy,
  160. msg = TestAllTypesLite.CreateBuilder()
  161. .SetOptionalString("Should be merged.").Build();
  162. copy = TestAllTypesLite.DefaultInstance;
  163. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  164. copy = (TestAllTypesLite) ((IBuilderLite) copy.ToBuilder()).WeakMergeFrom(msg.ToByteString()).WeakBuild();
  165. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  166. }
  167. [TestMethod]
  168. public void TestIBuilderLiteWeakMergeFromByteStringExtensions()
  169. {
  170. TestAllExtensionsLite copy,
  171. msg = TestAllExtensionsLite.CreateBuilder()
  172. .SetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite,
  173. "Should be merged.").Build();
  174. copy = TestAllExtensionsLite.DefaultInstance;
  175. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  176. copy =
  177. (TestAllExtensionsLite)
  178. ((IBuilderLite) copy.ToBuilder()).WeakMergeFrom(msg.ToByteString(), ExtensionRegistry.Empty).WeakBuild();
  179. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  180. ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
  181. UnitTestLiteProtoFile.RegisterAllExtensions(registry);
  182. copy =
  183. (TestAllExtensionsLite)
  184. ((IBuilderLite) copy.ToBuilder()).WeakMergeFrom(msg.ToByteString(), registry).WeakBuild();
  185. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  186. Assert.AreEqual("Should be merged.", copy.GetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite));
  187. }
  188. [TestMethod]
  189. public void TestIBuilderLiteWeakMergeFromCodedInputStream()
  190. {
  191. TestAllTypesLite copy,
  192. msg = TestAllTypesLite.CreateBuilder()
  193. .SetOptionalUint32(uint.MaxValue).Build();
  194. copy = TestAllTypesLite.DefaultInstance;
  195. Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());
  196. using (MemoryStream ms = new MemoryStream(msg.ToByteArray()))
  197. {
  198. CodedInputStream ci = CodedInputStream.CreateInstance(ms);
  199. copy = (TestAllTypesLite) ((IBuilderLite) copy.ToBuilder()).WeakMergeFrom(ci).WeakBuild();
  200. }
  201. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  202. }
  203. [TestMethod]
  204. public void TestIBuilderLiteWeakBuildPartial()
  205. {
  206. IBuilderLite builder = TestRequiredLite.CreateBuilder();
  207. Assert.IsFalse(builder.IsInitialized);
  208. IMessageLite msg = builder.WeakBuildPartial();
  209. Assert.IsFalse(msg.IsInitialized);
  210. TestUtil.AssertBytesEqual(msg.ToByteArray(), TestRequiredLite.DefaultInstance.ToByteArray());
  211. }
  212. [TestMethod, ExpectedException(typeof (UninitializedMessageException))]
  213. public void TestIBuilderLiteWeakBuildUninitialized()
  214. {
  215. IBuilderLite builder = TestRequiredLite.CreateBuilder();
  216. Assert.IsFalse(builder.IsInitialized);
  217. builder.WeakBuild();
  218. }
  219. [TestMethod]
  220. public void TestIBuilderLiteWeakBuild()
  221. {
  222. IBuilderLite builder = TestRequiredLite.CreateBuilder()
  223. .SetD(0)
  224. .SetEn(ExtraEnum.EXLITE_BAZ);
  225. Assert.IsTrue(builder.IsInitialized);
  226. builder.WeakBuild();
  227. }
  228. [TestMethod]
  229. public void TestIBuilderLiteWeakClone()
  230. {
  231. TestRequiredLite msg = TestRequiredLite.CreateBuilder()
  232. .SetD(1).SetEn(ExtraEnum.EXLITE_BAR).Build();
  233. Assert.IsTrue(msg.IsInitialized);
  234. IMessageLite copy = ((IBuilderLite) msg.ToBuilder()).WeakClone().WeakBuild();
  235. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  236. }
  237. [TestMethod]
  238. public void TestIBuilderLiteWeakDefaultInstance()
  239. {
  240. Assert.IsTrue(ReferenceEquals(TestRequiredLite.DefaultInstance,
  241. ((IBuilderLite) TestRequiredLite.CreateBuilder()).WeakDefaultInstanceForType));
  242. }
  243. [TestMethod]
  244. public void TestGeneratedBuilderLiteAddRange()
  245. {
  246. TestAllTypesLite copy,
  247. msg = TestAllTypesLite.CreateBuilder()
  248. .SetOptionalUint32(123)
  249. .AddRepeatedInt32(1)
  250. .AddRepeatedInt32(2)
  251. .AddRepeatedInt32(3)
  252. .Build();
  253. copy = msg.DefaultInstanceForType.ToBuilder().MergeFrom(msg).Build();
  254. TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());
  255. }
  256. }
  257. }