public void WriteJson()
        {
            JsonObject o = JsonObject.Parse(@"{
  ""CPU"": ""Intel"",
  ""Drives"": [
    ""DVD read/writer"",
    ""500 gigabyte hard drive""
  ]
}");

            StringWriter sw = new StringWriter();
            JsonTextWriter writer = new JsonTextWriter(sw);

            JsonValueConverter converter = new JsonValueConverter();
            converter.WriteJson(writer, o, null);

            string json = sw.ToString();

            Assert.Equal(@"{""Drives"":[""DVD read/writer"",""500 gigabyte hard drive""],""CPU"":""Intel""}", json);
        }
        public void ReadJsonComments()
        {
            string json = @"{/*comment!*/
  ""CPU"": ""Intel"",/*comment!*/
  ""Drives"": [/*comment!*/
    ""DVD read/writer"",
    /*comment!*/""500 gigabyte hard drive""
  ]/*comment!*/
}";

            JsonTextReader writer = new JsonTextReader(new StringReader(json));

            JsonValueConverter converter = new JsonValueConverter();
            JsonObject o = (JsonObject) converter.ReadJson(writer, typeof (JsonObject), null, null);

            Assert.Equal(2, o.Count);
            Assert.Equal("Intel", o.GetNamedString("CPU"));
            Assert.Equal("DVD read/writer", o.GetNamedArray("Drives")[0].GetString());
            Assert.Equal("500 gigabyte hard drive", o.GetNamedArray("Drives")[1].GetString());
        }
        public void ReadJsonBadJsonType()
        {
            string json = "null";

            JsonTextReader writer = new JsonTextReader(new StringReader(json));

            JsonValueConverter converter = new JsonValueConverter();

            AssertException.Throws<JsonException>(() =>
            {
                converter.ReadJson(writer, typeof (JsonObject), null, null);
            },
                "Could not convert 'Windows.Data.Json.JsonValue' to 'Windows.Data.Json.JsonObject'. Path '', line 1, position 4.");
        }
        public void ReadJsonUnexpectedEndInObject()
        {
            string json = "{'hi':";

            JsonTextReader writer = new JsonTextReader(new StringReader(json));

            JsonValueConverter converter = new JsonValueConverter();

            AssertException.Throws<JsonException>(() =>
            {
                converter.ReadJson(writer, typeof (JsonValue), null, null);
            }, "Unexpected end. Path 'hi', line 1, position 6.");
        }
        public void ReadJsonUnexpectedEndAfterComment()
        {
            string json = "[/*comment!*/";

            JsonTextReader writer = new JsonTextReader(new StringReader(json));

            JsonValueConverter converter = new JsonValueConverter();

            AssertException.Throws<JsonException>(() =>
            {
                converter.ReadJson(writer, typeof (JsonValue), null, null);
            }, "Unexpected end. Path '', line 1, position 13.");
        }
        public void ReadJsonUnsupportedValue()
        {
            string json = "undefined";

            JsonTextReader writer = new JsonTextReader(new StringReader(json));

            JsonValueConverter converter = new JsonValueConverter();

            AssertException.Throws<JsonException>(() =>
            {
                converter.ReadJson(writer, typeof (JsonValue), null, null);
            }, "Unexpected or unsupported token: Undefined. Path '', line 1, position 9.");
        }
        public void ReadJsonNullValue()
        {
            string json = "null";

            JsonTextReader writer = new JsonTextReader(new StringReader(json));

            JsonValueConverter converter = new JsonValueConverter();
            JsonValue v = (JsonValue) converter.ReadJson(writer, typeof (JsonValue), null, null);

            Assert.Equal(JsonValueType.Null, v.ValueType);
        }