orionsoft-react-scripts
Version:
Orionsoft Configuration and scripts for Create React App.
132 lines (125 loc) • 2.56 kB
JavaScript
/*globals describe it */
require("should");
var Parser = require("../");
var testdata = [
{
name: "simple string",
states: {
"start": {
"[d-gm-rv]+": function(match, index) {
if(!this.data) this.data = [];
this.data.push({
match: match,
index: index
});
}
}
},
string: "abcdefghijklmnopqrstuvwxyz",
expected: {
data: [
{ match: "defg", index: 3 },
{ match: "mnopqr", index: 12 },
{ match: "v", index: 21 }
]
}
},
{
name: "state switing",
states: {
"number": {
"([0-9]+)": function(match, number) {
if(!this.data) this.data = {};
this.data[this.ident] = +number;
delete this.ident;
return "start";
},
"-\\?": true,
"\\?": "start"
},
"start": {
"([a-z]+)": function(match, name) {
this.ident = name;
return "number";
}
}
},
string: "a 1 b 2 c f 3 d ? e -? 4",
expected: {
data: {
a: 1, b: 2, c: 3, e: 4
}
}
},
{
name: "state array",
states: {
"start": [
{ "a": function() { this.a = true; } },
{
"b": function() { this.b = true; },
"c": function() { this.c = true; }
}
]
},
string: "hello abc",
expected: {
a: true, b: true, c: true
}
},
{
name: "reference other states",
states: {
"start": [
{ "a": function() { this.a = true; } },
"bc"
],
"bc": {
"b": function() { this.b = true; },
"c": function() { this.c = true; }
}
},
string: "hello abc",
expected: {
a: true, b: true, c: true
}
}
];
describe("Parser", function() {
testdata.forEach(function(testcase) {
it("should parse " + testcase.name, function() {
var parser = new Parser(testcase.states);
var actual = parser.parse("start", testcase.string, {});
actual.should.be.eql(testcase.expected);
});
});
it("should default context to empty object", function() {
var parser = new Parser({
"a": {
"a": function() {
this.should.be.eql({});
}
}
});
var result = parser.parse("a", "a");
result.should.be.eql({});
});
it("should error for unexpected format", function() {
(function() {
var parser = new Parser({
"a": 123
});
return parser;
}).should.throw();
});
it("should error for not existing state", function() {
var parser = new Parser({
"a": {
"a": "b"
}
});
(function() {
return parser.parse("a", "a");
}).should.throw();
});
});