blob: cd870054a9b00a69d2de72b19c3411b8d8d422b8 [file] [log] [blame]
csharptest4ecebd82011-09-16 12:21:00 -05001using System;
2using System.Collections.Generic;
3using System.Text;
4using Google.ProtocolBuffers.TestProtos;
csharptesteac64a52011-10-04 13:43:26 -05005using Microsoft.VisualStudio.TestTools.UnitTesting;
csharptest4ecebd82011-09-16 12:21:00 -05006
7namespace Google.ProtocolBuffers
8{
csharptesteac64a52011-10-04 13:43:26 -05009 [TestClass]
csharptest4ecebd82011-09-16 12:21:00 -050010 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
csharptesteac64a52011-10-04 13:43:26 -050030 [TestMethod]
csharptest4ecebd82011-09-16 12:21:00 -050031 public void DoesNotEnumerateTwiceForMessageList()
32 {
33 TestAllTypes.Builder b = new TestAllTypes.Builder();
34 b.AddRangeRepeatedForeignMessage(
35 new OneTimeEnumerator<ForeignMessage>(
36 ForeignMessage.DefaultInstance));
37 }
csharptesteac64a52011-10-04 13:43:26 -050038 [TestMethod]
csharptest4ecebd82011-09-16 12:21:00 -050039 public void DoesNotEnumerateTwiceForPrimitiveList()
40 {
41 TestAllTypes.Builder b = new TestAllTypes.Builder();
42 b.AddRangeRepeatedInt32(new OneTimeEnumerator<int>(1));
43 }
csharptesteac64a52011-10-04 13:43:26 -050044 [TestMethod]
csharptest4ecebd82011-09-16 12:21:00 -050045 public void DoesNotEnumerateTwiceForStringList()
46 {
47 TestAllTypes.Builder b = new TestAllTypes.Builder();
48 b.AddRangeRepeatedString(new OneTimeEnumerator<string>("test"));
49 }
csharptesteac64a52011-10-04 13:43:26 -050050 [TestMethod]
csharptest4ecebd82011-09-16 12:21:00 -050051 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
csharptesteac64a52011-10-04 13:43:26 -050072 [TestMethod]
csharptest4ecebd82011-09-16 12:21:00 -050073 public void DoesNotAddNullToMessageListByAddRange()
74 {
75 TestAllTypes.Builder b = new TestAllTypes.Builder();
76 AssertThrows<ArgumentNullException>(
77 () => b.AddRangeRepeatedForeignMessage(new ForeignMessage[] { null })
78 );
79 }
csharptesteac64a52011-10-04 13:43:26 -050080 [TestMethod]
csharptest4ecebd82011-09-16 12:21:00 -050081 public void DoesNotAddNullToMessageListByAdd()
82 {
83 TestAllTypes.Builder b = new TestAllTypes.Builder();
84 AssertThrows<ArgumentNullException>(
85 () => b.AddRepeatedForeignMessage((ForeignMessage)null)
86 );
87 }
csharptesteac64a52011-10-04 13:43:26 -050088 [TestMethod]
csharptest4ecebd82011-09-16 12:21:00 -050089 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 }
csharptesteac64a52011-10-04 13:43:26 -050097 [TestMethod]
csharptest4ecebd82011-09-16 12:21:00 -050098 public void DoesNotAddNullToStringListByAddRange()
99 {
100 TestAllTypes.Builder b = new TestAllTypes.Builder();
101 AssertThrows<ArgumentNullException>(
102 () => b.AddRangeRepeatedString(new String[] { null })
103 );
104 }
csharptesteac64a52011-10-04 13:43:26 -0500105 [TestMethod]
csharptest4ecebd82011-09-16 12:21:00 -0500106 public void DoesNotAddNullToStringListByAdd()
107 {
108 TestAllTypes.Builder b = new TestAllTypes.Builder();
109 AssertThrows<ArgumentNullException>(
110 () => b.AddRepeatedString(null)
111 );
112 }
csharptesteac64a52011-10-04 13:43:26 -0500113 [TestMethod]
csharptest4ecebd82011-09-16 12:21:00 -0500114 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}