From 8ef5f08c90d79b9fda8ded3262529af03a3ebc22 Mon Sep 17 00:00:00 2001 From: David Majda Date: Mon, 30 Apr 2012 19:51:05 +0200 Subject: [PATCH] Jasmine: Convert |removeProxyRules| compiler pass tests --- .../passes/remove-proxy-rules.spec.js | 75 +++++++++ spec/index.html | 1 + .../passes/remove-proxy-rules-test.js | 152 ------------------ test/index.html | 1 - test/run | 3 +- 5 files changed, 77 insertions(+), 155 deletions(-) create mode 100644 spec/compiler/passes/remove-proxy-rules.spec.js delete mode 100644 test/compiler/passes/remove-proxy-rules-test.js diff --git a/spec/compiler/passes/remove-proxy-rules.spec.js b/spec/compiler/passes/remove-proxy-rules.spec.js new file mode 100644 index 0000000..8b9dd80 --- /dev/null +++ b/spec/compiler/passes/remove-proxy-rules.spec.js @@ -0,0 +1,75 @@ +describe("compiler pass |removeProxyRules|", function() { + var pass = PEG.compiler.passes.removeProxyRules; + + function proxyGrammar(rule) { + return [rule, 'proxy = proxied', 'proxied = "a"'].join("\n"); + } + + function expressionDetails(details) { + return { + rules: [ + { name: "start", expression: details }, + { name: "proxied" } + ] + }; + } + + var simpleDetails = expressionDetails({ expression: { name: "proxied" } }); + + it("removes proxy rule from a rule", function() { + expect(pass).toChangeAST(proxyGrammar('start = proxy'), { + startRule: "proxied", + rules: [{ name: "proxied", expression: { type: "literal" } }] + }); + }); + + it("removes proxy rule from a choice", function() { + expect(pass).toChangeAST( + proxyGrammar('start = proxy / "a" / "b"'), + expressionDetails({ alternatives: [{ name: "proxied" }, {}, {}] }) + ); + expect(pass).toChangeAST( + proxyGrammar('start = "a" / "b" / proxy'), + expressionDetails({ alternatives: [{}, {}, { name: "proxied" }] }) + ); + }); + + it("removes proxy rule from a sequence", function() { + expect(pass).toChangeAST( + proxyGrammar('start = proxy "a" "b"'), + expressionDetails({ elements: [{ name: "proxied" }, {}, {}] }) + ); + expect(pass).toChangeAST( + proxyGrammar('start = "a" "b" proxy'), + expressionDetails({ elements: [{}, {}, { name: "proxied" }] }) + ); + }); + + it("removes proxy rule from a labeled", function() { + expect(pass).toChangeAST(proxyGrammar('start = label:proxy'), simpleDetails); + }); + + it("removes proxy rule from a simple and", function() { + expect(pass).toChangeAST(proxyGrammar('start = &proxy'), simpleDetails); + }); + + it("removes proxy rule from a simple not", function() { + expect(pass).toChangeAST(proxyGrammar('start = &proxy'), simpleDetails); + }); + + it("removes proxy rule from an optional", function() { + expect(pass).toChangeAST(proxyGrammar('start = proxy?'), simpleDetails); + }); + + it("removes proxy rule from a zero or more", function() { + expect(pass).toChangeAST(proxyGrammar('start = proxy*'), simpleDetails); + }); + + it("removes proxy rule from a one or more", function() { + expect(pass).toChangeAST(proxyGrammar('start = proxy+'), simpleDetails); + }); + + it("removes proxy rule from an action", function() { + expect(pass).toChangeAST(proxyGrammar('start = proxy { }'), simpleDetails); + }); +}); diff --git a/spec/index.html b/spec/index.html index 8f864a6..caff802 100644 --- a/spec/index.html +++ b/spec/index.html @@ -11,6 +11,7 @@ + -

PEG.js Test Suite

diff --git a/test/run b/test/run index e1732c7..b6a709d 100755 --- a/test/run +++ b/test/run @@ -74,8 +74,7 @@ QUnit.done(function(details) { }); [ - "helpers.js", - "compiler/passes/remove-proxy-rules-test.js" + "helpers.js" ].forEach(function(file) { eval("with (QUnit) {" + fs.readFileSync(__dirname + "/" + file, "utf8") + "}"); });