Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
102 lines
3.5 KiB
102 lines
3.5 KiB
using System; |
|
using System.Collections.Generic; |
|
using Google.ProtocolBuffers.TestProtos; |
|
using Xunit; |
|
|
|
namespace Google.ProtocolBuffers |
|
{ |
|
public class GeneratedBuilderTest |
|
{ |
|
class OneTimeEnumerator<T> : IEnumerable<T> |
|
{ |
|
readonly T _item; |
|
bool _enumerated; |
|
public OneTimeEnumerator(T item) |
|
{ |
|
_item = item; |
|
} |
|
public IEnumerator<T> GetEnumerator() |
|
{ |
|
Assert.False(_enumerated); |
|
_enumerated = true; |
|
yield return _item; |
|
} |
|
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() |
|
{ |
|
return GetEnumerator(); |
|
} |
|
} |
|
|
|
[Fact] |
|
public void DoesNotEnumerateTwiceForMessageList() |
|
{ |
|
TestAllTypes.Builder b = new TestAllTypes.Builder(); |
|
b.AddRangeRepeatedForeignMessage(new OneTimeEnumerator<ForeignMessage>(ForeignMessage.DefaultInstance)); |
|
} |
|
|
|
[Fact] |
|
public void DoesNotEnumerateTwiceForPrimitiveList() |
|
{ |
|
TestAllTypes.Builder b = new TestAllTypes.Builder(); |
|
b.AddRangeRepeatedInt32(new OneTimeEnumerator<int>(1)); |
|
} |
|
|
|
[Fact] |
|
public void DoesNotEnumerateTwiceForStringList() |
|
{ |
|
TestAllTypes.Builder b = new TestAllTypes.Builder(); |
|
b.AddRangeRepeatedString(new OneTimeEnumerator<string>("test")); |
|
} |
|
|
|
[Fact] |
|
public void DoesNotEnumerateTwiceForEnumList() |
|
{ |
|
TestAllTypes.Builder b = new TestAllTypes.Builder(); |
|
b.AddRangeRepeatedForeignEnum(new OneTimeEnumerator<ForeignEnum>(ForeignEnum.FOREIGN_BAR)); |
|
} |
|
|
|
[Fact] |
|
public void DoesNotAddNullToMessageListByAddRange() |
|
{ |
|
TestAllTypes.Builder b = new TestAllTypes.Builder(); |
|
Assert.Throws<ArgumentNullException>(() => b.AddRangeRepeatedForeignMessage(new ForeignMessage[] { null })); |
|
} |
|
|
|
[Fact] |
|
public void DoesNotAddNullToMessageListByAdd() |
|
{ |
|
TestAllTypes.Builder b = new TestAllTypes.Builder(); |
|
Assert.Throws<ArgumentNullException>(() => b.AddRepeatedForeignMessage((ForeignMessage)null)); |
|
} |
|
|
|
[Fact] |
|
public void DoesNotAddNullToMessageListBySet() |
|
{ |
|
TestAllTypes.Builder b = new TestAllTypes.Builder(); |
|
b.AddRepeatedForeignMessage(ForeignMessage.DefaultInstance); |
|
Assert.Throws<ArgumentNullException>(() => b.SetRepeatedForeignMessage(0, (ForeignMessage)null)); |
|
} |
|
|
|
[Fact] |
|
public void DoesNotAddNullToStringListByAddRange() |
|
{ |
|
TestAllTypes.Builder b = new TestAllTypes.Builder(); |
|
Assert.Throws<ArgumentNullException>(() => b.AddRangeRepeatedString(new String[] { null })); |
|
} |
|
|
|
[Fact] |
|
public void DoesNotAddNullToStringListByAdd() |
|
{ |
|
TestAllTypes.Builder b = new TestAllTypes.Builder(); |
|
Assert.Throws<ArgumentNullException>(() => b.AddRepeatedString(null)); |
|
} |
|
|
|
[Fact] |
|
public void DoesNotAddNullToStringListBySet() |
|
{ |
|
TestAllTypes.Builder b = new TestAllTypes.Builder(); |
|
b.AddRepeatedString("one"); |
|
Assert.Throws<ArgumentNullException>(() => b.SetRepeatedString(0, null)); |
|
} |
|
} |
|
}
|
|
|