Change term "grammar parser" to "parser" in tests

redux
David Majda 14 years ago
parent b105c43756
commit b15eb0bb5f

@ -2,21 +2,21 @@
/* ===== Helpers ===== */ /* ===== Helpers ===== */
global.grammarParserParses = function(input, expected) { global.parserParses = function(input, expected) {
global.parses(PEG.parser, input, expected); global.parses(PEG.parser, input, expected);
}; };
global.grammarParserDoesNotParse = function(input) { global.parserDoesNotParse = function(input) {
global.doesNotParse(PEG.parser, input); global.doesNotParse(PEG.parser, input);
} }
global.grammarParserDoesNotParseWithMessage = function(input, message) { global.parserDoesNotParseWithMessage = function(input, message) {
global.doesNotParseWithMessage(PEG.parser, input, message); global.doesNotParseWithMessage(PEG.parser, input, message);
} }
/* ===== Grammar Parser ===== */ /* ===== PEG.parser ===== */
module("Grammar Parser"); module("PEG.parser");
function initializer(code) { function initializer(code) {
return { return {
@ -177,7 +177,7 @@ var initializerGrammar = {
/* Canonical grammar is "a: \"abcd\"; b: \"efgh\"; c: \"ijkl\";". */ /* Canonical grammar is "a: \"abcd\"; b: \"efgh\"; c: \"ijkl\";". */
test("parses grammar", function() { test("parses grammar", function() {
grammarParserParses( parserParses(
'a = "abcd"', 'a = "abcd"',
{ {
type: "grammar", type: "grammar",
@ -186,8 +186,8 @@ test("parses grammar", function() {
startRule: "a" startRule: "a"
} }
); );
grammarParserParses('{ code }; a = "abcd"', initializerGrammar); parserParses('{ code }; a = "abcd"', initializerGrammar);
grammarParserParses( parserParses(
'a = "abcd"; b = "efgh"; c = "ijkl"', 'a = "abcd"; b = "efgh"; c = "ijkl"',
{ {
type: "grammar", type: "grammar",
@ -204,17 +204,17 @@ test("parses grammar", function() {
/* Canonical initializer is "{ code }". */ /* Canonical initializer is "{ code }". */
test("parses initializer", function() { test("parses initializer", function() {
grammarParserParses('{ code }a = "abcd"', initializerGrammar); parserParses('{ code }a = "abcd"', initializerGrammar);
grammarParserParses('{ code };a = "abcd"', initializerGrammar); parserParses('{ code };a = "abcd"', initializerGrammar);
}); });
/* Canonical rule is "a: \"abcd\"". */ /* Canonical rule is "a: \"abcd\"". */
test("parses rule", function() { test("parses rule", function() {
grammarParserParses( parserParses(
'start = "abcd" / "efgh" / "ijkl"', 'start = "abcd" / "efgh" / "ijkl"',
oneRuleGrammar(choiceLiterals) oneRuleGrammar(choiceLiterals)
); );
grammarParserParses( parserParses(
'start "start rule" = "abcd" / "efgh" / "ijkl"', 'start "start rule" = "abcd" / "efgh" / "ijkl"',
{ {
type: "grammar", type: "grammar",
@ -223,7 +223,7 @@ test("parses rule", function() {
startRule: "start" startRule: "start"
} }
); );
grammarParserParses( parserParses(
'start = "abcd" / "efgh" / "ijkl";', 'start = "abcd" / "efgh" / "ijkl";',
oneRuleGrammar(choiceLiterals) oneRuleGrammar(choiceLiterals)
); );
@ -231,7 +231,7 @@ test("parses rule", function() {
/* Canonical expression is "\"abcd\" / \"efgh\" / \"ijkl\"". */ /* Canonical expression is "\"abcd\" / \"efgh\" / \"ijkl\"". */
test("parses expression", function() { test("parses expression", function() {
grammarParserParses( parserParses(
'start = "abcd" / "efgh" / "ijkl"', 'start = "abcd" / "efgh" / "ijkl"',
oneRuleGrammar(choiceLiterals) oneRuleGrammar(choiceLiterals)
); );
@ -239,11 +239,11 @@ test("parses expression", function() {
/* Canonical choice is "\"abcd\" / \"efgh\" / \"ijkl\"". */ /* Canonical choice is "\"abcd\" / \"efgh\" / \"ijkl\"". */
test("parses choice", function() { test("parses choice", function() {
grammarParserParses( parserParses(
'start = "abcd" "efgh" "ijkl"', 'start = "abcd" "efgh" "ijkl"',
oneRuleGrammar(sequenceLiterals) oneRuleGrammar(sequenceLiterals)
); );
grammarParserParses( parserParses(
'start = "abcd" "efgh" "ijkl" / "abcd" "efgh" "ijkl" / "abcd" "efgh" "ijkl"', 'start = "abcd" "efgh" "ijkl" / "abcd" "efgh" "ijkl" / "abcd" "efgh" "ijkl"',
oneRuleGrammar(choice([ oneRuleGrammar(choice([
sequenceLiterals, sequenceLiterals,
@ -255,22 +255,22 @@ test("parses choice", function() {
/* Canonical sequence is "\"abcd\" \"efgh\" \"ijkl\"". */ /* Canonical sequence is "\"abcd\" \"efgh\" \"ijkl\"". */
test("parses sequence", function() { test("parses sequence", function() {
grammarParserParses( parserParses(
'start = { code }', 'start = { code }',
oneRuleGrammar(action(sequenceEmpty, " code ")) oneRuleGrammar(action(sequenceEmpty, " code "))
); );
grammarParserParses( parserParses(
'start = a:"abcd" { code }', 'start = a:"abcd" { code }',
oneRuleGrammar(action(labeledAbcd, " code ")) oneRuleGrammar(action(labeledAbcd, " code "))
); );
grammarParserParses( parserParses(
'start = a:"abcd" e:"efgh" i:"ijkl" { code }', 'start = a:"abcd" e:"efgh" i:"ijkl" { code }',
oneRuleGrammar(action(sequenceLabeleds, " code ")) oneRuleGrammar(action(sequenceLabeleds, " code "))
); );
grammarParserParses('start = ', oneRuleGrammar(sequenceEmpty)); parserParses('start = ', oneRuleGrammar(sequenceEmpty));
grammarParserParses('start = a:"abcd"', oneRuleGrammar(labeledAbcd)); parserParses('start = a:"abcd"', oneRuleGrammar(labeledAbcd));
grammarParserParses( parserParses(
'start = a:"abcd" e:"efgh" i:"ijkl"', 'start = a:"abcd" e:"efgh" i:"ijkl"',
oneRuleGrammar(sequenceLabeleds) oneRuleGrammar(sequenceLabeleds)
); );
@ -278,166 +278,163 @@ test("parses sequence", function() {
/* Canonical labeled is "label:\"abcd\"". */ /* Canonical labeled is "label:\"abcd\"". */
test("parses labeled", function() { test("parses labeled", function() {
grammarParserParses( parserParses(
'start = label:!"abcd"', 'start = label:!"abcd"',
oneRuleGrammar(labeled("label", simpleNot(literalAbcd))) oneRuleGrammar(labeled("label", simpleNot(literalAbcd)))
); );
grammarParserParses( parserParses('start = !"abcd"', oneRuleGrammar(simpleNot(literalAbcd)));
'start = !"abcd"',
oneRuleGrammar(simpleNot(literalAbcd))
);
}); });
/* Canonical prefixed is "!\"abcd\"". */ /* Canonical prefixed is "!\"abcd\"". */
test("parses prefixed", function() { test("parses prefixed", function() {
grammarParserParses('start = &{ code }', oneRuleGrammar(semanticAnd(" code "))); parserParses('start = &{ code }', oneRuleGrammar(semanticAnd(" code ")));
grammarParserParses('start = &"abcd"?', oneRuleGrammar(simpleAnd(optionalLiteral))); parserParses('start = &"abcd"?', oneRuleGrammar(simpleAnd(optionalLiteral)));
grammarParserParses('start = !{ code }', oneRuleGrammar(semanticNot(" code "))); parserParses('start = !{ code }', oneRuleGrammar(semanticNot(" code ")));
grammarParserParses('start = !"abcd"?', oneRuleGrammar(simpleNot(optionalLiteral))); parserParses('start = !"abcd"?', oneRuleGrammar(simpleNot(optionalLiteral)));
grammarParserParses('start = "abcd"?', oneRuleGrammar(optionalLiteral)); parserParses('start = "abcd"?', oneRuleGrammar(optionalLiteral));
}); });
/* Canonical suffixed is "\"abcd\"?". */ /* Canonical suffixed is "\"abcd\"?". */
test("parses suffixed", function() { test("parses suffixed", function() {
grammarParserParses('start = "abcd"?', oneRuleGrammar(optionalLiteral)); parserParses('start = "abcd"?', oneRuleGrammar(optionalLiteral));
grammarParserParses('start = "abcd"*', oneRuleGrammar(zeroOrMore(literalAbcd))); parserParses('start = "abcd"*', oneRuleGrammar(zeroOrMore(literalAbcd)));
grammarParserParses('start = "abcd"+', oneRuleGrammar(oneOrMore(literalAbcd))); parserParses('start = "abcd"+', oneRuleGrammar(oneOrMore(literalAbcd)));
grammarParserParses('start = "abcd"', literalGrammar("abcd")); parserParses('start = "abcd"', literalGrammar("abcd"));
}); });
/* Canonical primary is "\"abcd\"". */ /* Canonical primary is "\"abcd\"". */
test("parses primary", function() { test("parses primary", function() {
grammarParserParses('start = a', identifierGrammar("a")); parserParses('start = a', identifierGrammar("a"));
grammarParserParses('start = "abcd"', literalGrammar("abcd")); parserParses('start = "abcd"', literalGrammar("abcd"));
grammarParserParses('start = .', anyGrammar); parserParses('start = .', anyGrammar);
grammarParserParses('start = [a-d]', classGrammar(false, [["a", "d"]], "[a-d]")); parserParses('start = [a-d]', classGrammar(false, [["a", "d"]], "[a-d]"));
grammarParserParses('start = ("abcd")', literalGrammar("abcd")); parserParses('start = ("abcd")', literalGrammar("abcd"));
}); });
/* Canonical action is "{ code }". */ /* Canonical action is "{ code }". */
test("parses action", function() { test("parses action", function() {
grammarParserParses('start = "a" { code }', actionGrammar(" code ")); parserParses('start = "a" { code }', actionGrammar(" code "));
}); });
/* Canonical braced is "{ code }". */ /* Canonical braced is "{ code }". */
test("parses braced", function() { test("parses braced", function() {
grammarParserParses('start = "a" {}', actionGrammar("")); parserParses('start = "a" {}', actionGrammar(""));
grammarParserParses('start = "a" {a}', actionGrammar("a")); parserParses('start = "a" {a}', actionGrammar("a"));
grammarParserParses('start = "a" {{a}}', actionGrammar("{a}")); parserParses('start = "a" {{a}}', actionGrammar("{a}"));
grammarParserParses('start = "a" {aaa}', actionGrammar("aaa")); parserParses('start = "a" {aaa}', actionGrammar("aaa"));
}); });
/* Trivial character rules are not tested. */ /* Trivial character rules are not tested. */
/* Canonical identifier is "a". */ /* Canonical identifier is "a". */
test("parses identifier", function() { test("parses identifier", function() {
grammarParserParses('start = a', identifierGrammar("a")); parserParses('start = a', identifierGrammar("a"));
grammarParserParses('start = z', identifierGrammar("z")); parserParses('start = z', identifierGrammar("z"));
grammarParserParses('start = A', identifierGrammar("A")); parserParses('start = A', identifierGrammar("A"));
grammarParserParses('start = Z', identifierGrammar("Z")); parserParses('start = Z', identifierGrammar("Z"));
grammarParserParses('start = _', identifierGrammar("_")); parserParses('start = _', identifierGrammar("_"));
grammarParserParses('start = $', identifierGrammar("$")); parserParses('start = $', identifierGrammar("$"));
grammarParserParses('start = aa', identifierGrammar("aa")); parserParses('start = aa', identifierGrammar("aa"));
grammarParserParses('start = az', identifierGrammar("az")); parserParses('start = az', identifierGrammar("az"));
grammarParserParses('start = aA', identifierGrammar("aA")); parserParses('start = aA', identifierGrammar("aA"));
grammarParserParses('start = aZ', identifierGrammar("aZ")); parserParses('start = aZ', identifierGrammar("aZ"));
grammarParserParses('start = a0', identifierGrammar("a0")); parserParses('start = a0', identifierGrammar("a0"));
grammarParserParses('start = a9', identifierGrammar("a9")); parserParses('start = a9', identifierGrammar("a9"));
grammarParserParses('start = a_', identifierGrammar("a_")); parserParses('start = a_', identifierGrammar("a_"));
grammarParserParses('start = a$', identifierGrammar("a$")); parserParses('start = a$', identifierGrammar("a$"));
grammarParserParses('start = abcd', identifierGrammar("abcd")); parserParses('start = abcd', identifierGrammar("abcd"));
grammarParserParses('start = a\n', identifierGrammar("a")); parserParses('start = a\n', identifierGrammar("a"));
}); });
/* Canonical literal is "\"abcd\"". */ /* Canonical literal is "\"abcd\"". */
test("parses literal", function() { test("parses literal", function() {
grammarParserParses('start = "abcd"', literalGrammar("abcd")); parserParses('start = "abcd"', literalGrammar("abcd"));
grammarParserParses("start = 'abcd'", literalGrammar("abcd")); parserParses("start = 'abcd'", literalGrammar("abcd"));
}); });
/* Canonical doubleQuotedLiteral is "\"abcd\"". */ /* Canonical doubleQuotedLiteral is "\"abcd\"". */
test("parses doubleQuotedLiteral", function() { test("parses doubleQuotedLiteral", function() {
grammarParserParses('start = ""', literalGrammar("")); parserParses('start = ""', literalGrammar(""));
grammarParserParses('start = "a"', literalGrammar("a")); parserParses('start = "a"', literalGrammar("a"));
grammarParserParses('start = "abc"', literalGrammar("abc")); parserParses('start = "abc"', literalGrammar("abc"));
grammarParserParses('start = "abcd"\n', literalGrammar("abcd")); parserParses('start = "abcd"\n', literalGrammar("abcd"));
}); });
/* Canonical doubleQuotedCharacter is "a". */ /* Canonical doubleQuotedCharacter is "a". */
test("parses doubleQuotedCharacter", function() { test("parses doubleQuotedCharacter", function() {
grammarParserParses('start = "a"', literalGrammar("a")); parserParses('start = "a"', literalGrammar("a"));
grammarParserParses('start = "\\n"', literalGrammar("\n")); parserParses('start = "\\n"', literalGrammar("\n"));
grammarParserParses('start = "\\0"', literalGrammar("\0")); parserParses('start = "\\0"', literalGrammar("\0"));
grammarParserParses('start = "\\x00"', literalGrammar("\x00")); parserParses('start = "\\x00"', literalGrammar("\x00"));
grammarParserParses('start = "\\u0120"', literalGrammar("\u0120")); parserParses('start = "\\u0120"', literalGrammar("\u0120"));
grammarParserParses('start = "\\\n"', literalGrammar("\n")); parserParses('start = "\\\n"', literalGrammar("\n"));
}); });
/* Canonical simpleDoubleQuotedCharacter is "a". */ /* Canonical simpleDoubleQuotedCharacter is "a". */
test("parses simpleDoubleQuotedCharacter", function() { test("parses simpleDoubleQuotedCharacter", function() {
grammarParserParses('start = "a"', literalGrammar("a")); parserParses('start = "a"', literalGrammar("a"));
grammarParserParses('start = "\'"', literalGrammar("'")); parserParses('start = "\'"', literalGrammar("'"));
grammarParserDoesNotParse('start = """'); parserDoesNotParse('start = """');
grammarParserDoesNotParse('start = "\\"'); parserDoesNotParse('start = "\\"');
grammarParserDoesNotParse('start = "\n"'); parserDoesNotParse('start = "\n"');
grammarParserDoesNotParse('start = "\r"'); parserDoesNotParse('start = "\r"');
grammarParserDoesNotParse('start = "\u2028"'); parserDoesNotParse('start = "\u2028"');
grammarParserDoesNotParse('start = "\u2029"'); parserDoesNotParse('start = "\u2029"');
}); });
/* Canonical singleQuotedLiteral is "'abcd'". */ /* Canonical singleQuotedLiteral is "'abcd'". */
test("parses singleQuotedLiteral", function() { test("parses singleQuotedLiteral", function() {
grammarParserParses("start = ''", literalGrammar("")); parserParses("start = ''", literalGrammar(""));
grammarParserParses("start = 'a'", literalGrammar("a")); parserParses("start = 'a'", literalGrammar("a"));
grammarParserParses("start = 'abc'", literalGrammar("abc")); parserParses("start = 'abc'", literalGrammar("abc"));
grammarParserParses("start = 'abcd'\n", literalGrammar("abcd")); parserParses("start = 'abcd'\n", literalGrammar("abcd"));
}); });
/* Canonical singleQuotedCharacter is "a". */ /* Canonical singleQuotedCharacter is "a". */
test("parses singleQuotedCharacter", function() { test("parses singleQuotedCharacter", function() {
grammarParserParses("start = 'a'", literalGrammar("a")); parserParses("start = 'a'", literalGrammar("a"));
grammarParserParses("start = '\\n'", literalGrammar("\n")); parserParses("start = '\\n'", literalGrammar("\n"));
grammarParserParses("start = '\\0'", literalGrammar("\0")); parserParses("start = '\\0'", literalGrammar("\0"));
grammarParserParses("start = '\\x00'", literalGrammar("\x00")); parserParses("start = '\\x00'", literalGrammar("\x00"));
grammarParserParses("start = '\\u0120'", literalGrammar("\u0120")); parserParses("start = '\\u0120'", literalGrammar("\u0120"));
grammarParserParses("start = '\\\n'", literalGrammar("\n")); parserParses("start = '\\\n'", literalGrammar("\n"));
}); });
/* Canonical simpleSingleQuotedCharacter is "a". */ /* Canonical simpleSingleQuotedCharacter is "a". */
test("parses simpleSingleQuotedCharacter", function() { test("parses simpleSingleQuotedCharacter", function() {
grammarParserParses("start = 'a'", literalGrammar("a")); parserParses("start = 'a'", literalGrammar("a"));
grammarParserParses("start = '\"'", literalGrammar("\"")); parserParses("start = '\"'", literalGrammar("\""));
grammarParserDoesNotParse("start = '''"); parserDoesNotParse("start = '''");
grammarParserDoesNotParse("start = '\\'"); parserDoesNotParse("start = '\\'");
grammarParserDoesNotParse("start = '\n'"); parserDoesNotParse("start = '\n'");
grammarParserDoesNotParse("start = '\r'"); parserDoesNotParse("start = '\r'");
grammarParserDoesNotParse("start = '\u2028'"); parserDoesNotParse("start = '\u2028'");
grammarParserDoesNotParse("start = '\u2029'"); parserDoesNotParse("start = '\u2029'");
}); });
/* Canonical class is "[a-d]". */ /* Canonical class is "[a-d]". */
test("parses class", function() { test("parses class", function() {
grammarParserParses("start = []", classGrammar(false, [], "[]")); parserParses("start = []", classGrammar(false, [], "[]"));
grammarParserParses("start = [a-d]", classGrammar(false, [["a", "d"]], "[a-d]")); parserParses("start = [a-d]", classGrammar(false, [["a", "d"]], "[a-d]"));
grammarParserParses("start = [^a-d]", classGrammar(true, [["a", "d"]], "[^a-d]")); parserParses("start = [^a-d]", classGrammar(true, [["a", "d"]], "[^a-d]"));
grammarParserParses("start = [a]", classGrammar(false, ["a"], "[a]")); parserParses("start = [a]", classGrammar(false, ["a"], "[a]"));
grammarParserParses( parserParses(
"start = [a-de-hi-l]", "start = [a-de-hi-l]",
classGrammar(false, [["a", "d"], ["e", "h"], ["i", "l"]], "[a-de-hi-l]") classGrammar(false, [["a", "d"], ["e", "h"], ["i", "l"]], "[a-de-hi-l]")
); );
grammarParserParses("start = [a-d]\n", classGrammar(false, [["a", "d"]], "[a-d]")); parserParses("start = [a-d]\n", classGrammar(false, [["a", "d"]], "[a-d]"));
}); });
/* Canonical classCharacterRange is "a-d". */ /* Canonical classCharacterRange is "a-d". */
test("parses classCharacterRange", function() { test("parses classCharacterRange", function() {
grammarParserParses("start = [a-d]", classGrammar(false, [["a", "d"]], "[a-d]")); parserParses("start = [a-d]", classGrammar(false, [["a", "d"]], "[a-d]"));
grammarParserParses("start = [a-a]", classGrammar(false, [["a", "a"]], "[a-a]")); parserParses("start = [a-a]", classGrammar(false, [["a", "a"]], "[a-a]"));
grammarParserDoesNotParse("start = [b-a]"); parserDoesNotParse("start = [b-a]");
grammarParserDoesNotParseWithMessage( parserDoesNotParseWithMessage(
"start = [b-a]", "start = [b-a]",
"Invalid character range: b-a." "Invalid character range: b-a."
); );
@ -445,167 +442,167 @@ test("parses classCharacterRange", function() {
/* Canonical classCharacter is "a". */ /* Canonical classCharacter is "a". */
test("parses classCharacter", function() { test("parses classCharacter", function() {
grammarParserParses("start = [a]", classGrammar(false, ["a"], "[a]")); parserParses("start = [a]", classGrammar(false, ["a"], "[a]"));
}); });
/* Canonical bracketDelimitedCharacter is "a". */ /* Canonical bracketDelimitedCharacter is "a". */
test("parses bracketDelimitedCharacter", function() { test("parses bracketDelimitedCharacter", function() {
grammarParserParses("start = [a]", classGrammar(false, ["a"], "[a]")); parserParses("start = [a]", classGrammar(false, ["a"], "[a]"));
grammarParserParses("start = [\\n]", classGrammar(false, ["\n"], "[\\n]")); parserParses("start = [\\n]", classGrammar(false, ["\n"], "[\\n]"));
grammarParserParses("start = [\\0]", classGrammar(false, ["\0"], "[\\0]")); parserParses("start = [\\0]", classGrammar(false, ["\0"], "[\\0]"));
grammarParserParses("start = [\\x00]", classGrammar(false, ["\0"], "[\\0]")); parserParses("start = [\\x00]", classGrammar(false, ["\0"], "[\\0]"));
grammarParserParses("start = [\\u0120]", classGrammar(false, ["\u0120"], "[\u0120]")); parserParses("start = [\\u0120]", classGrammar(false, ["\u0120"], "[\u0120]"));
grammarParserParses("start = [\\\n]", classGrammar(false, ["\n"], "[\\n]")); parserParses("start = [\\\n]", classGrammar(false, ["\n"], "[\\n]"));
}); });
/* Canonical simpleBracketDelimiedCharacter is "a". */ /* Canonical simpleBracketDelimiedCharacter is "a". */
test("parses simpleBracketDelimitedCharacter", function() { test("parses simpleBracketDelimitedCharacter", function() {
grammarParserParses("start = [a]", classGrammar(false, ["a"], "[a]")); parserParses("start = [a]", classGrammar(false, ["a"], "[a]"));
grammarParserParses("start = [[]", classGrammar(false, ["["], "[[]")); parserParses("start = [[]", classGrammar(false, ["["], "[[]"));
grammarParserDoesNotParse("start = []]"); parserDoesNotParse("start = []]");
grammarParserDoesNotParse("start = [\\]"); parserDoesNotParse("start = [\\]");
grammarParserDoesNotParse("start = [\n]"); parserDoesNotParse("start = [\n]");
grammarParserDoesNotParse("start = [\r]"); parserDoesNotParse("start = [\r]");
grammarParserDoesNotParse("start = [\u2028]"); parserDoesNotParse("start = [\u2028]");
grammarParserDoesNotParse("start = [\u2029]"); parserDoesNotParse("start = [\u2029]");
}); });
/* Canonical simpleEscapeSequence is "\\n". */ /* Canonical simpleEscapeSequence is "\\n". */
test("parses simpleEscapeSequence", function() { test("parses simpleEscapeSequence", function() {
grammarParserParses('start = "\\\'"', literalGrammar("'")); parserParses('start = "\\\'"', literalGrammar("'"));
grammarParserParses('start = "\\""', literalGrammar("\"")); parserParses('start = "\\""', literalGrammar("\""));
grammarParserParses('start = "\\\\"', literalGrammar("\\")); parserParses('start = "\\\\"', literalGrammar("\\"));
grammarParserParses('start = "\\b"', literalGrammar("\b")); parserParses('start = "\\b"', literalGrammar("\b"));
grammarParserParses('start = "\\f"', literalGrammar("\f")); parserParses('start = "\\f"', literalGrammar("\f"));
grammarParserParses('start = "\\n"', literalGrammar("\n")); parserParses('start = "\\n"', literalGrammar("\n"));
grammarParserParses('start = "\\r"', literalGrammar("\r")); parserParses('start = "\\r"', literalGrammar("\r"));
grammarParserParses('start = "\\t"', literalGrammar("\t")); parserParses('start = "\\t"', literalGrammar("\t"));
/* IE does not recognize "\v". */ /* IE does not recognize "\v". */
grammarParserParses('start = "\\v"', literalGrammar("\x0B")); parserParses('start = "\\v"', literalGrammar("\x0B"));
grammarParserParses('start = "\\a"', literalGrammar("a")); parserParses('start = "\\a"', literalGrammar("a"));
}); });
/* Canonical zeroEscapeSequence is "\\0". */ /* Canonical zeroEscapeSequence is "\\0". */
test("parses zeroEscapeSequence", function() { test("parses zeroEscapeSequence", function() {
grammarParserParses('start = "\\0"', literalGrammar("\0")); parserParses('start = "\\0"', literalGrammar("\0"));
grammarParserDoesNotParse('start = "\\00"'); parserDoesNotParse('start = "\\00"');
grammarParserDoesNotParse('start = "\\09"'); parserDoesNotParse('start = "\\09"');
}); });
/* Canonical hexEscapeSequence is "\\x00". */ /* Canonical hexEscapeSequence is "\\x00". */
test("parses hexEscapeSequence", function() { test("parses hexEscapeSequence", function() {
grammarParserParses('start = "\\x00"', literalGrammar("\x00")); parserParses('start = "\\x00"', literalGrammar("\x00"));
grammarParserParses('start = "\\x09"', literalGrammar("\x09")); parserParses('start = "\\x09"', literalGrammar("\x09"));
grammarParserParses('start = "\\x0a"', literalGrammar("\x0a")); parserParses('start = "\\x0a"', literalGrammar("\x0a"));
grammarParserParses('start = "\\x0f"', literalGrammar("\x0f")); parserParses('start = "\\x0f"', literalGrammar("\x0f"));
grammarParserParses('start = "\\x0A"', literalGrammar("\x0A")); parserParses('start = "\\x0A"', literalGrammar("\x0A"));
grammarParserParses('start = "\\x0F"', literalGrammar("\x0F")); parserParses('start = "\\x0F"', literalGrammar("\x0F"));
grammarParserDoesNotParse('start = "\\x0"'); parserDoesNotParse('start = "\\x0"');
grammarParserParses('start = "\\x000"', literalGrammar("\x000")); parserParses('start = "\\x000"', literalGrammar("\x000"));
}); });
/* Canonical unicodeEscapeSequence is "\\u0120". */ /* Canonical unicodeEscapeSequence is "\\u0120". */
test("parses unicodeEscapeSequence", function() { test("parses unicodeEscapeSequence", function() {
grammarParserParses('start = "\\u0120"', literalGrammar("\u0120")); parserParses('start = "\\u0120"', literalGrammar("\u0120"));
grammarParserParses('start = "\\u0129"', literalGrammar("\u0129")); parserParses('start = "\\u0129"', literalGrammar("\u0129"));
grammarParserParses('start = "\\u012a"', literalGrammar("\u012a")); parserParses('start = "\\u012a"', literalGrammar("\u012a"));
grammarParserParses('start = "\\u012f"', literalGrammar("\u012f")); parserParses('start = "\\u012f"', literalGrammar("\u012f"));
grammarParserParses('start = "\\u012A"', literalGrammar("\u012A")); parserParses('start = "\\u012A"', literalGrammar("\u012A"));
grammarParserParses('start = "\\u012F"', literalGrammar("\u012F")); parserParses('start = "\\u012F"', literalGrammar("\u012F"));
grammarParserDoesNotParse('start = "\\u012"'); parserDoesNotParse('start = "\\u012"');
grammarParserParses('start = "\\u01234"', literalGrammar("\u01234")); parserParses('start = "\\u01234"', literalGrammar("\u01234"));
}); });
/* Canonical eolEscapeSequence is "\\\n". */ /* Canonical eolEscapeSequence is "\\\n". */
test("parses eolEscapeSequence", function() { test("parses eolEscapeSequence", function() {
grammarParserParses('start = "\\\n"', literalGrammar("\n")); parserParses('start = "\\\n"', literalGrammar("\n"));
grammarParserParses('start = "\\\r\n"', literalGrammar("\r\n")); parserParses('start = "\\\r\n"', literalGrammar("\r\n"));
grammarParserParses('start = "\\\r"', literalGrammar("\r")); parserParses('start = "\\\r"', literalGrammar("\r"));
grammarParserParses('start = "\\\u2028"', literalGrammar("\u2028")); parserParses('start = "\\\u2028"', literalGrammar("\u2028"));
grammarParserParses('start = "\\\u2029"', literalGrammar("\u2029")); parserParses('start = "\\\u2029"', literalGrammar("\u2029"));
}); });
/* Canonical __ is "\n". */ /* Canonical __ is "\n". */
test("parses __", function() { test("parses __", function() {
grammarParserParses('start ="abcd"', simpleGrammar); parserParses('start ="abcd"', simpleGrammar);
grammarParserParses('start = "abcd"', simpleGrammar); parserParses('start = "abcd"', simpleGrammar);
grammarParserParses('start =\n"abcd"', simpleGrammar); parserParses('start =\n"abcd"', simpleGrammar);
grammarParserParses('start =/* comment */"abcd"', simpleGrammar); parserParses('start =/* comment */"abcd"', simpleGrammar);
grammarParserParses('start = "abcd"', simpleGrammar); parserParses('start = "abcd"', simpleGrammar);
}); });
/* Trivial character class rules are not tested. */ /* Trivial character class rules are not tested. */
/* Canonical comment is "\/* comment *\/". */ /* Canonical comment is "\/* comment *\/". */
test("parses comment", function() { test("parses comment", function() {
grammarParserParses('start =// comment\n"abcd"', simpleGrammar); parserParses('start =// comment\n"abcd"', simpleGrammar);
grammarParserParses('start =/* comment */"abcd"', simpleGrammar); parserParses('start =/* comment */"abcd"', simpleGrammar);
}); });
/* Canonical singleLineComment is "// comment". */ /* Canonical singleLineComment is "// comment". */
test("parses singleLineComment", function() { test("parses singleLineComment", function() {
grammarParserParses('start =//\n"abcd"', simpleGrammar); parserParses('start =//\n"abcd"', simpleGrammar);
grammarParserParses('start =//a\n"abcd"', simpleGrammar); parserParses('start =//a\n"abcd"', simpleGrammar);
grammarParserParses('start =//aaa\n"abcd"', simpleGrammar); parserParses('start =//aaa\n"abcd"', simpleGrammar);
grammarParserParses('start = "abcd"//', simpleGrammar); parserParses('start = "abcd"//', simpleGrammar);
}); });
/* Canonical multiLineComment is "\/* comment *\/". */ /* Canonical multiLineComment is "\/* comment *\/". */
test("parses multiLineComment", function() { test("parses multiLineComment", function() {
grammarParserParses('start =/**/"abcd"', simpleGrammar); parserParses('start =/**/"abcd"', simpleGrammar);
grammarParserParses('start =/*a*/"abcd"', simpleGrammar); parserParses('start =/*a*/"abcd"', simpleGrammar);
grammarParserParses('start =/*aaa*/"abcd"', simpleGrammar); parserParses('start =/*aaa*/"abcd"', simpleGrammar);
grammarParserParses('start =/*\n*/"abcd"', simpleGrammar); parserParses('start =/*\n*/"abcd"', simpleGrammar);
grammarParserParses('start =/***/"abcd"', simpleGrammar); parserParses('start =/***/"abcd"', simpleGrammar);
grammarParserParses('start =/*a/*/"abcd"', simpleGrammar); parserParses('start =/*a/*/"abcd"', simpleGrammar);
grammarParserDoesNotParse('start =/*"abcd"'); parserDoesNotParse('start =/*"abcd"');
grammarParserDoesNotParse('start =/*/"abcd"'); parserDoesNotParse('start =/*/"abcd"');
grammarParserDoesNotParse('start =/*/**/*/"abcd"'); parserDoesNotParse('start =/*/**/*/"abcd"');
}); });
/* Canonical eol is "\n". */ /* Canonical eol is "\n". */
test("parses eol", function() { test("parses eol", function() {
grammarParserParses('start =\n"abcd"', simpleGrammar); parserParses('start =\n"abcd"', simpleGrammar);
grammarParserParses('start =\r\n"abcd"', simpleGrammar); parserParses('start =\r\n"abcd"', simpleGrammar);
grammarParserParses('start =\r"abcd"', simpleGrammar); parserParses('start =\r"abcd"', simpleGrammar);
grammarParserParses('start =\u2028"abcd"', simpleGrammar); parserParses('start =\u2028"abcd"', simpleGrammar);
grammarParserParses('start =\u2029"abcd"', simpleGrammar); parserParses('start =\u2029"abcd"', simpleGrammar);
}); });
/* Canonical eolChar is "\n". */ /* Canonical eolChar is "\n". */
test("parses eolChar", function() { test("parses eolChar", function() {
grammarParserParses('start =\n"abcd"', simpleGrammar); parserParses('start =\n"abcd"', simpleGrammar);
grammarParserParses('start =\r"abcd"', simpleGrammar); parserParses('start =\r"abcd"', simpleGrammar);
grammarParserParses('start =\u2028"abcd"', simpleGrammar); parserParses('start =\u2028"abcd"', simpleGrammar);
grammarParserParses('start =\u2029"abcd"', simpleGrammar); parserParses('start =\u2029"abcd"', simpleGrammar);
}); });
/* Canonical whitespace is " ". */ /* Canonical whitespace is " ". */
test("parses whitespace", function() { test("parses whitespace", function() {
grammarParserParses('start =\t"abcd"', simpleGrammar); parserParses('start =\t"abcd"', simpleGrammar);
/* IE does not recognize "\v". */ /* IE does not recognize "\v". */
grammarParserParses('start =\x0B"abcd"', simpleGrammar); parserParses('start =\x0B"abcd"', simpleGrammar);
grammarParserParses('start =\f"abcd"', simpleGrammar); parserParses('start =\f"abcd"', simpleGrammar);
grammarParserParses('start = "abcd"', simpleGrammar); parserParses('start = "abcd"', simpleGrammar);
grammarParserParses('start =\u00A0"abcd"', simpleGrammar); parserParses('start =\u00A0"abcd"', simpleGrammar);
grammarParserParses('start =\uFEFF"abcd"', simpleGrammar); parserParses('start =\uFEFF"abcd"', simpleGrammar);
grammarParserParses('start =\u1680"abcd"', simpleGrammar); parserParses('start =\u1680"abcd"', simpleGrammar);
grammarParserParses('start =\u180E"abcd"', simpleGrammar); parserParses('start =\u180E"abcd"', simpleGrammar);
grammarParserParses('start =\u2000"abcd"', simpleGrammar); parserParses('start =\u2000"abcd"', simpleGrammar);
grammarParserParses('start =\u2001"abcd"', simpleGrammar); parserParses('start =\u2001"abcd"', simpleGrammar);
grammarParserParses('start =\u2002"abcd"', simpleGrammar); parserParses('start =\u2002"abcd"', simpleGrammar);
grammarParserParses('start =\u2003"abcd"', simpleGrammar); parserParses('start =\u2003"abcd"', simpleGrammar);
grammarParserParses('start =\u2004"abcd"', simpleGrammar); parserParses('start =\u2004"abcd"', simpleGrammar);
grammarParserParses('start =\u2005"abcd"', simpleGrammar); parserParses('start =\u2005"abcd"', simpleGrammar);
grammarParserParses('start =\u2006"abcd"', simpleGrammar); parserParses('start =\u2006"abcd"', simpleGrammar);
grammarParserParses('start =\u2007"abcd"', simpleGrammar); parserParses('start =\u2007"abcd"', simpleGrammar);
grammarParserParses('start =\u2008"abcd"', simpleGrammar); parserParses('start =\u2008"abcd"', simpleGrammar);
grammarParserParses('start =\u2009"abcd"', simpleGrammar); parserParses('start =\u2009"abcd"', simpleGrammar);
grammarParserParses('start =\u200A"abcd"', simpleGrammar); parserParses('start =\u200A"abcd"', simpleGrammar);
grammarParserParses('start =\u202F"abcd"', simpleGrammar); parserParses('start =\u202F"abcd"', simpleGrammar);
grammarParserParses('start =\u205F"abcd"', simpleGrammar); parserParses('start =\u205F"abcd"', simpleGrammar);
grammarParserParses('start =\u3000"abcd"', simpleGrammar); parserParses('start =\u3000"abcd"', simpleGrammar);
}); });
})(this); })(this);

Loading…
Cancel
Save