Skip to content

Commit 7be27b9

Browse files
committed
Make string indexer throw on unknown key, remove GetChild
1 parent 069b280 commit 7be27b9

12 files changed

Lines changed: 67 additions & 62 deletions

ValveKeyValue/ValveKeyValue.Test/ConversionCoverageTestCase.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,6 @@ public void DictBackedCollectionSetNullRemovesKey()
251251
data["key1"] = null;
252252

253253
Assert.That(data.ContainsKey("key1"), Is.False);
254-
Assert.That(data["key1"], Is.Null);
255254
Assert.That(data.Count, Is.EqualTo(1));
256255
Assert.That((int)data["key2"], Is.EqualTo(42));
257256
}

ValveKeyValue/ValveKeyValue.Test/EdgeCaseTestCase.cs

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public void IndexerSetNullRemovesChildFromListCollection()
8888

8989
obj["a"] = null;
9090

91-
Assert.That(obj["a"], Is.Null);
91+
Assert.That(obj.ContainsKey("a"), Is.False);
9292
Assert.That(obj.Count, Is.EqualTo(1));
9393
Assert.That((string)obj["b"], Is.EqualTo("2"));
9494
}
@@ -186,22 +186,22 @@ public void IntegerIndexerOnScalarThrowsNotSupportedException()
186186

187187
#endregion
188188

189-
#region GetChild on scalar returns null
189+
#region TryGetValue on scalar returns false
190190

191191
[Test]
192-
public void GetChildOnScalarReturnsNull()
192+
public void TryGetValueOnScalarReturnsFalse()
193193
{
194194
var obj = new KVObject("hello");
195195

196-
Assert.That(obj.GetChild("x"), Is.Null);
196+
Assert.That(obj.TryGetValue("x", out _), Is.False);
197197
}
198198

199199
[Test]
200-
public void GetChildOnNullValuedObjectReturnsNull()
200+
public void TryGetValueOnNullValuedObjectReturnsFalse()
201201
{
202202
var obj = KVObject.Null();
203203

204-
Assert.That(obj.GetChild("x"), Is.Null);
204+
Assert.That(obj.TryGetValue("x", out _), Is.False);
205205
}
206206

207207
#endregion
@@ -484,16 +484,13 @@ public void DuplicateKeysPreservedInListCollection()
484484
}
485485

486486
[Test]
487-
public void GetChildReturnsFistForDuplicateKeysInListCollection()
487+
public void IndexerReturnsFirstForDuplicateKeysInListCollection()
488488
{
489489
var obj = KVObject.ListCollection();
490490
obj.Add("key", "first");
491491
obj.Add("key", "second");
492492

493-
var child = obj.GetChild("key");
494-
495-
Assert.That(child, Is.Not.Null);
496-
Assert.That((string)child, Is.EqualTo("first"));
493+
Assert.That((string)obj["key"], Is.EqualTo("first"));
497494
}
498495

499496
[Test]
@@ -640,11 +637,13 @@ public void DictAndListCollectionsHaveConsistentBehavior()
640637

