public void ConvertJson2Bson_HelloWorld_RoundTripsJsonToBsonAndBack() { // input from example at http://bsonspec.org/#/specification var inputText = @"{ ""hello"" : ""world"" }"; var expectedBinary = Encoding.UTF8.GetBytes( "\x16\x00\x00\x00\x02hello\x00"+ "\x06\x00\x00\x00world\x00\x00"); var expectedText = @"{""hello"":""world""}"; var jsonTokenizer = new JsonReader.JsonTokenizer(); var tokens1 = jsonTokenizer.GetTokens(inputText); var bsonFormatter = new BsonWriter.BsonFormatter(); var actualBinary = bsonFormatter.Format(tokens1); Assert.Equal(expectedBinary, actualBinary); var bsonTokenizer = new BsonReader.BsonTokenizer(); var tokens2 = bsonTokenizer.GetTokens(actualBinary); var jsonFormatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint = false }); var actualText = jsonFormatter.Format(tokens2); Assert.Equal(expectedText, actualText); }
public void ConvertJson2Xml_HelloWorld_RoundTripsJsonToXmlAndBack() { // input from example at http://xmlspec.org/#/specification var inputJson = @"{ ""hello"" : ""world"" }"; var expectedXml = @"<object><hello>world</hello></object>"; var jsonTokenizer = new JsonReader.JsonTokenizer(); var tokens1 = jsonTokenizer.GetTokens(inputJson); var writerSettings = new DataWriterSettings { PrettyPrint = false }; var xmlFormatter = new TransformFormatter<ModelTokenType, MarkupTokenType>(new XmlWriter.XmlFormatter(writerSettings), new XmlWriter.XmlOutTransformer(writerSettings)); var actualXml = xmlFormatter.Format(tokens1); Assert.Equal(expectedXml, actualXml); var expectedJson = @"{""hello"":""world""}"; var readerSettings = new DataReaderSettings(writerSettings.Resolver); var xmlTokenizer = new TransformTokenizer<MarkupTokenType, ModelTokenType>(new XmlReader.XmlTokenizer(), new XmlReader.XmlInTransformer(readerSettings)); var tokens2 = xmlTokenizer.GetTokens(actualXml); var jsonFormatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint = false }); var actualJson = jsonFormatter.Format(tokens2); Assert.Equal(expectedJson, actualJson); }
public void Format_ArrayEmptyPrettyPrint_ReturnsPrettyPrintedEmptyArray() { var input = new[] { ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayEnd }; const string expected = "[]"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint=true }); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void ConvertJson2Xml_ArrayAsProperty_RoundTripsJsonToXmlAndBack() { // input from example at http://xmlspec.org/#/specification var inputJson = @"{ ""BSON"" : [ ""awesome"", 5.05, 1986 ] }"; var expectedXml = @"<object><BSON><item>awesome</item><item>5.05</item><item>1986</item></BSON></object>"; var jsonTokenizer = new JsonReader.JsonTokenizer(); var tokens1 = jsonTokenizer.GetTokens(inputJson); var writerSettings = new DataWriterSettings { PrettyPrint = false }; var xmlFormatter = new TransformFormatter <ModelTokenType, MarkupTokenType>(new XmlWriter.XmlFormatter(writerSettings), new XmlWriter.XmlOutTransformer(writerSettings)); var actualXml = xmlFormatter.Format(tokens1); Assert.Equal(expectedXml, actualXml); var expectedJson = @"{""BSON"":[""awesome"",5.05,1986]}"; var readerSettings = new DataReaderSettings(writerSettings.Resolver); var xmlTokenizer = new TransformTokenizer <MarkupTokenType, ModelTokenType>(new XmlReader.XmlTokenizer(), new XmlReader.XmlInTransformer(readerSettings)); var tokens2 = xmlTokenizer.GetTokens(actualXml); var jsonFormatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint = false }); var actualJson = jsonFormatter.Format(tokens2); Assert.Equal(expectedJson, actualJson); }
public void ConvertJson2Xml_BooleanValue_RoundTripsJsonToXmlAndBack() { // input from example at http://codebetter.com/blogs/karlseguin/archive/2010/03/05/xml-serialization.aspx var inputJson = @"{valid:true}"; var expectedXml = @"<object> <valid>true</valid> </object>"; var jsonTokenizer = new JsonReader.JsonTokenizer(); var tokens1 = jsonTokenizer.GetTokens(inputJson); var writerSettings = new DataWriterSettings { PrettyPrint = true }; var xmlFormatter = new TransformFormatter <ModelTokenType, MarkupTokenType>(new XmlWriter.XmlFormatter(writerSettings), new XmlWriter.XmlOutTransformer(writerSettings)); var actualXml = xmlFormatter.Format(tokens1); Assert.Equal(expectedXml, actualXml); var expectedJson = @"{ ""valid"" : ""true"" }"; var readerSettings = new DataReaderSettings(writerSettings.Resolver); var xmlTokenizer = new TransformTokenizer <MarkupTokenType, ModelTokenType>(new XmlReader.XmlTokenizer(), new XmlReader.XmlInTransformer(readerSettings)); var tokens2 = xmlTokenizer.GetTokens(actualXml); var jsonFormatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint = true }); var actualJson = jsonFormatter.Format(tokens2); Assert.Equal(expectedJson, actualJson); }
public void Format_ObjectEmpty_ReturnsEmptyObject() { var input = new[] { ModelGrammar.TokenObjectBeginUnnamed, ModelGrammar.TokenObjectEnd }; const string expected = @"{}"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_ArrayNestedDeeplyPrettyPrint_ReturnsExpectedPrettyPrintedArray() { // input from pass2.json in test suite at http://www.json.org/JSON_checker/ var input = new[] { ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenPrimitive("Not too deep"), ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenArrayEnd }; const string expected = @"[ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ""Not too deep"" ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint=true }); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_NumberTokenNegLong_ReturnsNumber() { var input = new[] { ModelGrammar.TokenPrimitive(-34L) }; const string expected = "-34"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_StringTokenTabChar_ReturnsString() { // input from fail25.json in test suite at http://www.json.org/JSON_checker/ var input = new[] { ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenPrimitive("\ttab\tcharacter\tin\tstring\t"), ModelGrammar.TokenArrayEnd }; const string expected = @"[""\ttab\tcharacter\tin\tstring\t""]"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); // this is not allowed according to strict JSON, but we're following Postel's Law Assert.Equal(expected, actual); }
public void Format_StringTokenEscapedChars_ReturnsString() { var input = new[] { ModelGrammar.TokenPrimitive("\\\b\f\n\r\t\u0123\u4567\u89AB\uCDEF\uabcd\uef4A\"") }; const string expected = @"""\\\b\f\n\r\t\u0123\u4567\u89AB\uCDEF\uABCD\uEF4A\"""""; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_StringTokenEmpty_ReturnsEmptyString() { var input = new[] { ModelGrammar.TokenPrimitive(String.Empty) }; const string expected = "\"\""; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void JsonFormatterFormat_EnumFromNumber_ReturnsEnum() { var input = new[] { ModelGrammar.TokenPrimitive((int)ExampleEnum.Three) }; var expected = "3"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings(new JsonResolverStrategy())); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void JsonFormatterFormat_EnumWithJsonName_ReturnsEnum() { var input = new[] { ModelGrammar.TokenPrimitive(ExampleEnum.Two) }; var expected = @"""yellow"""; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings(new JsonResolverStrategy())); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void ConvertJson2Bson_ArrayAsProperty_RoundTripsJsonToBsonAndBack() { // input from example at http://bsonspec.org/#/specification var inputText = @"{ ""BSON"" : [ ""awesome"", 5.05, 1986 ] }"; var expectedBinary = new byte[] { 0x31, 0x00, 0x00, 0x00, 0x04, (byte)'B', (byte)'S', (byte)'O', (byte)'N', 0x00, 0x26, 0x00, 0x00, 0x00, 0x02, (byte)'0', 0, 0x08, 0x00, 0x00, 0x00, (byte)'a', (byte)'w', (byte)'e', (byte)'s', (byte)'o', (byte)'m', (byte)'e', 0x00, 0x01, (byte)'1', 0, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x14, 0x40, 0x10, (byte)'2', 0, 0xC2, 0x07, 0x00, 0x00, 0x00, 0x00 }; var expectedText = @"{""BSON"":[""awesome"",5.05,1986]}"; var jsonTokenizer = new JsonReader.JsonTokenizer(); var tokens1 = jsonTokenizer.GetTokens(inputText); var bsonFormatter = new BsonWriter.BsonFormatter(); var actualBinary = bsonFormatter.Format(tokens1); Assert.Equal(expectedBinary, actualBinary); var bsonTokenizer = new BsonReader.BsonTokenizer(); var tokens2 = bsonTokenizer.GetTokens(actualBinary); var jsonFormatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint = false }); var actualText = jsonFormatter.Format(tokens2); Assert.Equal(expectedText, actualText); }
public void Format_TimeSpan_ReturnsNumber() { var input = new[] { ModelGrammar.TokenPrimitive(new TimeSpan(365, 23, 59, 59, 999)) }; const string expected = @"316223999990000"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void ConvertJson2Bson_BooleanValue_RoundTripsJsonToBsonAndBack() { // input from example at http://codebetter.com/blogs/karlseguin/archive/2010/03/05/bson-serialization.aspx var inputText = @"{valid:true}"; var expectedBinary = new byte[] { 13, 0, 0, 0, 8, 118, 97, 108, 105, 100, 0, 1, 0 }; var expectedText = @"{ ""valid"" : true }"; var jsonTokenizer = new JsonReader.JsonTokenizer(); var tokens1 = jsonTokenizer.GetTokens(inputText); var bsonFormatter = new BsonWriter.BsonFormatter(); var actualBinary = bsonFormatter.Format(tokens1); Assert.Equal(expectedBinary, actualBinary); var bsonTokenizer = new BsonReader.BsonTokenizer(); var tokens2 = bsonTokenizer.GetTokens(actualBinary); var jsonFormatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint = true }); var actualText = jsonFormatter.Format(tokens2); Assert.Equal(expectedText, actualText); }
public void ConvertJson2Xml_ComplexGraph_RoundTripsJsonToXmlAndBack() { // input from pass1.json in test suite at http://www.json.org/JSON_checker/ const string inputJson = @"[ ""JSON Test Pattern pass1"", {""object with 1 member"":[""array with 1 element""]}, {}, [], -42, true, false, null, { ""integer"": 1234567890, ""real"": -9876.543210, ""e"": 0.123456789e-12, ""E"": 1.234567890E+34, """": 23456789012E66, ""zero"": 0, ""one"": 1, ""space"": "" "", ""quote"": ""\"""", ""backslash"": ""\\"", ""controls"": ""\b\f\n\r\t"", ""slash"": ""/ & \/"", ""alpha"": ""abcdefghijklmnopqrstuvwyz"", ""ALPHA"": ""ABCDEFGHIJKLMNOPQRSTUVWYZ"", ""digit"": ""0123456789"", ""0123456789"": ""digit"", ""special"": ""`1~!@#$%^&*()_+-={':[,]}|;.</>?"", ""hex"": ""\u0123\u4567\u89AB\uCDEF\uabcd\uef4A"", ""true"": true, ""false"": false, ""null"": null, ""array"":[ ], ""object"":{ }, ""address"": ""50 St. James Street"", ""url"": ""http://www.JSON.org/"", ""comment"": ""// /* <!-- --"", ""# -- --> */"": "" "", "" s p a c e d "" :[1,2 , 3 , 4 , 5 , 6 ,7 ],""compact"":[1,2,3,4,5,6,7], ""jsontext"": ""{\""object with 1 member\"":[\""array with 1 element\""]}"", ""quotes"": """ \u0022 %22 0x22 034 """, ""\/\\\""\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"" : ""A key can be any string"" }, 0.5 ,98.6 , 99.44 , 1066, 1e1, 0.1e1, 1e-1, 1e00,2e+00,2e-00 ,""rosebud""]"; var expectedXml = @"<array> <item>JSON Test Pattern pass1</item> <item> <object_x0020_with_x0020_1_x0020_member> <item>array with 1 element</item> </object_x0020_with_x0020_1_x0020_member> </item> <item /> <item /> <item>-42</item> <item>true</item> <item>false</item> <item /> <item> <integer>1234567890</integer> <real>-9876.54321</real> <e>1.23456789e-13</e> <E>1.23456789e+34</E> <double>2.3456789012e+76</double> <zero>0</zero> <one>1</one> <space> </space> <quote>""</quote> <backslash>\</backslash> <controls>" + "\n\r\t" + @"</controls> <slash>/ & /</slash> <alpha>abcdefghijklmnopqrstuvwyz</alpha> <ALPHA>ABCDEFGHIJKLMNOPQRSTUVWYZ</ALPHA> <digit>0123456789</digit> <_x0030_123456789>digit</_x0030_123456789> <special>`1~!@#$%^&*()_+-={':[,]}|;.</>?</special> <hex>" + "\u0123\u4567\u89AB\uCDEF\uABCD\uEF4A" + @"</hex> <true>true</true> <false>false</false> <null /> <array /> <object /> <address>50 St. James Street</address> <url>http://www.JSON.org/</url> <comment>// /* <!-- --</comment> <_x0023__x0020_--_x0020_--_x003E__x0020__x002A__x002F_> </_x0023__x0020_--_x0020_--_x003E__x0020__x002A__x002F_> <_x0020_s_x0020_p_x0020_a_x0020_c_x0020_e_x0020_d_x0020_> <item>1</item> <item>2</item> <item>3</item> <item>4</item> <item>5</item> <item>6</item> <item>7</item> </_x0020_s_x0020_p_x0020_a_x0020_c_x0020_e_x0020_d_x0020_> <compact> <item>1</item> <item>2</item> <item>3</item> <item>4</item> <item>5</item> <item>6</item> <item>7</item> </compact> <jsontext>{""object with 1 member"":[""array with 1 element""]}</jsontext> <quotes>&#34; "" %22 0x22 034 &#x22;</quotes> <" + "_x002F__x005C__x0022_\uCAFE\uBABE_xAB98__xFCDE_\uBCDA_xEF4A__x0008__x000C__x000A__x000D__x0009__x0060_1_x007E__x0021__x0040__x0023__x0024__x0025__x005E__x0026__x002A__x0028__x0029___x002B_-_x003D__x005B__x005D__x007B__x007D__x007C__x003B__x003A__x0027__x002C_._x002F__x003C__x003E__x003F_" + @">A key can be any string</" + "_x002F__x005C__x0022_\uCAFE\uBABE_xAB98__xFCDE_\uBCDA_xEF4A__x0008__x000C__x000A__x000D__x0009__x0060_1_x007E__x0021__x0040__x0023__x0024__x0025__x005E__x0026__x002A__x0028__x0029___x002B_-_x003D__x005B__x005D__x007B__x007D__x007C__x003B__x003A__x0027__x002C_._x002F__x003C__x003E__x003F_" + @"> </item> <item>0.5</item> <item>98.6</item> <item>99.44</item> <item>1066</item> <item>10</item> <item>1</item> <item>0.1</item> <item>1</item> <item>2</item> <item>2</item> <item>rosebud</item> </array>"; var jsonTokenizer = new JsonReader.JsonTokenizer(); var tokens1 = jsonTokenizer.GetTokens(inputJson); var writerSettings = new DataWriterSettings { PrettyPrint = true }; var xmlFormatter = new TransformFormatter <ModelTokenType, MarkupTokenType>(new XmlWriter.XmlFormatter(writerSettings), new XmlWriter.XmlOutTransformer(writerSettings)); var actualXml = xmlFormatter.Format(tokens1); Assert.Equal(expectedXml, actualXml); const string expectedJson = @"[""JSON Test Pattern pass1"",{""object with 1 member"":[""array with 1 element""]},{},[],-42,true,false,null,{""integer"":1234567890,""real"":-9876.54321,""e"":1.23456789e-13,""E"":1.23456789e+34,"""":2.3456789012e+76,""zero"":0,""one"":1,""space"":"" "",""quote"":""\"""",""backslash"":""\\"",""controls"":""\b\f\n\r\t"",""slash"":""/ & /"",""alpha"":""abcdefghijklmnopqrstuvwyz"",""ALPHA"":""ABCDEFGHIJKLMNOPQRSTUVWYZ"",""digit"":""0123456789"",""0123456789"":""digit"",""special"":""`1~!@#$%^&*()_+-={':[,]}|;.\u003C/>?"",""hex"":""\u0123\u4567\u89AB\uCDEF\uABCD\uEF4A"",""true"":true,""false"":false,""null"":null,""array"":[],""object"":{},""address"":""50 St. James Street"",""url"":""http://www.JSON.org/"",""comment"":""// /* \u003C!-- --"",""# -- --> */"":"" "","" s p a c e d "":[1,2,3,4,5,6,7],""compact"":[1,2,3,4,5,6,7],""jsontext"":""{\""object with 1 member\"":[\""array with 1 element\""]}"",""quotes"":""" \"" %22 0x22 034 """,""/\\\""\uCAFE\uBABE\uAB98\uFCDE\uBCDA\uEF4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./\u003C>?"":""A key can be any string""},0.5,98.6,99.44,1066,10,1,0.1,1,2,2,""rosebud""]"; var readerSettings = new DataReaderSettings(writerSettings.Resolver); var xmlTokenizer = new TransformTokenizer <MarkupTokenType, ModelTokenType>(new XmlReader.XmlTokenizer(), new XmlReader.XmlInTransformer(readerSettings)); var tokens2 = xmlTokenizer.GetTokens(actualXml); var jsonFormatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint = false }); var actualJson = jsonFormatter.Format(tokens2); Assert.Equal(expectedJson, actualJson); }
public void Format_ObjectOnePropertyPrettyPrint_ReturnsPrettyPrintedSimpleObject() { var input = new[] { ModelGrammar.TokenObjectBeginUnnamed, ModelGrammar.TokenProperty("key"), ModelGrammar.TokenPrimitive("value"), ModelGrammar.TokenObjectEnd }; const string expected = @"{ ""key"" : ""value"" }"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint = true }); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_ObjectOneNamespacedProperty_CorrectlyIgnoresNamespace() { var input = new[] { ModelGrammar.TokenObjectBeginUnnamed, ModelGrammar.TokenProperty(new DataName("key", null, "http://json.org")), ModelGrammar.TokenPrimitive("value"), ModelGrammar.TokenObjectEnd }; const string expected = @"{""key"":""value""}"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_ObjectNestedPrettyPrint_ReturnsPrettyPrintedNestedObject() { // input from pass3.json in test suite at http://www.json.org/JSON_checker/ var input = new[] { ModelGrammar.TokenObjectBeginUnnamed, ModelGrammar.TokenProperty("JSON Test Pattern pass3"), ModelGrammar.TokenObjectBeginUnnamed, ModelGrammar.TokenProperty("The outermost value"), ModelGrammar.TokenPrimitive("must be an object or array."), ModelGrammar.TokenProperty("In this test"), ModelGrammar.TokenPrimitive("It is an object."), ModelGrammar.TokenObjectEnd, ModelGrammar.TokenObjectEnd }; const string expected = @"{ ""JSON Test Pattern pass3"" : { ""The outermost value"" : ""must be an object or array."", ""In this test"" : ""It is an object."" } }"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint = true }); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_EmptyInput_ReturnsEmptyString() { var input = Enumerable.Empty<Token<ModelTokenType>>(); const string expected = ""; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_StringTokenSimple_ReturnsString() { // input from fail1.json in test suite at http://www.json.org/JSON_checker/ var input = new[] { ModelGrammar.TokenPrimitive("A JSON payload should be an object or array, not a string.") }; const string expected = @"""A JSON payload should be an object or array, not a string."""; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); // this is not allowed according to strict JSON, but we're following Postel's Law Assert.Equal(expected, actual); }
public void Format_NumberTokenOverflowLong_ReturnsString() { var input = new[] { ModelGrammar.TokenPrimitive(9223372036854775800L) }; const string expected = @"""9223372036854775800"""; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_StringTokenUnescapedSingleQuote_ReturnsString() { var input = new[] { ModelGrammar.TokenPrimitive("unescaped ' single quote"), }; const string expected = @"""unescaped ' single quote"""; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_ArrayOneItem_ReturnsExpectedArray() { var input = new[] { ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenNull, ModelGrammar.TokenArrayEnd }; const string expected = "[null]"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_NumberTokenNegNoLeadingDigitDouble_ReturnsNumber() { var input = new[] { ModelGrammar.TokenPrimitive(-.123456) }; const string expected = "-0.123456"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_StringTokenWithEmoji_ReturnsStringWithEmoji() { var input = new[] { ModelGrammar.TokenPrimitive("Text with 😜 emoji 🎉"), }; const string expected = @"""Text with \uD83D\uDE1C emoji \uD83C\uDF89"""; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_NullInput_ThrowsArgumentNullException() { var input = (IEnumerable<Token<ModelTokenType>>)null; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); ArgumentNullException ex = Assert.Throws<ArgumentNullException>( delegate { var actual = formatter.Format(input); }); // verify exception is coming from expected param Assert.Equal("tokens", ex.ParamName); }
public void Format_TimeSpanMaxValue_ReturnsString() { var input = new[] { ModelGrammar.TokenPrimitive(TimeSpan.MaxValue) }; const string expected = @"""9223372036854775807"""; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_NumberTokenOverflowDecimal_ReturnsString() { var input = new[] { ModelGrammar.TokenPrimitive(79228162514264337593543950300m) }; const string expected = @"""79228162514264337593543950300"""; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings()); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Ctor_NullSettings_ThrowsArgumentNullException() { ArgumentNullException ex = Assert.Throws<ArgumentNullException>( delegate { var formatter = new JsonWriter.JsonFormatter(null); }); // verify exception is coming from expected param Assert.Equal("settings", ex.ParamName); }
public void Format_GraphComplexPrettyPrint_ReturnsPrettyPrintedGraph() { // input from pass1.json in test suite at http://www.json.org/JSON_checker/ var input = new[] { ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenPrimitive("JSON Test Pattern pass1"), ModelGrammar.TokenObjectBeginUnnamed, ModelGrammar.TokenProperty("object with 1 member"), ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenPrimitive("array with 1 element"), ModelGrammar.TokenArrayEnd, ModelGrammar.TokenObjectEnd, ModelGrammar.TokenObjectBeginUnnamed, ModelGrammar.TokenObjectEnd, ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenPrimitive(-42), ModelGrammar.TokenTrue, ModelGrammar.TokenFalse, ModelGrammar.TokenNull, ModelGrammar.TokenObjectBeginUnnamed, ModelGrammar.TokenProperty("integer"), ModelGrammar.TokenPrimitive(1234567890), ModelGrammar.TokenProperty("real"), ModelGrammar.TokenPrimitive(-9876.543210), ModelGrammar.TokenProperty("e"), ModelGrammar.TokenPrimitive(0.123456789e-12), ModelGrammar.TokenProperty("E"), ModelGrammar.TokenPrimitive(1.234567890E+34), ModelGrammar.TokenProperty(""), ModelGrammar.TokenPrimitive(23456789012E66), ModelGrammar.TokenProperty("zero"), ModelGrammar.TokenPrimitive(0), ModelGrammar.TokenProperty("one"), ModelGrammar.TokenPrimitive(1), ModelGrammar.TokenProperty("space"), ModelGrammar.TokenPrimitive(" "), ModelGrammar.TokenProperty("quote"), ModelGrammar.TokenPrimitive("\""), ModelGrammar.TokenProperty("backslash"), ModelGrammar.TokenPrimitive("\\"), ModelGrammar.TokenProperty("controls"), ModelGrammar.TokenPrimitive("\b\f\n\r\t"), ModelGrammar.TokenProperty("slash"), ModelGrammar.TokenPrimitive("/ & /"), ModelGrammar.TokenProperty("alpha"), ModelGrammar.TokenPrimitive("abcdefghijklmnopqrstuvwyz"), ModelGrammar.TokenProperty("ALPHA"), ModelGrammar.TokenPrimitive("ABCDEFGHIJKLMNOPQRSTUVWYZ"), ModelGrammar.TokenProperty("digit"), ModelGrammar.TokenPrimitive("0123456789"), ModelGrammar.TokenProperty("0123456789"), ModelGrammar.TokenPrimitive("digit"), ModelGrammar.TokenProperty("special"), ModelGrammar.TokenPrimitive("`1~!@#$%^&*()_+-={':[,]}|;.</>?"), ModelGrammar.TokenProperty("hex"), ModelGrammar.TokenPrimitive("\u0123\u4567\u89AB\uCDEF\uabcd\uef4A"), ModelGrammar.TokenProperty("true"), ModelGrammar.TokenTrue, ModelGrammar.TokenProperty("false"), ModelGrammar.TokenFalse, ModelGrammar.TokenProperty("null"), ModelGrammar.TokenNull, ModelGrammar.TokenProperty("array"), ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenArrayEnd, ModelGrammar.TokenProperty("object"), ModelGrammar.TokenObjectBeginUnnamed, ModelGrammar.TokenObjectEnd, ModelGrammar.TokenProperty("address"), ModelGrammar.TokenPrimitive("50 St. James Street"), ModelGrammar.TokenProperty("url"), ModelGrammar.TokenPrimitive("http://www.JSON.org/"), ModelGrammar.TokenProperty("comment"), ModelGrammar.TokenPrimitive("// /* <!-- --"), ModelGrammar.TokenProperty("# -- --> */"), ModelGrammar.TokenPrimitive(" "), ModelGrammar.TokenProperty(" s p a c e d "), ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenPrimitive(1), ModelGrammar.TokenPrimitive(2), ModelGrammar.TokenPrimitive(3), ModelGrammar.TokenPrimitive(4), ModelGrammar.TokenPrimitive(5), ModelGrammar.TokenPrimitive(6), ModelGrammar.TokenPrimitive(7), ModelGrammar.TokenArrayEnd, ModelGrammar.TokenProperty("compact"), ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenPrimitive(1), ModelGrammar.TokenPrimitive(2), ModelGrammar.TokenPrimitive(3), ModelGrammar.TokenPrimitive(4), ModelGrammar.TokenPrimitive(5), ModelGrammar.TokenPrimitive(6), ModelGrammar.TokenPrimitive(7), ModelGrammar.TokenArrayEnd, ModelGrammar.TokenProperty("jsontext"), ModelGrammar.TokenPrimitive("{\"object with 1 member\":[\"array with 1 element\"]}"), ModelGrammar.TokenProperty("quotes"), ModelGrammar.TokenPrimitive("" \u0022 %22 0x22 034 ""), ModelGrammar.TokenProperty("/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"), ModelGrammar.TokenPrimitive("A key can be any string"), ModelGrammar.TokenObjectEnd, ModelGrammar.TokenPrimitive(0.5), ModelGrammar.TokenPrimitive(98.6), ModelGrammar.TokenPrimitive(99.44), ModelGrammar.TokenPrimitive(1066), ModelGrammar.TokenPrimitive(10.0), ModelGrammar.TokenPrimitive(1.0), ModelGrammar.TokenPrimitive(0.1), ModelGrammar.TokenPrimitive(1.0), ModelGrammar.TokenPrimitive(2.0), ModelGrammar.TokenPrimitive(2.0), ModelGrammar.TokenPrimitive("rosebud"), ModelGrammar.TokenArrayEnd }; const string expected = @"[ ""JSON Test Pattern pass1"", { ""object with 1 member"" : [ ""array with 1 element"" ] }, {}, [], -42, true, false, null, { ""integer"" : 1234567890, ""real"" : -9876.54321, ""e"" : 1.23456789E-13, ""E"" : 1.23456789E+34, """" : 2.3456789012E+76, ""zero"" : 0, ""one"" : 1, ""space"" : "" "", ""quote"" : ""\"""", ""backslash"" : ""\\"", ""controls"" : ""\b\f\n\r\t"", ""slash"" : ""/ & /"", ""alpha"" : ""abcdefghijklmnopqrstuvwyz"", ""ALPHA"" : ""ABCDEFGHIJKLMNOPQRSTUVWYZ"", ""digit"" : ""0123456789"", ""0123456789"" : ""digit"", ""special"" : ""`1~!@#$%^&*()_+-={':[,]}|;.</>?"", ""hex"" : ""\u0123\u4567\u89AB\uCDEF\uABCD\uEF4A"", ""true"" : true, ""false"" : false, ""null"" : null, ""array"" : [], ""object"" : {}, ""address"" : ""50 St. James Street"", ""url"" : ""http://www.JSON.org/"", ""comment"" : ""// /* <!-- --"", ""# -- --> */"" : "" "", "" s p a c e d "" : [ 1, 2, 3, 4, 5, 6, 7 ], ""compact"" : [ 1, 2, 3, 4, 5, 6, 7 ], ""jsontext"" : ""{\""object with 1 member\"":[\""array with 1 element\""]}"", ""quotes"" : """ \"" %22 0x22 034 """, ""/\\\""\uCAFE\uBABE\uAB98\uFCDE\uBCDA\uEF4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"" : ""A key can be any string"" }, 0.5, 98.6, 99.44, 1066, 10, 1, 0.1, 1, 2, 2, ""rosebud"" ]"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint=true }); var actual = formatter.Format(input); Assert.Equal(expected, actual); }
public void Format_ArrayMultiItemPrettyPrint_ReturnsExpectedPrettyPrintedArray() { var input = new[] { ModelGrammar.TokenArrayBeginUnnamed, ModelGrammar.TokenPrimitive(0), ModelGrammar.TokenNull, ModelGrammar.TokenFalse, ModelGrammar.TokenTrue, ModelGrammar.TokenArrayEnd }; const string expected = @"[ 0, null, false, true ]"; var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings { PrettyPrint=true }); var actual = formatter.Format(input); Assert.Equal(expected, actual); }