csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 1 | using System;
|
| 2 | using System.Collections.Generic;
|
| 3 | using System.Text;
|
| 4 | using Google.ProtocolBuffers.TestProtos;
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 5 | using Microsoft.VisualStudio.TestTools.UnitTesting;
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 6 |
|
| 7 | namespace Google.ProtocolBuffers
|
| 8 | {
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 9 | [TestClass]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 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 |
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 30 | [TestMethod]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 31 | public void DoesNotEnumerateTwiceForMessageList()
|
| 32 | {
|
| 33 | TestAllTypes.Builder b = new TestAllTypes.Builder();
|
| 34 | b.AddRangeRepeatedForeignMessage(
|
| 35 | new OneTimeEnumerator<ForeignMessage>(
|
| 36 | ForeignMessage.DefaultInstance));
|
| 37 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 38 | [TestMethod]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 39 | public void DoesNotEnumerateTwiceForPrimitiveList()
|
| 40 | {
|
| 41 | TestAllTypes.Builder b = new TestAllTypes.Builder();
|
| 42 | b.AddRangeRepeatedInt32(new OneTimeEnumerator<int>(1));
|
| 43 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 44 | [TestMethod]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 45 | public void DoesNotEnumerateTwiceForStringList()
|
| 46 | {
|
| 47 | TestAllTypes.Builder b = new TestAllTypes.Builder();
|
| 48 | b.AddRangeRepeatedString(new OneTimeEnumerator<string>("test"));
|
| 49 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 50 | [TestMethod]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 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 |
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 72 | [TestMethod]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 73 | public void DoesNotAddNullToMessageListByAddRange()
|
| 74 | {
|
| 75 | TestAllTypes.Builder b = new TestAllTypes.Builder();
|
| 76 | AssertThrows<ArgumentNullException>(
|
| 77 | () => b.AddRangeRepeatedForeignMessage(new ForeignMessage[] { null })
|
| 78 | );
|
| 79 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 80 | [TestMethod]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 81 | public void DoesNotAddNullToMessageListByAdd()
|
| 82 | {
|
| 83 | TestAllTypes.Builder b = new TestAllTypes.Builder();
|
| 84 | AssertThrows<ArgumentNullException>(
|
| 85 | () => b.AddRepeatedForeignMessage((ForeignMessage)null)
|
| 86 | );
|
| 87 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 88 | [TestMethod]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 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 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 97 | [TestMethod]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 98 | public void DoesNotAddNullToStringListByAddRange()
|
| 99 | {
|
| 100 | TestAllTypes.Builder b = new TestAllTypes.Builder();
|
| 101 | AssertThrows<ArgumentNullException>(
|
| 102 | () => b.AddRangeRepeatedString(new String[] { null })
|
| 103 | );
|
| 104 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 105 | [TestMethod]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 106 | public void DoesNotAddNullToStringListByAdd()
|
| 107 | {
|
| 108 | TestAllTypes.Builder b = new TestAllTypes.Builder();
|
| 109 | AssertThrows<ArgumentNullException>(
|
| 110 | () => b.AddRepeatedString(null)
|
| 111 | );
|
| 112 | }
|
csharptest | eac64a5 | 2011-10-04 13:43:26 -0500 | [diff] [blame^] | 113 | [TestMethod]
|
csharptest | 4ecebd8 | 2011-09-16 12:21:00 -0500 | [diff] [blame] | 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 | }
|