UNPKG

@ribajs/core

Version:

Core module of Riba.js

115 lines (94 loc) 3.42 kB
import { Riba } from "./index.js"; const riba = new Riba(); describe("Parsers", () => { describe("parseTemplate()", () => { it("tokenizes a text template", () => { const template = "Hello {{ user.name }}, you have {{ user.messages.unread | length }} unread messages."; const expected = [ { type: 0, value: "Hello " }, { type: 1, value: "user.name" }, { type: 0, value: ", you have " }, { type: 1, value: "user.messages.unread | length" }, { type: 0, value: " unread messages." }, ]; const results = riba.parseTemplate(template, ["{{", "}}"]); if (!results) { throw new Error("No result!"); } expect(results).toHaveLength(5); for (let i = 0; i < results.length; i++) { if (!results[i]) { throw new Error("results[i] is not defined!"); } expect(results[i].type).toEqual(expected[i].type); expect(results[i].value).toEqual(expected[i].value); } }); describe("with no binding fragments", () => { it("should return undefined", () => { const template = "Hello World!"; const results = riba.parseTemplate(template, ["{{", "}}"]); expect(results).toBeNull(); }); }); describe("with only a binding fragment", () => { it("should return a single binding token", () => { const template = "{{ user.name }}"; const expected = [{ type: 1, value: "user.name" }]; const results = riba.parseTemplate(template, ["{{", "}}"]); if (!results) { throw new Error("No result!"); } expect(results.length).toEqual(1); for (let i = 0; i < results.length; i++) { if (!results[i]) { throw new Error("results[i] is not defined!"); } expect(results[i].type).toEqual(expected[i].type); expect(results[i].value).toEqual(expected[i].value); } }); }); }); describe("parseType", () => { it("parses string primitives", () => { let token = riba.parseType("'TEST'"); expect(token.type).toEqual(0); expect(token.value).toEqual("TEST"); token = riba.parseType("'hello'"); expect(token.type).toEqual(0); expect(token.value).toEqual("hello"); token = riba.parseType(""); expect(token.type).toEqual(0); // expect(token.value).toEqual(''); }); it("parses number primitives", () => { let token = riba.parseType("3"); expect(token.type).toEqual(0); expect(token.value).toEqual(3); token = riba.parseType("3.14"); expect(token.type).toEqual(0); expect(token.value).toEqual(3.14); }); it("parses boolean primitives", () => { let token = riba.parseType("true"); expect(token.type).toEqual(0); expect(token.value).toEqual(true); token = riba.parseType("false"); expect(token.type).toEqual(0); expect(token.value).toEqual(false); }); it("parses pathes", () => { let token = riba.parseType("path"); expect(token.type).toEqual(1); expect(token.value).toEqual("path"); token = riba.parseType("dotted.path"); expect(token.type).toEqual(1); expect(token.value).toEqual("dotted.path"); token = riba.parseType("3a"); expect(token.type).toEqual(1); expect(token.value).toEqual("3a"); }); }); });