aboutsummaryrefslogtreecommitdiff
path: root/csharp/src/ProtocolBuffers.Test/Collections/MapFieldTest.cs
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2015-07-17 07:29:50 +0100
committerJon Skeet <skeet@pobox.com>2015-07-17 07:29:50 +0100
commit0f442a7533b1d06ce0092b28f10af481b99e1369 (patch)
tree4f9cb3ecb2d8ab4f9c138a06d645a3cc3dcdeef3 /csharp/src/ProtocolBuffers.Test/Collections/MapFieldTest.cs
parentfa544f4835623be66d73e1d984121ab4a92e1650 (diff)
parent34878cb14eba4578d1d67d2dc93250729d492774 (diff)
downloadprotobuf-0f442a7533b1d06ce0092b28f10af481b99e1369.tar.gz
protobuf-0f442a7533b1d06ce0092b28f10af481b99e1369.tar.bz2
protobuf-0f442a7533b1d06ce0092b28f10af481b99e1369.zip
Merge pull request #611 from jskeet/csharp-wrappers
C# wrapper types
Diffstat (limited to 'csharp/src/ProtocolBuffers.Test/Collections/MapFieldTest.cs')
-rw-r--r--csharp/src/ProtocolBuffers.Test/Collections/MapFieldTest.cs85
1 files changed, 45 insertions, 40 deletions
diff --git a/csharp/src/ProtocolBuffers.Test/Collections/MapFieldTest.cs b/csharp/src/ProtocolBuffers.Test/Collections/MapFieldTest.cs
index d43bed3e..46d3bd9a 100644
--- a/csharp/src/ProtocolBuffers.Test/Collections/MapFieldTest.cs
+++ b/csharp/src/ProtocolBuffers.Test/Collections/MapFieldTest.cs
@@ -103,32 +103,35 @@ namespace Google.Protobuf.Collections
}
[Test]
- public void Add_ForbidsNullKeys()
+ public void NullValues()
{
- var map = new MapField<string, ForeignMessage>();
- Assert.Throws<ArgumentNullException>(() => map.Add(null, new ForeignMessage()));
+ TestNullValues<int?>(0);
+ TestNullValues("");
+ TestNullValues(new TestAllTypes());
}
- [Test]
- public void Add_AcceptsNullMessageValues()
+ private void TestNullValues<T>(T nonNullValue)
{
- var map = new MapField<string, ForeignMessage>();
- map.Add("missing", null);
- Assert.IsNull(map["missing"]);
- }
+ var map = new MapField<int, T>(false);
+ var nullValue = (T) (object) null;
+ Assert.Throws<ArgumentNullException>(() => map.Add(0, nullValue));
+ Assert.Throws<ArgumentNullException>(() => map[0] = nullValue);
+ map.Add(1, nonNullValue);
+ map[1] = nonNullValue;
- [Test]
- public void Add_ForbidsNullStringValues()
- {
- var map = new MapField<string, string>();
- Assert.Throws<ArgumentNullException>(() => map.Add("missing", null));
+ // Doesn't throw...
+ map = new MapField<int, T>(true);
+ map.Add(0, nullValue);
+ map[0] = nullValue;
+ map.Add(1, nonNullValue);
+ map[1] = nonNullValue;
}
[Test]
- public void Add_ForbidsNullByteStringValues()
+ public void Add_ForbidsNullKeys()
{
- var map = new MapField<string, ByteString>();
- Assert.Throws<ArgumentNullException>(() => map.Add("missing", null));
+ var map = new MapField<string, ForeignMessage>();
+ Assert.Throws<ArgumentNullException>(() => map.Add(null, new ForeignMessage()));
}
[Test]
@@ -137,29 +140,7 @@ namespace Google.Protobuf.Collections
var map = new MapField<string, ForeignMessage>();
Assert.Throws<ArgumentNullException>(() => map[null] = new ForeignMessage());
}
-
- [Test]
- public void Indexer_AcceptsNullMessageValues()
- {
- var map = new MapField<string, ForeignMessage>();
- map["missing"] = null;
- Assert.IsNull(map["missing"]);
- }
-
- [Test]
- public void Indexer_ForbidsNullStringValues()
- {
- var map = new MapField<string, string>();
- Assert.Throws<ArgumentNullException>(() => map["missing"] = null);
- }
-
- [Test]
- public void Indexer_ForbidsNullByteStringValues()
- {
- var map = new MapField<string, ByteString>();
- Assert.Throws<ArgumentNullException>(() => map["missing"] = null);
- }
-
+
[Test]
public void AddPreservesInsertionOrder()
{
@@ -528,6 +509,30 @@ namespace Google.Protobuf.Collections
Assert.Throws<NotSupportedException>(() => dictionary["a"] = "c");
}
+ [Test]
+ public void AllowNullValues_Property()
+ {
+ // Non-message reference type values are non-nullable by default, but can be overridden
+ Assert.IsFalse(new MapField<int, string>().AllowsNullValues);
+ Assert.IsFalse(new MapField<int, string>(false).AllowsNullValues);
+ Assert.IsTrue(new MapField<int, string>(true).AllowsNullValues);
+
+ // Non-nullable value type values are never nullable
+ Assert.IsFalse(new MapField<int, int>().AllowsNullValues);
+ Assert.IsFalse(new MapField<int, int>(false).AllowsNullValues);
+ Assert.Throws<ArgumentException>(() => new MapField<int, int>(true));
+
+ // Message type values are nullable by default, but can be overridden
+ Assert.IsTrue(new MapField<int, TestAllTypes>().AllowsNullValues);
+ Assert.IsFalse(new MapField<int, TestAllTypes>(false).AllowsNullValues);
+ Assert.IsTrue(new MapField<int, TestAllTypes>(true).AllowsNullValues);
+
+ // Nullable value type values are nullable by default, but can be overridden
+ Assert.IsTrue(new MapField<int, int?>().AllowsNullValues);
+ Assert.IsFalse(new MapField<int, int?>(false).AllowsNullValues);
+ Assert.IsTrue(new MapField<int, int?>(true).AllowsNullValues);
+ }
+
private static KeyValuePair<TKey, TValue> NewKeyValuePair<TKey, TValue>(TKey key, TValue value)
{
return new KeyValuePair<TKey, TValue>(key, value);