UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

113 lines 11.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const MathInterpreter_helper_1 = require("./MathInterpreter.helper"); const HighlightParser_1 = require("../HighlightParser"); const highlightTags_1 = require("../utils/highlightTags"); // The highlight parsers largely relies on correctness of chevrotain, since it's only a light wrapper describe("HighlightParser", () => { describe("new HighlightParser", () => { it("Correctly creates new parsers for valid grammars", () => { expect(() => new MathInterpreter_helper_1.MathParser()).not.toThrow(); }); it("Warns about grammar definition errors", () => { class SomeParser extends HighlightParser_1.HighlightParser { constructor() { super(MathInterpreter_helper_1.tokenList); // Expression that is left recursive, which isn't allowed this.expression = this.RULE("expression", () => { let result = this.SUBRULE(this.expression); this.MANY(() => { const { tokenType } = this.OR([ { ALT: () => this.CONSUME(MathInterpreter_helper_1.tokens.add) }, { ALT: () => this.CONSUME(MathInterpreter_helper_1.tokens.sub) }, ]); const value = this.SUBRULE(this.expression); result = tokenType == MathInterpreter_helper_1.tokens.add ? result + value : result - value; }); return result; }); this.performSelfAnalysis(); } } expect(() => new SomeParser()).toThrow(); }); }); describe("HighlightParser.highlight", () => { let parser; beforeEach(() => { parser = new MathInterpreter_helper_1.MathParser(); }); it("Retrieves the data which can be used for syntax highlighting from the lexer", () => { const { nodes, errors } = parser.highlight("3*5"); expect(nodes[0]).toEqual({ text: "3", start: 0, end: 1, tags: [highlightTags_1.highlightTags.literal, highlightTags_1.highlightTags.number], }); expect(nodes[1]).toEqual({ text: "*", start: 1, end: 2, tags: [highlightTags_1.highlightTags.operator], }); expect(nodes[2]).toEqual({ text: "5", start: 2, end: 3, tags: [highlightTags_1.highlightTags.literal, highlightTags_1.highlightTags.number], }); expect(nodes.length).toEqual(3); expect(errors.length).toEqual(0); }); it("Retrieves tokenization errors", () => { const { nodes, errors } = parser.highlight("3*ye5"); expect(errors.length).toEqual(1); expect(errors[0]).toMatchObject({ syntaxRange: { start: 2, end: 4, text: "ye" }, }); expect(typeof errors[0].message).toEqual("string"); }); it("Retrieves grammar errors", () => { const { nodes, errors } = parser.highlight("3*)5"); expect(errors.length).toEqual(1); expect(errors[0]).toMatchObject({ syntaxRange: { start: 2, end: 3, text: ")" }, }); expect(typeof errors[0].message).toEqual("string"); }); }); describe("HighlightParser.execute", () => { it("Uses the first defined rule by default", () => { const parser = new MathInterpreter_helper_1.MathParser(); const { result, errors } = parser.execute("4+4"); expect(errors === null || errors === void 0 ? void 0 : errors.length).toBe(0); expect(result).toBe(8); }); it("Uses the init rule if specified", () => { class SomeParser extends HighlightParser_1.HighlightParser { constructor() { super(MathInterpreter_helper_1.tokenList, { startRule: "something2", }); // Expression that is left recursive, which isn't allowed this.something1 = this.RULE("something1", () => { this.CONSUME(MathInterpreter_helper_1.tokens.sub); return 3; }); this.something2 = this.RULE("something2", () => { this.CONSUME(MathInterpreter_helper_1.tokens.add); return 3; }); this.performSelfAnalysis(); } } const parser = new SomeParser(); const { result, errors } = parser.execute("+"); expect(errors === null || errors === void 0 ? void 0 : errors.length).toBe(0); expect(result).toBe(3); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGlnaGxpZ2h0UGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RleHRGaWVsZHMvc3ludGF4L190ZXN0cy9IaWdobGlnaHRQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxRUFBdUU7QUFDdkUsd0RBQW1EO0FBQ25ELDBEQUFxRDtBQUVyRCxxR0FBcUc7QUFDckcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUM3QixRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDeEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksbUNBQVUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUM3QyxNQUFNLFVBQVcsU0FBUSxpQ0FBdUI7Z0JBQzVDO29CQUNJLEtBQUssQ0FBQyxrQ0FBUyxDQUFDLENBQUM7b0JBR3JCLHlEQUF5RDtvQkFDL0MsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTt3QkFDaEQsSUFBSSxNQUFNLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOzRCQUNYLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO2dDQUN4QixFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLCtCQUFNLENBQUMsR0FBRyxDQUFDLEVBQUM7Z0NBQ3JDLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsK0JBQU0s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