##// END OF EJS Templates
Refactoring...
Refactoring Added <array> element to injection parameters Working on registrations of factories

File last commit:

r265:74e048cbaac8 v3.0.10 v3
r277:963b17c275be v3
Show More
JsonTests.cs
191 lines | 8.2 KiB | text/x-csharp | CSharpLexer
using Xunit;
using System;
using Implab.Automaton;
using Implab.Xml;
using System.Xml;
using Implab.Formats;
using Implab.Formats.Json;
using System.IO;
using Implab.Test.Model;
namespace Implab.Test {
public class JsonTests {
[Fact]
public void TestScannerValidTokens() {
using (var scanner = JsonStringScanner.Create(@"9123, -123, 0, 0.1, -0.2, -0.1e3, 1.3E-3, ""some \t\n\u0020 text"", literal []{}:")) {
Tuple<JsonTokenType, object>[] expexted = {
new Tuple<JsonTokenType,object>(JsonTokenType.Number, "9123"),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, null),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, "-123"),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, null),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, "0"),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, null),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, "0.1"),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, null),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, "-0.2"),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, null),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, "-0.1e3"),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, null),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, "1.3E-3"),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, null),
new Tuple<JsonTokenType,object>(JsonTokenType.String, "some \t\n text"),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, null),
new Tuple<JsonTokenType,object>(JsonTokenType.Literal, "literal"),
new Tuple<JsonTokenType,object>(JsonTokenType.BeginArray, null),
new Tuple<JsonTokenType,object>(JsonTokenType.EndArray, null),
new Tuple<JsonTokenType,object>(JsonTokenType.BeginObject, null),
new Tuple<JsonTokenType,object>(JsonTokenType.EndObject, null),
new Tuple<JsonTokenType,object>(JsonTokenType.NameSeparator, null)
};
string value;
JsonTokenType tokenType;
for (var i = 0; i < expexted.Length; i++) {
Assert.True(scanner.ReadToken(out value, out tokenType));
Assert.Equal(expexted[i].Item1, tokenType);
Assert.Equal(expexted[i].Item2, value);
}
Assert.False(scanner.ReadToken(out value, out tokenType));
}
}
[Fact]
public void TestScannerBadTokens() {
var bad = new[] {
" 1",
" literal",
" \"",
"\"unclosed string",
"1.bad",
"001", // should be read as three numbers
"--10",
"+10",
"1.0.0",
"1e1.0",
"l1teral0",
".123",
"-.123"
};
foreach (var json in bad) {
using (var scanner = JsonStringScanner.Create(json)) {
try {
string value;
JsonTokenType token;
scanner.ReadToken(out value, out token);
if (!Object.Equals(value, json)) {
Console.WriteLine("'{0}' is read as {1}", json, value is String ? String.Format("'{0}'", value) : value);
continue;
}
Assert.True(false, $"Token '{json}' shouldn't pass");
} catch (ParserException e) {
Console.WriteLine(e.Message);
}
}
}
}
[Fact]
public void JsonXmlReaderSimpleTest() {
var json = "\"some text\"";
//Console.WriteLine($"JSON: {json}");
//Console.WriteLine("XML");
/*using (var xmlReader = new JsonXmlReader(new JSONParser(json), new JsonXmlReaderOptions { NamespaceUri = "JsonXmlReaderSimpleTest", RootName = "string", NodesPrefix = "json" })) {
Assert.AreEqual(xmlReader.ReadState, System.Xml.ReadState.Initial);
AssertRead(xmlReader, XmlNodeType.XmlDeclaration);
AssertRead(xmlReader, XmlNodeType.Element);
AssertRead(xmlReader, XmlNodeType.Text);
AssertRead(xmlReader, XmlNodeType.EndElement);
Assert.IsFalse(xmlReader.Read());
}*/
DumpJsonParse("\"text value\"");
DumpJsonParse("null");
DumpJsonParse("true");
DumpJsonParse("{}");
DumpJsonParse("[]");
DumpJsonParse("{\"one\":1, \"two\":2}");
DumpJsonParse("[1,\"\",2,3]");
DumpJsonParse("[{\"info\": [7,8,9]}]");
DumpJsonFlatParse("[1,2,\"\",[3,4],{\"info\": [5,6]},{\"num\": [7,8,null]}, null,[null]]");
}
[Fact]
public void XmlToJsonTransform() {
var person = new Person {
FirstName = "Charlie",
LastName = "Brown",
Age = 19,
AgeSpecified = true
};
var doc = SerializationHelpers.SerializeAsXmlDocument(person);
using (var writer = new StringWriter()) {
XmlToJson.Default.Transform(doc,null, writer);
Console.WriteLine(writer.ToString());
}
}
[Fact]
public void JsonSerialization() {
var person = new Person {
FirstName = "Charlie",
LastName = "Brown",
Age = 19,
AgeSpecified = true,
Tags = new [] { "brave", "stupid" }
};
var data = SerializationHelpers.SerializeJsonAsString(person);
Console.WriteLine(data);
var clone = SerializationHelpers.DeserializeJsonFromString<Person>(data);
Assert.Equal(person.FirstName, clone.FirstName);
Assert.Equal(person.LastName, clone.LastName);
Assert.Equal(person.Age, clone.Age);
Assert.Equal(person.AgeSpecified, clone.AgeSpecified);
Assert.Equal(person.Tags, person.Tags);
}
void AssertRead(XmlReader reader, XmlNodeType expected) {
Assert.True(reader.Read());
Console.WriteLine($"{new string(' ', reader.Depth * 2)}{reader}");
Assert.Equal(expected, reader.NodeType);
}
void DumpJsonParse(string json) {
Console.WriteLine($"JSON: {json}");
Console.WriteLine("XML");
using (var xmlWriter = XmlWriter.Create(Console.Out, new XmlWriterSettings {
Indent = true,
CloseOutput = false,
ConformanceLevel = ConformanceLevel.Document
}))
using (var xmlReader = new JsonXmlReader(JsonReader.ParseString(json), new JsonXmlReaderOptions { NamespaceUri = "JsonXmlReaderSimpleTest", RootName = "Data", NodesPrefix = "json", CaseTransform = JsonXmlCaseTransform.UcFirst, ArrayItemName = "Item" })) {
xmlWriter.WriteNode(xmlReader, false);
}
Console.WriteLine();
}
void DumpJsonFlatParse(string json) {
Console.WriteLine($"JSON: {json}");
Console.WriteLine("XML");
using (var xmlWriter = XmlWriter.Create(Console.Out, new XmlWriterSettings {
Indent = true,
CloseOutput = false,
ConformanceLevel = ConformanceLevel.Document
}))
using (var xmlReader = new JsonXmlReader(JsonReader.ParseString(json), new JsonXmlReaderOptions { NamespaceUri = "JsonXmlReaderSimpleTest", NodesPrefix = "", FlattenArrays = true })) {
xmlWriter.WriteNode(xmlReader, false);
}
Console.WriteLine();
}
}
}