forked from meteor/meteor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoken_tests.js
78 lines (71 loc) · 2.69 KB
/
token_tests.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Tinytest.add("blaze-tools - token parsers", function (test) {
var run = function (func, input, expected) {
var scanner = new HTMLTools.Scanner('z' + input);
// make sure the parse function respects `scanner.pos`
scanner.pos = 1;
var result = func(scanner);
if (expected === null) {
test.equal(scanner.pos, 1);
test.equal(result, null);
} else {
test.isTrue(scanner.isEOF());
test.equal(result, expected);
}
};
var runValue = function (func, input, expectedValue) {
var expected;
if (expectedValue === null)
expected = null;
else
expected = { text: input, value: expectedValue };
run(func, input, expected);
};
var parseNumber = BlazeTools.parseNumber;
var parseIdentifierName = BlazeTools.parseIdentifierName;
var parseExtendedIdentifierName = BlazeTools.parseExtendedIdentifierName;
var parseStringLiteral = BlazeTools.parseStringLiteral;
runValue(parseNumber, "0", 0);
runValue(parseNumber, "-0", 0);
runValue(parseNumber, "-", null);
runValue(parseNumber, ".a", null);
runValue(parseNumber, ".1", 0.1);
runValue(parseNumber, "1.", 1);
runValue(parseNumber, "1.1", 1.1);
runValue(parseNumber, "0x", null);
runValue(parseNumber, "0xa", 10);
runValue(parseNumber, "-0xa", -10);
runValue(parseNumber, "1e+1", 10);
_.each([parseIdentifierName, parseExtendedIdentifierName], function (f) {
run(f, "a", "a");
run(f, "true", "true");
run(f, "null", "null");
run(f, "if", "if");
run(f, "1", null);
run(f, "1a", null);
run(f, "+a", null);
run(f, "a1", "a1");
run(f, "a1a", "a1a");
run(f, "_a8f_f8d88_", "_a8f_f8d88_");
});
run(parseIdentifierName, "@index", null);
run(parseExtendedIdentifierName, "@index", "@index");
run(parseExtendedIdentifierName, "@something", "@something");
run(parseExtendedIdentifierName, "@", null);
runValue(parseStringLiteral, '"a"', 'a');
runValue(parseStringLiteral, '"\'"', "'");
runValue(parseStringLiteral, '\'"\'', '"');
runValue(parseStringLiteral, '"a\\\nb"', 'ab'); // line continuation
runValue(parseStringLiteral, '"a\u0062c"', 'abc');
// Note: IE 8 doesn't correctly parse '\v' in JavaScript.
runValue(parseStringLiteral, '"\\0\\b\\f\\n\\r\\t\\v"', '\0\b\f\n\r\t\u000b');
runValue(parseStringLiteral, '"\\x41"', 'A');
runValue(parseStringLiteral, '"\\\\"', '\\');
runValue(parseStringLiteral, '"\\\""', '\"');
runValue(parseStringLiteral, '"\\\'"', '\'');
runValue(parseStringLiteral, "'\\\\'", '\\');
runValue(parseStringLiteral, "'\\\"'", '\"');
runValue(parseStringLiteral, "'\\\''", '\'');
test.throws(function () {
run(parseStringLiteral, "'this is my string");
}, /Unterminated string literal/);
});