Beispiel #1
0
        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);
        }