641638
Assert.Multiple(() =>
642639
{
643-
// GetChild
644-
Assert.That((int)dict.GetChild("a"), Is.EqualTo(1));
645-
Assert.That((int)list.GetChild("a"), Is.EqualTo(1));
646-
Assert.That(dict.GetChild("missing"), Is.Null);
647-
Assert.That(list.GetChild("missing"), Is.Null);
640+
// TryGetValue
641+
Assert.That(dict.TryGetValue("a", out var dictA), Is.True);
642+
Assert.That((int)dictA, Is.EqualTo(1));
643+
Assert.That(list.TryGetValue("a", out var listA), Is.True);
644+
Assert.That((int)listA, Is.EqualTo(1));
645+
Assert.That(dict.TryGetValue("missing", out _), Is.False);
646+
Assert.That(list.TryGetValue("missing", out _), Is.False);
648647

649648
// ContainsKey
650649
Assert.That(dict.ContainsKey("a"), Is.True);

ValveKeyValue/ValveKeyValue.Test/KVBasicObjectIndexerTestCase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ namespace ValveKeyValue.Test
33
class KVBasicObjectIndexerTestCase
44
{
55
[Test]
6-
public void IndexerOnValueNodeReturnsNull()
6+
public void IndexerOnValueNodeThrows()
77
{
8-
Assert.That(data["baz"], Is.Null);
8+
Assert.That(() => data["baz"], Throws.TypeOf<KeyNotFoundException>());
99
}
1010

1111
KVObject data;

ValveKeyValue/ValveKeyValue.Test/KVObjectApiTestCase.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ public void IndexerReturnsKVObjectForExistingKey()
2323
}
2424

2525
[Test]
26-
public void IndexerReturnsNullForMissingKey()
26+
public void IndexerThrowsForMissingKey()
2727
{
2828
var obj = KVObject.ListCollection();
2929
obj.Add("key", "value");
30-
Assert.That(obj["missing"], Is.Null);
30+
Assert.That(() => obj["missing"], Throws.TypeOf<KeyNotFoundException>());
3131
}
3232

3333
[Test]
@@ -327,7 +327,7 @@ public void RemoveChildFromCollection()
327327

328328
Assert.That(removed, Is.True);
329329
Assert.That(obj.Count, Is.EqualTo(1));
330-
Assert.That(obj["a"], Is.Null);
330+
Assert.That(obj.ContainsKey("a"), Is.False);
331331
}
332332

333333
[Test]
@@ -478,7 +478,7 @@ public void ListCollectionAllowsDuplicateKeys()
478478
});
479479

480480
Assert.That(obj.Count, Is.EqualTo(2));
481-
// GetChild returns first match
481+
// Indexer returns first match
482482
Assert.That((string)obj["key"], Is.EqualTo("first"));
483483
}
484484

ValveKeyValue/ValveKeyValue.Test/KVObjectIndexerTestCase.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,18 @@ class KVObjectIndexerTestCase
55
[TestCase("foo", ExpectedResult = "bar")]
66
[TestCase("bar", ExpectedResult = "baz")]
77
[TestCase("baz", ExpectedResult = "-")]
8-
[TestCase("foobar", ExpectedResult = null)]
98
public string IndexerReturnsChildValue(string key) => (string)data[key];
109

1110
[Test]
12-
public void IndexerOnValueNodeReturnsNull()
11+
public void IndexerThrowsForMissingKey()
1312
{
14-
Assert.That(data["foo"]["bar"], Is.Null);
13+
Assert.That(() => data["foobar"], Throws.TypeOf<KeyNotFoundException>());
14+
}
15+
16+
[Test]
17+
public void IndexerOnValueNodeThrows()
18+
{
19+
Assert.That(() => data["foo"]["bar"], Throws.TypeOf<KeyNotFoundException>());
1520
}
1621

1722
KVObject data;

ValveKeyValue/ValveKeyValue.Test/KVObjectTestCase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public void IndexerSetterWorks()
77
{
88
var obj = KVObject.ListCollection();
99

10-
Assert.That(obj["this_is_set_in_test"], Is.Null);
10+
Assert.That(obj.ContainsKey("this_is_set_in_test"), Is.False);
1111
obj["this_is_set_in_test"] = "some cool data";
1212
Assert.That((string)obj["this_is_set_in_test"], Is.EqualTo("some cool data"));
1313
}
@@ -17,7 +17,7 @@ public void AddCallWorks()
1717
{
1818
var obj = KVObject.ListCollection();
1919

20-
Assert.That(obj["this_is_set_in_test"], Is.Null);
20+
Assert.That(obj.ContainsKey("this_is_set_in_test"), Is.False);
2121
obj.Add("this_is_set_in_test", "some cool data");
2222
Assert.That((string)obj["this_is_set_in_test"], Is.EqualTo("some cool data"));
2323
}

