using System; using System.Collections.Generic; using Google.Protobuf.TestProtos; using NUnit.Framework; namespace Google.Protobuf.Collections { public class RepeatedFieldTest { [Test] public void NullValuesRejected() { var list = new RepeatedField(); Assert.Throws(() => list.Add((string)null)); Assert.Throws(() => list.Add((IEnumerable)null)); Assert.Throws(() => list.Add((RepeatedField)null)); Assert.Throws(() => list.Contains(null)); Assert.Throws(() => list.IndexOf(null)); } [Test] public void Add_SingleItem() { var list = new RepeatedField(); list.Add("foo"); Assert.AreEqual(1, list.Count); Assert.AreEqual("foo", list[0]); } [Test] public void Add_Sequence() { var list = new RepeatedField(); list.Add(new[] { "foo", "bar" }); Assert.AreEqual(2, list.Count); Assert.AreEqual("foo", list[0]); Assert.AreEqual("bar", list[1]); } [Test] public void Add_RepeatedField() { var list = new RepeatedField { "original" }; list.Add(new RepeatedField { "foo", "bar" }); Assert.AreEqual(3, list.Count); Assert.AreEqual("original", list[0]); Assert.AreEqual("foo", list[1]); Assert.AreEqual("bar", list[2]); } [Test] public void Freeze_FreezesElements() { var list = new RepeatedField { new TestAllTypes() }; Assert.IsFalse(list[0].IsFrozen); list.Freeze(); Assert.IsTrue(list[0].IsFrozen); } [Test] public void Freeze_PreventsMutations() { var list = new RepeatedField { 0 }; list.Freeze(); Assert.Throws(() => list.Add(1)); Assert.Throws(() => list[0] = 1); Assert.Throws(() => list.Clear()); Assert.Throws(() => list.RemoveAt(0)); Assert.Throws(() => list.Remove(0)); Assert.Throws(() => list.Insert(0, 0)); } [Test] public void Freeze_ReportsFrozen() { var list = new RepeatedField { 0 }; Assert.IsFalse(list.IsFrozen); Assert.IsFalse(list.IsReadOnly); list.Freeze(); Assert.IsTrue(list.IsFrozen); Assert.IsTrue(list.IsReadOnly); } [Test] public void Clone_ReturnsMutable() { var list = new RepeatedField { 0 }; list.Freeze(); var clone = list.Clone(); clone[0] = 1; } } }