##// END OF EJS Templates
Слияние с v2
Слияние с v2

File last commit:

r184:d6a8cba73acc ref20160224
r192:f1da3afc3521 merge release v2.1 default
Show More
JsonTests.cs
88 lines | 4.0 KiB | text/x-csharp | CSharpLexer
cin
refactoring, code cleanup
r158 using NUnit.Framework;
using System;
cin
pretty print DFA, the minimization is still buggy
r182 using Implab.Formats.JSON;
cin
fixed DFA optimization, JSON is fully functional
r183 using Implab.Automaton;
cin
refactoring, code cleanup
r158
namespace Implab.Format.Test {
cin
pretty print DFA, the minimization is still buggy
r182 [TestFixture]
cin
refactoring, code cleanup
r158 public class JsonTests {
cin
pretty print DFA, the minimization is still buggy
r182 [Test]
public void TestScannerValidTokens() {
cin
fixed DFA optimization, JSON is fully functional
r183 using (var scanner = new JSONScanner(@"9123, -123, 0, 0.1, -0.2, -0.1e3, 1.3E-3, ""some \t\n\u0020 text"", literal []{}:")) {
cin
working on runnable component
r184 Tuple<JsonTokenType,object>[] expexted = {
cin
fixed DFA optimization, JSON is fully functional
r183 new Tuple<JsonTokenType,object>(JsonTokenType.Number, 9123d),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, ", "),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, -123d),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, ", "),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, 0d),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, ", "),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, 0.1d),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, ", "),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, -0.2d),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, ", "),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, -0.1e3d),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, ", "),
new Tuple<JsonTokenType,object>(JsonTokenType.Number, 1.3E-3d),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, ", "),
new Tuple<JsonTokenType,object>(JsonTokenType.String, "some \t\n text"),
new Tuple<JsonTokenType,object>(JsonTokenType.ValueSeparator, ", "),
new Tuple<JsonTokenType,object>(JsonTokenType.Literal, "literal"),
new Tuple<JsonTokenType,object>(JsonTokenType.BeginArray, " ["),
new Tuple<JsonTokenType,object>(JsonTokenType.EndArray, "]"),
new Tuple<JsonTokenType,object>(JsonTokenType.BeginObject, "{"),
new Tuple<JsonTokenType,object>(JsonTokenType.EndObject, "}"),
new Tuple<JsonTokenType,object>(JsonTokenType.NameSeparator, ":")
};
cin
pretty print DFA, the minimization is still buggy
r182
cin
fixed DFA optimization, JSON is fully functional
r183 object value;
JsonTokenType tokenType;
for (var i = 0; i < expexted.Length; i++) {
Assert.IsTrue(scanner.ReadToken(out value, out tokenType));
Assert.AreEqual(expexted[i].Item1, tokenType);
Assert.AreEqual(expexted[i].Item2, value);
}
Assert.IsFalse(scanner.ReadToken(out value, out tokenType));
}
}
[Test]
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"
cin
pretty print DFA, the minimization is still buggy
r182 };
cin
fixed DFA optimization, JSON is fully functional
r183 foreach (var json in bad)
using (var scanner = new JSONScanner(json)) {
try {
object 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.Fail("Token '{0}' shouldn't pass", json);
} catch (ParserException e) {
Console.WriteLine(e.Message);
}
}
cin
refactoring, code cleanup
r158 }
}
}