using System; | |
using System.Collections.Generic; | |
using System.Text; | |
using Google.ProtocolBuffers.TestProtos; | |
using Microsoft.VisualStudio.TestTools.UnitTesting; | |
namespace Google.ProtocolBuffers | |
{ | |
[TestClass] | |
public class GeneratedBuilderTest | |
{ | |
class OneTimeEnumerator<T> : IEnumerable<T> | |
{ | |
readonly T _item; | |
bool _enumerated; | |
public OneTimeEnumerator(T item) | |
{ | |
_item = item; | |
} | |
public IEnumerator<T> GetEnumerator() | |
{ | |
Assert.IsFalse(_enumerated, "The collection {0} has already been enumerated", GetType()); | |
_enumerated = true; | |
yield return _item; | |
} | |
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() | |
{ return GetEnumerator(); } | |
} | |
[TestMethod] | |
public void DoesNotEnumerateTwiceForMessageList() | |
{ | |
TestAllTypes.Builder b = new TestAllTypes.Builder(); | |
b.AddRangeRepeatedForeignMessage( | |
new OneTimeEnumerator<ForeignMessage>( | |
ForeignMessage.DefaultInstance)); | |
} | |
[TestMethod] | |
public void DoesNotEnumerateTwiceForPrimitiveList() | |
{ | |
TestAllTypes.Builder b = new TestAllTypes.Builder(); | |
b.AddRangeRepeatedInt32(new OneTimeEnumerator<int>(1)); | |
} | |
[TestMethod] | |
public void DoesNotEnumerateTwiceForStringList() | |
{ | |
TestAllTypes.Builder b = new TestAllTypes.Builder(); | |
b.AddRangeRepeatedString(new OneTimeEnumerator<string>("test")); | |
} | |
[TestMethod] | |
public void DoesNotEnumerateTwiceForEnumList() | |
{ | |
TestAllTypes.Builder b = new TestAllTypes.Builder(); | |
b.AddRangeRepeatedForeignEnum(new OneTimeEnumerator<ForeignEnum>(ForeignEnum.FOREIGN_BAR)); | |
} | |
private delegate void TestMethod(); | |
private static void AssertThrows<T>(TestMethod method) where T : Exception | |
{ | |
try | |
{ | |
method(); | |
} | |
catch (Exception error) | |
{ | |
if (error is T) | |
return; | |
throw; | |
} | |
Assert.Fail("Expected exception of type " + typeof(T)); | |
} | |
[TestMethod] | |
public void DoesNotAddNullToMessageListByAddRange() | |
{ | |
TestAllTypes.Builder b = new TestAllTypes.Builder(); | |
AssertThrows<ArgumentNullException>( | |
() => b.AddRangeRepeatedForeignMessage(new ForeignMessage[] { null }) | |
); | |
} | |
[TestMethod] | |
public void DoesNotAddNullToMessageListByAdd() | |
{ | |
TestAllTypes.Builder b = new TestAllTypes.Builder(); | |
AssertThrows<ArgumentNullException>( | |
() => b.AddRepeatedForeignMessage((ForeignMessage)null) | |
); | |
} | |
[TestMethod] | |
public void DoesNotAddNullToMessageListBySet() | |
{ | |
TestAllTypes.Builder b = new TestAllTypes.Builder(); | |
b.AddRepeatedForeignMessage(ForeignMessage.DefaultInstance); | |
AssertThrows<ArgumentNullException>( | |
() => b.SetRepeatedForeignMessage(0, (ForeignMessage)null) | |
); | |
} | |
[TestMethod] | |
public void DoesNotAddNullToStringListByAddRange() | |
{ | |
TestAllTypes.Builder b = new TestAllTypes.Builder(); | |
AssertThrows<ArgumentNullException>( | |
() => b.AddRangeRepeatedString(new String[] { null }) | |
); | |
} | |
[TestMethod] | |
public void DoesNotAddNullToStringListByAdd() | |
{ | |
TestAllTypes.Builder b = new TestAllTypes.Builder(); | |
AssertThrows<ArgumentNullException>( | |
() => b.AddRepeatedString(null) | |
); | |
} | |
[TestMethod] | |
public void DoesNotAddNullToStringListBySet() | |
{ | |
TestAllTypes.Builder b = new TestAllTypes.Builder(); | |
b.AddRepeatedString("one"); | |
AssertThrows<ArgumentNullException>( | |
() => b.SetRepeatedString(0, null) | |
); | |
} | |
} | |
} |