Jasmine: Convert initializer tests

redux
David Majda 12 years ago
parent f5f40f68d2
commit e9f7255d47

@ -91,6 +91,19 @@ describe("generated parser", function() {
});
});
describe("initializer code", function() {
varyAll(function(options) {
it("runs before the parsing begins", function() {
var parser = PEG.buildParser([
'{ var result = 42; }',
'start = "a" { return result }'
].join("\n"), options);
expect(parser).toParse("a", 42);
});
});
});
describe("choice matching", function() {
varyAll(function(options) {
it("matches correctly", function() {
@ -227,6 +240,24 @@ describe("generated parser", function() {
expect(parser).toParse("1\u2029x", [2, 1]); // paragraph separator
});
}
it("can use variables defined in the initializer", function() {
var parser = PEG.buildParser([
'{ var v = 42 }',
'start = "a" &{ return v === 42; }'
].join("\n"), options);
expect(parser).toParse("a", ["a", ""]);
});
it("can use functions defined in the initializer", function() {
var parser = PEG.buildParser([
'{ function f() { return 42; } }',
'start = "a" &{ return f() === 42; }'
].join("\n"), options);
expect(parser).toParse("a", ["a", ""]);
});
});
});
@ -286,6 +317,24 @@ describe("generated parser", function() {
expect(parser).toParse("1\u2029x", [2, 1]); // paragraph separator
});
}
it("can use variables defined in the initializer", function() {
var parser = PEG.buildParser([
'{ var v = 42 }',
'start = "a" !{ return v !== 42; }'
].join("\n"), options);
expect(parser).toParse("a", ["a", ""]);
});
it("can use functions defined in the initializer", function() {
var parser = PEG.buildParser([
'{ function f() { return 42; } }',
'start = "a" !{ return f() !== 42; }'
].join("\n"), options);
expect(parser).toParse("a", ["a", ""]);
});
});
});
@ -387,6 +436,24 @@ describe("generated parser", function() {
});
}
it("can use variables defined in the initializer", function() {
var parser = PEG.buildParser([
'{ var v = 42 }',
'start = "a" { return v; }'
].join("\n"), options);
expect(parser).toParse("a", 42);
});
it("can use functions defined in the initializer", function() {
var parser = PEG.buildParser([
'{ function f() { return 42; } }',
'start = "a" { return f(); }'
].join("\n"), options);
expect(parser).toParse("a", 42);
});
it("does not advance position when the expression matches but the action returns |null|", function() {
var parser = PEG.buildParser(
'start = "a" { return null; } / "a"',

@ -13,44 +13,6 @@ function testWithVaryingTrackLineAndColumn(name, callback) {
);
}
testWithVaryingTrackLineAndColumn("initializer", function(options) {
var variableInActionParser = PEG.buildParser(
'{ a = 42; }; start = "a" { return a; }',
options
);
parses(variableInActionParser, "a", 42);
var functionInActionParser = PEG.buildParser(
'{ function f() { return 42; } }; start = "a" { return f(); }',
options
);
parses(functionInActionParser, "a", 42);
var variableInSemanticAndParser = PEG.buildParser(
'{ a = 42; }; start = "a" &{ return a === 42; }',
options
);
parses(variableInSemanticAndParser, "a", ["a", ""]);
var functionInSemanticAndParser = PEG.buildParser(
'{ function f() { return 42; } }; start = "a" &{ return f() === 42; }',
options
);
parses(functionInSemanticAndParser, "a", ["a", ""]);
var variableInSemanticNotParser = PEG.buildParser(
'{ a = 42; }; start = "a" !{ return a !== 42; }',
options
);
parses(variableInSemanticNotParser, "a", ["a", ""]);
var functionInSemanticNotParser = PEG.buildParser(
'{ function f() { return 42; } }; start = "a" !{ return f() !== 42; }',
options
);
parses(functionInSemanticNotParser, "a", ["a", ""]);
});
testWithVaryingTrackLineAndColumn("cache", function(options) {
var grammar = [
'{ var n = 0; }',

Loading…
Cancel
Save