You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
"use strict";
|
|
|
|
let chai = require("chai");
|
|
let helpers = require("./helpers");
|
|
let peg = require("../../../../lib/peg");
|
|
|
|
chai.use(helpers);
|
|
|
|
let expect = chai.expect;
|
|
|
|
describe("compiler pass |removeProxyRules|", function() {
|
|
let pass = peg.compiler.passes.transform.removeProxyRules;
|
|
|
|
describe("when a proxy rule isn't listed in |allowedStartRules|", function() {
|
|
it("updates references and removes it", function() {
|
|
expect(pass).to.changeAST(
|
|
[
|
|
"start = proxy",
|
|
"proxy = proxied",
|
|
"proxied = 'a'"
|
|
].join("\n"),
|
|
{
|
|
rules: [
|
|
{
|
|
name: "start",
|
|
expression: { type: "rule_ref", name: "proxied" }
|
|
},
|
|
{ name: "proxied" }
|
|
]
|
|
},
|
|
{ allowedStartRules: ["start"] }
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("when a proxy rule is listed in |allowedStartRules|", function() {
|
|
it("updates references but doesn't remove it", function() {
|
|
expect(pass).to.changeAST(
|
|
[
|
|
"start = proxy",
|
|
"proxy = proxied",
|
|
"proxied = 'a'"
|
|
].join("\n"),
|
|
{
|
|
rules: [
|
|
{
|
|
name: "start",
|
|
expression: { type: "rule_ref", name: "proxied" }
|
|
},
|
|
{
|
|
name: "proxy",
|
|
expression: { type: "rule_ref", name: "proxied" }
|
|
},
|
|
{ name: "proxied" }
|
|
]
|
|
},
|
|
{ allowedStartRules: ["start", "proxy"] }
|
|
);
|
|
});
|
|
});
|
|
});
|