internal static IDictionary <string, object> ToCaseInsensitiveDictionary( this IDictionary <string, object> data, IDictionary <object, IDictionary <string, object> > alreadyWarped ) { if (alreadyWarped.TryGetValue(data, out var existing)) { return(existing); } var result = new CaseWarpingDictionaryWrapper <object>(data, true); alreadyWarped[data] = result; var toReplace = new Dictionary <string, IDictionary <string, object> >(); foreach (var item in data) { var asDict = item.Value as IDictionary <string, object>; if (asDict is null) { continue; } toReplace[item.Key] = asDict.ToCaseInsensitiveDictionary(alreadyWarped); } foreach (var kvp in toReplace) { result[kvp.Key] = kvp.Value; } return(result); }
public void MergeDictionaryWithFallback() { // Arrange var expected = GetRandomString(); var src = new MergeDictionary <string, object>( new DefaultDictionary <string, object>(() => expected) ); Expect(src["BaseUrl"]) .To.Equal(expected); // Act var result = new CaseWarpingDictionaryWrapper <object>(src, true); // Assert Expect(result["BaseUrl"]) .To.Equal(expected); }