From 434abdb272e655dbb33d85bb67373da1a87852ae Mon Sep 17 00:00:00 2001 From: David Majda Date: Sat, 21 Apr 2012 11:18:23 +0200 Subject: [PATCH] Jasmine: Convert tests of parser's "sequence" rule --- spec/parser.spec.js | 51 ++++++++++++++++++++++++++++++++++++++++++--- test/parser-test.js | 23 -------------------- 2 files changed, 48 insertions(+), 26 deletions(-) diff --git a/spec/parser.spec.js b/spec/parser.spec.js index e872aee..9bf4d83 100644 --- a/spec/parser.spec.js +++ b/spec/parser.spec.js @@ -1,8 +1,18 @@ describe("PEG.js grammar parser", function() { var trivialGrammar, - literalAbcd = { type: "literal", value: "abcd", ignoreCase: false }, - optionalLiteral = { type: "optional", expression: literalAbcd }, - simpleNotLiteral = { type: "simple_not", expression: literalAbcd }; + literalAbcd = { type: "literal", value: "abcd", ignoreCase: false }, + literalEfgh = { type: "literal", value: "efgh", ignoreCase: false }, + literalIjkl = { type: "literal", value: "ijkl", ignoreCase: false }, + optionalLiteral = { type: "optional", expression: literalAbcd }, + simpleNotLiteral = { type: "simple_not", expression: literalAbcd }, + labeledAbcd = { type: "labeled", label: "a", expression: literalAbcd }, + labeledEfgh = { type: "labeled", label: "b", expression: literalEfgh }, + labeledIjkl = { type: "labeled", label: "c", expression: literalIjkl }, + sequenceEmpty = { type: "sequence", elements: [] }, + sequenceOfLabeleds = { + type: "sequence", + elements: [labeledAbcd, labeledEfgh, labeledIjkl] + }; function oneRuleGrammar(displayName, expression) { return { @@ -136,6 +146,41 @@ describe("PEG.js grammar parser", function() { }); }); + /* Canonical sequence is "\"abcd\" \"efgh\" \"ijkl\"". */ + it("parses sequence", function() { + expect('start = { code }').toParseAs( + oneRuleGrammar(null, { + type: "action", + expression: sequenceEmpty, + code: " code " + }) + ); + expect('start = a:"abcd" { code }').toParseAs( + oneRuleGrammar(null, { + type: "action", + expression: labeledAbcd, + code: " code " + }) + ); + expect('start = a:"abcd" b:"efgh" c:"ijkl" { code }').toParseAs( + oneRuleGrammar(null, { + type: "action", + expression: sequenceOfLabeleds, + code: " code " + }) + ); + + expect('start = ').toParseAs( + oneRuleGrammar(null, sequenceEmpty) + ); + expect('start = a:"abcd"').toParseAs( + oneRuleGrammar(null, labeledAbcd) + ); + expect('start = a:"abcd" b:"efgh" c:"ijkl"').toParseAs( + oneRuleGrammar(null, sequenceOfLabeleds) + ); + }); + /* Canonical labeled is "label:\"abcd\"". */ it("parses labeled", function() { expect('start = label:!"abcd"').toParseAs(oneRuleGrammar(null, { diff --git a/test/parser-test.js b/test/parser-test.js index edbebb6..fff3ef4 100644 --- a/test/parser-test.js +++ b/test/parser-test.js @@ -244,27 +244,4 @@ test("parses choice", function() { ); }); -/* Canonical sequence is "\"abcd\" \"efgh\" \"ijkl\"". */ -test("parses sequence", function() { - parserParses( - 'start = { code }', - oneRuleGrammar(action(sequenceEmpty, " code ")) - ); - parserParses( - 'start = a:"abcd" { code }', - oneRuleGrammar(action(labeledAbcd, " code ")) - ); - parserParses( - 'start = a:"abcd" e:"efgh" i:"ijkl" { code }', - oneRuleGrammar(action(sequenceLabeleds, " code ")) - ); - - parserParses('start = ', oneRuleGrammar(sequenceEmpty)); - parserParses('start = a:"abcd"', oneRuleGrammar(labeledAbcd)); - parserParses( - 'start = a:"abcd" e:"efgh" i:"ijkl"', - oneRuleGrammar(sequenceLabeleds) - ); -}); - })();