ValveKeyValue/ValveKeyValue.Test/RoundTripTestCase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ public void RemovingChildrenThenSerializingKV1()
221221
{
222222
Assert.That(result.Count, Is.EqualTo(2));
223223
Assert.That((string)result["keep"], Is.EqualTo("yes"));
224-
Assert.That(result["remove"], Is.Null);
224+
Assert.That(result.ContainsKey("remove"), Is.False);
225225
Assert.That((string)result["also_keep"], Is.EqualTo("yes"));
226226
});
227227
}
@@ -243,7 +243,7 @@ public void RemovingChildrenThenSerializingKV3()
243243
{
244244
Assert.That(result.Count, Is.EqualTo(2));
245245
Assert.That((string)result["keep"], Is.EqualTo("yes"));
246-
Assert.That(result["remove"], Is.Null);
246+
Assert.That(result.ContainsKey("remove"), Is.False);
247247
Assert.That((string)result["also_keep"], Is.EqualTo("yes"));
248248
});
249249
}

ValveKeyValue/ValveKeyValue.Test/Test Data/apisurface.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ public class ValveKeyValue.KVDocument
5555
public string get_Name();
5656
public System.Collections.Generic.IEnumerable`1[[ValveKeyValue.KVObject]] get_Values();
5757
public ValveKeyValue.KVValueType get_ValueType();
58-
public ValveKeyValue.KVObject GetChild(string name);
5958
public System.Collections.Generic.IEnumerator`1[[System.Collections.Generic.KeyValuePair`2[[string, ValveKeyValue.KVObject]]]] GetEnumerator();
6059
public int GetHashCode();
6160
public Type GetType();
@@ -178,7 +177,6 @@ public class ValveKeyValue.KVObject
178177
public System.Collections.Generic.IEnumerable`1[[string]] get_Keys();
179178
public System.Collections.Generic.IEnumerable`1[[ValveKeyValue.KVObject]] get_Values();
180179
public ValveKeyValue.KVValueType get_ValueType();
181-
public ValveKeyValue.KVObject GetChild(string name);
182180
public System.Collections.Generic.IEnumerator`1[[System.Collections.Generic.KeyValuePair`2[[string, ValveKeyValue.KVObject]]]] GetEnumerator();
183181
public int GetHashCode();
184182
public Type GetType();

ValveKeyValue/ValveKeyValue.Test/Text/ConditionalTestCase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void ReadsValueWhenConditionalWithAndOnlyMatchesOneSide()
4747
var conditions = new[] { "X360WIDE" };
4848
var data = ParseResource("Text.conditional.vdf", conditions);
4949

50-
Assert.That((string)data["ui type"], Is.Null);
50+
Assert.That(data.ContainsKey("ui type"), Is.False);
5151
}
5252

5353
[Test]

ValveKeyValue/ValveKeyValue.Test/Text/ConditionalsInMultipleObjects.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ public void ShouldCorrectlyDiscardMultipleConditionsAndEndObject()
88
using var stream = TestDataHelper.OpenResource("Text.conditional_discard.vdf");
99
var kv = KVSerializer.Create(KVSerializationFormat.KeyValues1Text).Deserialize(stream);
1010

11-
Assert.That(kv["One"]["Key1"], Is.Null);
12-
Assert.That(kv["Two"]["Key2"], Is.Null);
13-
Assert.That(kv["Three"]["Key3"], Is.Null);
11+
Assert.That(kv["One"].ContainsKey("Key1"), Is.False);
12+
Assert.That(kv["Two"].ContainsKey("Key2"), Is.False);
13+
Assert.That(kv["Three"].ContainsKey("Key3"), Is.False);
1414
}
1515
}
1616
}

0 commit comments

Comments
 (0)