fix unclosed block detection
add parser tests (codex)
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
const assert = require('node:assert/strict');
|
||||
const test = require('node:test');
|
||||
|
||||
const { EftlParser } = require('../out/parser');
|
||||
const { EftlTokenizer } = require('../out/tokenizer');
|
||||
|
||||
function parse(source) {
|
||||
const { tokens, errors: tokenizerErrors } = new EftlTokenizer(source).tokenize();
|
||||
assert.deepEqual(tokenizerErrors, []);
|
||||
return new EftlParser(tokens).parse().errors;
|
||||
}
|
||||
|
||||
test('accepts a correctly closed VAR tag', () => {
|
||||
assert.deepEqual(parse('[VAR][/VAR]'), []);
|
||||
});
|
||||
|
||||
test('reports a VAR tag without its closing tag', () => {
|
||||
assert.deepEqual(parse('[VAR]'), [{
|
||||
message: 'Unclosed tag: [VAR] (expected [/VAR])',
|
||||
line: 1,
|
||||
column: 1,
|
||||
length: 5
|
||||
}]);
|
||||
});
|
||||
|
||||
test('reports an unexpected closing tag', () => {
|
||||
const errors = parse('[/VAR]');
|
||||
|
||||
assert.equal(errors.length, 1);
|
||||
assert.match(errors[0].message, /Unexpected closing tag/);
|
||||
});
|
||||
|
||||
test('reports every unclosed nested tag at its opening token', () => {
|
||||
assert.deepEqual(parse('[EFTL]\n[VAR]'), [
|
||||
{
|
||||
message: 'Unclosed tag: [EFTL] (expected [/EFTL])',
|
||||
line: 1,
|
||||
column: 1,
|
||||
length: 6
|
||||
},
|
||||
{
|
||||
message: 'Unclosed tag: [VAR] (expected [/VAR])',
|
||||
line: 2,
|
||||
column: 1,
|
||||
length: 5
|
||||
}
|
||||
]);
|
||||
});
|
||||
Reference in New Issue
Block a user