RepeatedFieldTest.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Collections.Generic;
  3. using Google.Protobuf.Collections;
  4. using Google.Protobuf.TestProtos;
  5. using NUnit.Framework;
  6. namespace Google.Protobuf
  7. {
  8. public class RepeatedFieldTest
  9. {
  10. [Test]
  11. public void NullValuesRejected()
  12. {
  13. var list = new RepeatedField<string>();
  14. Assert.Throws<ArgumentNullException>(() => list.Add((string)null));
  15. Assert.Throws<ArgumentNullException>(() => list.Add((IEnumerable<string>)null));
  16. Assert.Throws<ArgumentNullException>(() => list.Add((RepeatedField<string>)null));
  17. Assert.Throws<ArgumentNullException>(() => list.Contains(null));
  18. Assert.Throws<ArgumentNullException>(() => list.IndexOf(null));
  19. }
  20. [Test]
  21. public void Add_SingleItem()
  22. {
  23. var list = new RepeatedField<string>();
  24. list.Add("foo");
  25. Assert.AreEqual(1, list.Count);
  26. Assert.AreEqual("foo", list[0]);
  27. }
  28. [Test]
  29. public void Add_Sequence()
  30. {
  31. var list = new RepeatedField<string>();
  32. list.Add(new[] { "foo", "bar" });
  33. Assert.AreEqual(2, list.Count);
  34. Assert.AreEqual("foo", list[0]);
  35. Assert.AreEqual("bar", list[1]);
  36. }
  37. [Test]
  38. public void Add_RepeatedField()
  39. {
  40. var list = new RepeatedField<string> { "original" };
  41. list.Add(new RepeatedField<string> { "foo", "bar" });
  42. Assert.AreEqual(3, list.Count);
  43. Assert.AreEqual("original", list[0]);
  44. Assert.AreEqual("foo", list[1]);
  45. Assert.AreEqual("bar", list[2]);
  46. }
  47. [Test]
  48. public void Freeze_FreezesElements()
  49. {
  50. var list = new RepeatedField<TestAllTypes> { new TestAllTypes() };
  51. Assert.IsFalse(list[0].IsFrozen);
  52. list.Freeze();
  53. Assert.IsTrue(list[0].IsFrozen);
  54. }
  55. [Test]
  56. public void Freeze_PreventsMutations()
  57. {
  58. var list = new RepeatedField<int> { 0 };
  59. list.Freeze();
  60. Assert.Throws<InvalidOperationException>(() => list.Add(1));
  61. Assert.Throws<InvalidOperationException>(() => list[0] = 1);
  62. Assert.Throws<InvalidOperationException>(() => list.Clear());
  63. Assert.Throws<InvalidOperationException>(() => list.RemoveAt(0));
  64. Assert.Throws<InvalidOperationException>(() => list.Remove(0));
  65. Assert.Throws<InvalidOperationException>(() => list.Insert(0, 0));
  66. }
  67. [Test]
  68. public void Freeze_ReportsFrozen()
  69. {
  70. var list = new RepeatedField<int> { 0 };
  71. Assert.IsFalse(list.IsFrozen);
  72. Assert.IsFalse(list.IsReadOnly);
  73. list.Freeze();
  74. Assert.IsTrue(list.IsFrozen);
  75. Assert.IsTrue(list.IsReadOnly);
  76. }
  77. [Test]
  78. public void Clone_ReturnsMutable()
  79. {
  80. var list = new RepeatedField<int> { 0 };
  81. list.Freeze();
  82. var clone = list.Clone();
  83. clone[0] = 1;
  84. }
  85. }
  86. }