public void TestJsonReadOnlyDictionaryToJsonWithStringDictionary()
        {
            // Arrange
            var innerDictionary = new Dictionary <string, string>
            {
                { "one", "1" },
                { "two", "2" },
                { "three", "3" }
            };
            var stringDictionary = new JsonReadOnlyDictionary <string>(innerDictionary);

            // Act
            var toJsonSerializerSettings = new JsonSerializerSettings
            {
                Formatting = Formatting.Indented
            };
            var json = stringDictionary.ToJson(toJsonSerializerSettings);

            this.Output.WriteLine(json);

            // Assert
            Assert.NotNull(json);
            Assert.False(String.IsNullOrEmpty(json));

            var jObject = JObject.Parse(json);

            Assert.NotNull(jObject);
            Assert.Equal(3, jObject.Count);

            Assert.Equal("1", (string)jObject.SelectToken("one"));
            Assert.Equal("2", (string)jObject.SelectToken("two"));
            Assert.Equal("3", (string)jObject.SelectToken("three"));
        }
        public void TestJsonReadOnlyDictionaryKeyComparisonIsCaseInsensitive()
        {
            // Arrange
            var innerDictionary = new Dictionary <string, int>
            {
                { "one", 1 }
            };
            var jsonDictionary = new JsonReadOnlyDictionary <int>(innerDictionary);

            // Act

            // ReSharper disable InconsistentNaming
            var oneKeyExists = jsonDictionary.ContainsKey("one");
            var OneKeyExists = jsonDictionary.ContainsKey("One");
            var ONEKeyExists = jsonDictionary.ContainsKey("ONE");

            var twoKeyExists = jsonDictionary.ContainsKey("two");
            var TwoKeyExists = jsonDictionary.ContainsKey("Two");
            var TWOKeyExists = jsonDictionary.ContainsKey("TWO");

            // ReSharper restore InconsistentNaming

            // Assert
            Assert.True(oneKeyExists);
            Assert.True(OneKeyExists);
            Assert.True(ONEKeyExists);

            Assert.False(twoKeyExists);
            Assert.False(TwoKeyExists);
            Assert.False(TWOKeyExists);
        }
        public void TestJsonReadOnlyDictionaryToJsonWithObjectDictionary()
        {
            // Arrange
            var emptyObject  = new Empty();
            var personObject = new Person
            {
                PersonId  = "1234",
                FirstName = "John",
                LastName  = "Doe"
            };
            var innerDictionary = new Dictionary <string, object>
            {
                { "oneAsLong", 1 },
                { "twoAsString", "2" },
                { "emptyObject", emptyObject },
                { "personObject", personObject },
            };
            var stringDictionary = new JsonReadOnlyDictionary <object>(innerDictionary);

            // Act
            var toJsonSerializerSettings = new JsonSerializerSettings
            {
                Formatting       = Formatting.Indented,
                TypeNameHandling = TypeNameHandling.Auto
            };
            var json = stringDictionary.ToJson(toJsonSerializerSettings);

            this.Output.WriteLine(json);

            // Assert
            Assert.NotNull(json);
            Assert.False(String.IsNullOrEmpty(json));

            var jObject = JObject.Parse(json);

            Assert.NotNull(jObject);
            Assert.Equal(4, jObject.Count);

            Assert.Equal(1, (long)jObject.SelectToken("oneAsLong"));

            Assert.Equal("2", (string)jObject.SelectToken("twoAsString"));

            var jEmptyObject = (JObject)jObject.SelectToken("emptyObject");

            Assert.Equal(1 + 0, jEmptyObject.Count); // 1 + is for the $type property

            var jPersonObject = (JObject)jObject.SelectToken("personObject");

            Assert.Equal(1 + 3, jPersonObject.Count); // 1 + is for the $type property

            Assert.Equal("1234", (string)jPersonObject.SelectToken(personObject.GetMemberName(x => x.PersonId)));
            Assert.Equal("John", (string)jPersonObject.SelectToken(personObject.GetMemberName(x => x.FirstName)));
            Assert.Equal("Doe", (string)jPersonObject.SelectToken(personObject.GetMemberName(x => x.LastName)));
        }
        public void TestJsonReadOnlyDictionaryToJsonWithEmptyDictionary()
        {
            // Arrange
            var empty = new JsonReadOnlyDictionary <object>(new Dictionary <string, object>());

            // Act
            var toJsonSerializerSettings = new JsonSerializerSettings
            {
                Formatting = Formatting.Indented
            };
            var json = empty.ToJson(toJsonSerializerSettings);

            this.Output.WriteLine(json);

            // Assert
            Assert.NotNull(json);
            Assert.False(String.IsNullOrEmpty(json));

            var jObject = JObject.Parse(json);

            Assert.NotNull(jObject);
            Assert.Equal(0, jObject.Count);
        }