ExtensionSetTest.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using Google.Protobuf.TestProtos.Proto2;
  2. using NUnit.Framework;
  3. using static Google.Protobuf.TestProtos.Proto2.UnittestExtensions;
  4. namespace Google.Protobuf
  5. {
  6. public class ExtensionSetTest
  7. {
  8. [Test]
  9. public void EmptyExtensionSet()
  10. {
  11. ExtensionSet<TestAllExtensions> extensions = new ExtensionSet<TestAllExtensions>();
  12. Assert.AreEqual(0, extensions.CalculateSize());
  13. }
  14. [Test]
  15. public void MergeExtensionSet()
  16. {
  17. ExtensionSet<TestAllExtensions> extensions = null;
  18. ExtensionSet.Set(ref extensions, OptionalBoolExtension, true);
  19. ExtensionSet<TestAllExtensions> other = null;
  20. Assert.IsFalse(ExtensionSet.Has(ref other, OptionalBoolExtension));
  21. ExtensionSet.MergeFrom(ref other, extensions);
  22. Assert.IsTrue(ExtensionSet.Has(ref other, OptionalBoolExtension));
  23. }
  24. [Test]
  25. public void TestMergeCodedInput()
  26. {
  27. var message = new TestAllExtensions();
  28. message.SetExtension(OptionalBoolExtension, true);
  29. var serialized = message.ToByteArray();
  30. MessageParsingHelpers.AssertReadingMessage(
  31. TestAllExtensions.Parser.WithExtensionRegistry(new ExtensionRegistry() { OptionalBoolExtension }),
  32. serialized,
  33. other =>
  34. {
  35. Assert.AreEqual(message, other);
  36. Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
  37. });
  38. }
  39. [Test]
  40. public void TestMergeMessage()
  41. {
  42. var message = new TestAllExtensions();
  43. message.SetExtension(OptionalBoolExtension, true);
  44. var other = new TestAllExtensions();
  45. Assert.AreNotEqual(message, other);
  46. Assert.AreNotEqual(message.CalculateSize(), other.CalculateSize());
  47. other.MergeFrom(message);
  48. Assert.AreEqual(message, other);
  49. Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
  50. }
  51. [Test]
  52. public void TryMergeFieldFrom_CodedInputStream()
  53. {
  54. var message = new TestAllExtensions();
  55. message.SetExtension(OptionalStringExtension, "abcd");
  56. var input = new CodedInputStream(message.ToByteArray());
  57. input.ExtensionRegistry = new ExtensionRegistry() { OptionalStringExtension };
  58. input.ReadTag(); // TryMergeFieldFrom expects that a tag was just read and will inspect the LastTag value
  59. ExtensionSet<TestAllExtensions> extensionSet = null;
  60. // test the legacy overload of TryMergeFieldFrom that takes a CodedInputStream
  61. Assert.IsTrue(ExtensionSet.TryMergeFieldFrom(ref extensionSet, input));
  62. Assert.AreEqual("abcd", ExtensionSet.Get(ref extensionSet, OptionalStringExtension));
  63. }
  64. [Test]
  65. public void TestEquals()
  66. {
  67. var message = new TestAllExtensions();
  68. message.SetExtension(OptionalBoolExtension, true);
  69. var other = new TestAllExtensions();
  70. Assert.AreNotEqual(message, other);
  71. Assert.AreNotEqual(message.CalculateSize(), other.CalculateSize());
  72. other.SetExtension(OptionalBoolExtension, true);
  73. Assert.AreEqual(message, other);
  74. Assert.AreEqual(message.CalculateSize(), other.CalculateSize());
  75. }
  76. [Test]
  77. public void TestHashCode()
  78. {
  79. var message = new TestAllExtensions();
  80. var hashCode = message.GetHashCode();
  81. message.SetExtension(OptionalBoolExtension, true);
  82. Assert.AreNotEqual(hashCode, message.GetHashCode());
  83. }
  84. [Test]
  85. public void TestClone()
  86. {
  87. var message = new TestAllExtensions();
  88. message.SetExtension(OptionalBoolExtension, true);
  89. var other = message.Clone();
  90. Assert.AreEqual(message, other);
  91. Assert.AreEqual(message.CalculateSize(), message.CalculateSize());
  92. }
  93. }
  94. }