90 lines
1.6 KiB
TypeScript
90 lines
1.6 KiB
TypeScript
import tap from "tap";
|
|
import JSONParser from "../src/jsonparser";
|
|
import { TokenType } from "../src/utils/constants";
|
|
|
|
const { test } = tap;
|
|
|
|
const {
|
|
LEFT_BRACE,
|
|
RIGHT_BRACE,
|
|
LEFT_BRACKET,
|
|
RIGHT_BRACKET,
|
|
COLON,
|
|
COMMA,
|
|
TRUE,
|
|
FALSE,
|
|
NULL,
|
|
STRING,
|
|
NUMBER,
|
|
} = TokenType;
|
|
|
|
const input = '{\n "string": "value",\n "number": 3,\n "object"';
|
|
const input2 = ': {\n "key": "vд"\n },\n "array": [\n -1,\n 12\n ]\n ';
|
|
const input3 = '"null": null, "true": true, "false": false, "frac": 3.14 }';
|
|
|
|
const offsets = [
|
|
[0, LEFT_BRACE],
|
|
[4, STRING],
|
|
[12, COLON],
|
|
[14, STRING],
|
|
[21, COMMA],
|
|
[25, STRING],
|
|
[33, COLON],
|
|
[35, NUMBER],
|
|
[36, COMMA],
|
|
[40, STRING],
|
|
[48, COLON],
|
|
[50, LEFT_BRACE],
|
|
[54, STRING],
|
|
[59, COLON],
|
|
[61, STRING],
|
|
[69, RIGHT_BRACE],
|
|
[70, COMMA],
|
|
[74, STRING],
|
|
[81, COLON],
|
|
[83, LEFT_BRACKET],
|
|
[87, NUMBER],
|
|
[89, COMMA],
|
|
[93, NUMBER],
|
|
[98, RIGHT_BRACKET],
|
|
[102, STRING],
|
|
[108, COLON],
|
|
[110, NULL],
|
|
[114, COMMA],
|
|
[116, STRING],
|
|
[122, COLON],
|
|
[124, TRUE],
|
|
[128, COMMA],
|
|
[130, STRING],
|
|
[137, COLON],
|
|
[139, FALSE],
|
|
[144, COMMA],
|
|
[146, STRING],
|
|
[152, COLON],
|
|
[154, NUMBER],
|
|
[159, RIGHT_BRACE],
|
|
];
|
|
|
|
test("offset", (t) => {
|
|
t.plan(offsets.length * 2 + 1);
|
|
|
|
let i = 0;
|
|
|
|
const p = new JSONParser();
|
|
p.onToken = (token, value, offset) => {
|
|
t.equal(offset, offsets[i][0]);
|
|
t.equal(token, offsets[i][1]);
|
|
i += 1;
|
|
};
|
|
p.onValue = () => {
|
|
/* Do nothing */
|
|
};
|
|
p.onEnd = () => t.end();
|
|
|
|
p.write(input);
|
|
p.write(input2);
|
|
p.write(input3);
|
|
|
|
t.equal(i, offsets.length);
|
|
});
|