blob: b12900319e8115301740ca34c95b5df37b6b4de4 [file] [log] [blame]
csharptest4ecebd82011-09-16 12:21:00 -05001using System;
2using System.Collections.Generic;
3using System.Text;
4using Google.ProtocolBuffers.TestProtos;
5using NUnit.Framework;
6
7namespace Google.ProtocolBuffers
8{
9 [TestFixture]
10 public class GeneratedBuilderTest
11 {
12 class OneTimeEnumerator<T> : IEnumerable<T>
13 {
14 readonly T _item;
15 bool _enumerated;
16 public OneTimeEnumerator(T item)
17 {
18 _item = item;
19 }
20 public IEnumerator<T> GetEnumerator()
21 {
22 Assert.IsFalse(_enumerated, "The collection {0} has already been enumerated", GetType());
23 _enumerated = true;
24 yield return _item;
25 }
26 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
27 { return GetEnumerator(); }
28 }
29
30 [Test]
31 public void DoesNotEnumerateTwiceForMessageList()
32 {
33 TestAllTypes.Builder b = new TestAllTypes.Builder();
34 b.AddRangeRepeatedForeignMessage(
35 new OneTimeEnumerator<ForeignMessage>(
36 ForeignMessage.DefaultInstance));
37 }
38 [Test]
39 public void DoesNotEnumerateTwiceForPrimitiveList()
40 {
41 TestAllTypes.Builder b = new TestAllTypes.Builder();
42 b.AddRangeRepeatedInt32(new OneTimeEnumerator<int>(1));
43 }
44 [Test]
45 public void DoesNotEnumerateTwiceForStringList()
46 {
47 TestAllTypes.Builder b = new TestAllTypes.Builder();
48 b.AddRangeRepeatedString(new OneTimeEnumerator<string>("test"));
49 }
50 [Test]
51 public void DoesNotEnumerateTwiceForEnumList()
52 {
53 TestAllTypes.Builder b = new TestAllTypes.Builder();
54 b.AddRangeRepeatedForeignEnum(new OneTimeEnumerator<ForeignEnum>(ForeignEnum.FOREIGN_BAR));
55 }
56
57 private static void AssertThrows<T>(System.Threading.ThreadStart method) where T : Exception
58 {
59 try
60 {
61 method();
62 }
63 catch (Exception error)
64 {
65 if (error is T)
66 return;
67 throw;
68 }
69 Assert.Fail("Expected exception of type " + typeof(T));
70 }
71
72 [Test]
73 public void DoesNotAddNullToMessageListByAddRange()
74 {
75 TestAllTypes.Builder b = new TestAllTypes.Builder();
76 AssertThrows<ArgumentNullException>(
77 () => b.AddRangeRepeatedForeignMessage(new ForeignMessage[] { null })
78 );
79 }
80 [Test]
81 public void DoesNotAddNullToMessageListByAdd()
82 {
83 TestAllTypes.Builder b = new TestAllTypes.Builder();
84 AssertThrows<ArgumentNullException>(
85 () => b.AddRepeatedForeignMessage((ForeignMessage)null)
86 );
87 }
88 [Test]
89 public void DoesNotAddNullToMessageListBySet()
90 {
91 TestAllTypes.Builder b = new TestAllTypes.Builder();
92 b.AddRepeatedForeignMessage(ForeignMessage.DefaultInstance);
93 AssertThrows<ArgumentNullException>(
94 () => b.SetRepeatedForeignMessage(0, (ForeignMessage)null)
95 );
96 }
97 [Test]
98 public void DoesNotAddNullToStringListByAddRange()
99 {
100 TestAllTypes.Builder b = new TestAllTypes.Builder();
101 AssertThrows<ArgumentNullException>(
102 () => b.AddRangeRepeatedString(new String[] { null })
103 );
104 }
105 [Test]
106 public void DoesNotAddNullToStringListByAdd()
107 {
108 TestAllTypes.Builder b = new TestAllTypes.Builder();
109 AssertThrows<ArgumentNullException>(
110 () => b.AddRepeatedString(null)
111 );
112 }
113 [Test]
114 public void DoesNotAddNullToStringListBySet()
115 {
116 TestAllTypes.Builder b = new TestAllTypes.Builder();
117 b.AddRepeatedString("one");
118 AssertThrows<ArgumentNullException>(
119 () => b.SetRepeatedString(0, null)
120 );
121 }
122 }
123}