esther-medina-quintero-parser-nearley
Version:
78 lines (67 loc) • 1.97 kB
JavaScript
// @ts-check
/**
* @description A file with the tests for the Egg lang parser
* @author AluXXX Name <alu0101434780@ull.edu.es>
* @since 13/03/2024
*/
;
const should = require('chai').should();
const { parseFromFile } = require("../index.js");
const fs = require('fs');
const { skipKeys, simpleDeb } = require('../src/utils.js');
const { expect } = require('chai');
skipKeys(['toString', "line", "offset", "lineBreaks"]);
describe('Compiler', () => {
const runTest = (testName) => {
const expected = JSON.parse(fs.readFileSync('test/ast/' + testName + '.json', {encoding: 'utf8'}));
const actual = parseFromFile('test/examples/' + testName + '.egg');
expect(actual).to.deep.equal(expected);
debugger;
};
const testList = [
// 'array',
'dodefsum',
'eof',
'fun',
'if',
'scope',
'fun-fun',
'syntax',
'fun3',
'two',
'greater-x-5',
'string',
'sum',
/* ... */
];
testList.forEach((test) => {
it(test, () => {
runTest(test);
});
});
});
describe('Compiler errors', () => {
const basePath = 'test/errors/';
const testList = [
{ name: 'unexpected-token-comma', error: /Unexpected.*token.*,/i },
{ name: 'unexpected-eof', error: /Unexpected.*EOF.*token/i },
{ name: 'unexpected-token-word', error: /Unexpected.*WORD.token/i },
{ name: 'one-err-2', error: /Unexpected.*EOF.*token/i },
{ name: 'one-err', error: /Unexpected.*WORD.token/i },
{ name: 'unbalanced', error: /Unexpected.*EOF.*token/i },
{ name: 'expcomma', error: /Unexpected.*token.*,/i}
];
const runTest = (test) => {
it(test.name, async () => {
try {
await parseFromFile(`${basePath}${test.name}.egg`)
} catch (e) {
// console.log(e);
should.equal(test.error.test(e), true)
}
});
};
testList.forEach((test) => {
runTest(test);
});
});