using System; using System.Collections.Generic; using Google.ProtocolBuffers.TestProtos; using NUnit.Framework; namespace Google.ProtocolBuffers { public class GeneratedBuilderTest { class OneTimeEnumerator : IEnumerable { readonly T _item; bool _enumerated; public OneTimeEnumerator(T item) { _item = item; } public IEnumerator GetEnumerator() { Assert.IsFalse(_enumerated); _enumerated = true; yield return _item; } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } } [Test] public void DoesNotEnumerateTwiceForMessageList() { TestAllTypes.Builder b = new TestAllTypes.Builder(); b.AddRangeRepeatedForeignMessage(new OneTimeEnumerator(ForeignMessage.DefaultInstance)); } [Test] public void DoesNotEnumerateTwiceForPrimitiveList() { TestAllTypes.Builder b = new TestAllTypes.Builder(); b.AddRangeRepeatedInt32(new OneTimeEnumerator(1)); } [Test] public void DoesNotEnumerateTwiceForStringList() { TestAllTypes.Builder b = new TestAllTypes.Builder(); b.AddRangeRepeatedString(new OneTimeEnumerator("test")); } [Test] public void DoesNotEnumerateTwiceForEnumList() { TestAllTypes.Builder b = new TestAllTypes.Builder(); b.AddRangeRepeatedForeignEnum(new OneTimeEnumerator(ForeignEnum.FOREIGN_BAR)); } [Test] public void DoesNotAddNullToMessageListByAddRange() { TestAllTypes.Builder b = new TestAllTypes.Builder(); Assert.Throws(() => b.AddRangeRepeatedForeignMessage(new ForeignMessage[] { null })); } [Test] public void DoesNotAddNullToMessageListByAdd() { TestAllTypes.Builder b = new TestAllTypes.Builder(); Assert.Throws(() => b.AddRepeatedForeignMessage((ForeignMessage)null)); } [Test] public void DoesNotAddNullToMessageListBySet() { TestAllTypes.Builder b = new TestAllTypes.Builder(); b.AddRepeatedForeignMessage(ForeignMessage.DefaultInstance); Assert.Throws(() => b.SetRepeatedForeignMessage(0, (ForeignMessage)null)); } [Test] public void DoesNotAddNullToStringListByAddRange() { TestAllTypes.Builder b = new TestAllTypes.Builder(); Assert.Throws(() => b.AddRangeRepeatedString(new String[] { null })); } [Test] public void DoesNotAddNullToStringListByAdd() { TestAllTypes.Builder b = new TestAllTypes.Builder(); Assert.Throws(() => b.AddRepeatedString(null)); } [Test] public void DoesNotAddNullToStringListBySet() { TestAllTypes.Builder b = new TestAllTypes.Builder(); b.AddRepeatedString("one"); Assert.Throws(() => b.SetRepeatedString(0, null)); } } }