add support for unicode angle brackets, single vertical bar, double vertical bar (#1123)

* add support for unicode angle brackets

* add tests, remove vertical bar changes

* fix 'message not a function' errors
This commit is contained in:
Kevin Barabash
2018-01-31 20:03:16 -05:00
committed by GitHub
parent 684df05a86
commit 603f12df8d
6 changed files with 82 additions and 23 deletions

View File

@@ -17,13 +17,13 @@ beforeEach(function() {
parseTree(actual, defaultSettings);
return {
pass: false,
message: "'" + actual + "' parsed without error",
message: () => "'" + actual + "' parsed without error",
};
} catch (e) {
if (expected === undefined) {
return {
pass: true,
message: "'" + actual + "' parsed with error",
message: () => "'" + actual + "' parsed with error",
};
}
const msg = e.message;
@@ -31,20 +31,20 @@ beforeEach(function() {
if (msg === exp) {
return {
pass: true,
message: "'" + actual + "'" +
message: () => "'" + actual + "'" +
" parsed with error '" + expected + "'",
};
} else if (msg.slice(0, 19) === prefix) {
return {
pass: false,
message: "'" + actual + "'" +
message: () => "'" + actual + "'" +
" parsed with error '" + msg.slice(19) +
"' but expected '" + expected + "'",
};
} else {
return {
pass: false,
message: "'" + actual + "'" +
message: () => "'" + actual + "'" +
" caused error '" + msg +
"' but expected '" + exp + "'",
};

View File

@@ -107,6 +107,21 @@ const parseAndSetResult = function(expr, result, settings) {
}
};
const buildAndSetResult = function(expr, result, settings) {
try {
return _getBuilt(expr, settings || defaultSettings);
} catch (e) {
result.pass = false;
if (e instanceof ParseError) {
result.message = "'" + expr + "' failed " +
"parsing with error: " + e.message;
} else {
result.message = "'" + expr + "' failed " +
"parsing with unknown error: " + e.message;
}
}
};
beforeEach(function() {
expect.extend({
toParse: function(actual, settings) {
@@ -114,7 +129,7 @@ beforeEach(function() {
const result = {
pass: true,
message: "'" + actual + "' succeeded parsing",
message: () => "'" + actual + "' succeeded parsing",
};
parseAndSetResult(actual, result, usedSettings);
return result;
@@ -125,7 +140,7 @@ beforeEach(function() {
const result = {
pass: false,
message: "Expected '" + actual + "' to fail " +
message: () => "Expected '" + actual + "' to fail " +
"parsing, but it succeeded",
};
@@ -150,7 +165,7 @@ beforeEach(function() {
const result = {
pass: true,
message: "'" + actual + "' succeeded in building",
message: () => "'" + actual + "' succeeded in building",
};
expect(actual).toParse(usedSettings);
@@ -176,7 +191,7 @@ beforeEach(function() {
const result = {
pass: true,
message: "Parse trees of '" + actual +
message: () => "Parse trees of '" + actual +
"' and '" + expected + "' are equivalent",
};
@@ -196,7 +211,38 @@ beforeEach(function() {
if (JSON.stringify(actualTree) !== JSON.stringify(expectedTree)) {
result.pass = false;
result.message = "Parse trees of '" + actual +
result.message = () => "Parse trees of '" + actual +
"' and '" + expected + "' are not equivalent";
}
return result;
},
toBuildLike: function(actual, expected, settings) {
const usedSettings = settings ? settings : defaultSettings;
const result = {
pass: true,
message: () => "Build trees of '" + actual +
"' and '" + expected + "' are equivalent",
};
const actualTree = buildAndSetResult(actual, result,
usedSettings);
if (!actualTree) {
return result;
}
const expectedTree = buildAndSetResult(expected, result,
usedSettings);
if (!expectedTree) {
return result;
}
stripPositions(actualTree);
stripPositions(expectedTree);
if (JSON.stringify(actualTree) !== JSON.stringify(expectedTree)) {
result.pass = false;
result.message = () => "Parse trees of '" + actual +
"' and '" + expected + "' are not equivalent";
}
return result;
@@ -1212,6 +1258,19 @@ describe("A left/right parser", function() {
});
});
describe("left/right builder", () => {
const cases = [
['\\left\\langle \\right\\rangle', '\\left< \\right>'],
['\\left\\langle \\right\\rangle', '\\left\u27e8 \\right\u27e9'],
];
for (const [actual, expected] of cases) {
it(`should build "${actual}" like "${expected}"`, () => {
expect(actual).toBuildLike(expected);
});
}
});
describe("A begin/end parser", function() {
it("should parse a simple environment", function() {

View File

@@ -16,10 +16,10 @@ const parseAndSetResult = function(expr, result, settings) {
} catch (e) {
result.pass = false;
if (e instanceof ParseError) {
result.message = "'" + expr + "' failed " +
result.message = () => "'" + expr + "' failed " +
"parsing with error: " + e.message;
} else {
result.message = "'" + expr + "' failed " +
result.message = () => "'" + expr + "' failed " +
"parsing with unknown error: " + e.message;
}
}
@@ -34,7 +34,7 @@ describe("unicode", function() {
const result = {
pass: true,
message: "'" + actual + "' succeeded parsing",
message: () => "'" + actual + "' succeeded parsing",
};
parseAndSetResult(actual, result, usedSettings);
return result;
@@ -45,7 +45,7 @@ describe("unicode", function() {
const result = {
pass: false,
message: "Expected '" + actual + "' to fail " +
message: () => "Expected '" + actual + "' to fail " +
"parsing, but it succeeded",
};
@@ -54,10 +54,10 @@ describe("unicode", function() {
} catch (e) {
if (e instanceof ParseError) {
result.pass = true;
result.message = "'" + actual + "' correctly " +
result.message = () => "'" + actual + "' correctly " +
"didn't parse with error: " + e.message;
} else {
result.message = "'" + actual + "' failed " +
result.message = () => "'" + actual + "' failed " +
"parsing with unknown error: " + e.message;
}
}