UNPKG

@schukai/monster

Version:

Monster is a simple library for creating fast, robust and lightweight websites.

147 lines (106 loc) 3.84 kB
"use strict"; import {expect} from "chai" import {Pipe} from "../../../source/data/pipe.mjs"; import {initJSDOM} from "../../util/jsdom.mjs"; import {Embed} from "../../../source/i18n/providers/embed.mjs"; describe('Pipe', function () { before(function (done) { let promises = [] if (!globalThis['crypto']) { promises.push(import("@peculiar/webcrypto").then(m => { globalThis['crypto'] = new m.Crypto(); return true; })) } Promise.all(promises).then(() => { done() }); }); describe('run different pipes', function () { [ ['path:b | if:x:\\ ', {a: true}, ' '], // '\\ '.length ↦ 2 ['path:a | if:x:\\ ', {a: true}, 'x'], ['nop', 'abcdefghijklmnop', 'abcdefghijklmnop'], ].forEach(function (data) { let a = data.shift() let b = data.shift() let c = data.shift() it('Pipe.run(' + JSON.stringify(a) + ').run(' + JSON.stringify(b) + ') should return ' + JSON.stringify(c), function () { let t = new Pipe(a); const r = t.run(b); expect(r).to.be.eql(c); }); }); }); describe('new Pipe should create new Instance', function () { it('should return Instance', function () { expect(new Pipe('')).to.be.instanceOf(Pipe); }); it('should return Instance', function () { expect(new Pipe('index:a|toupper |prefix:a').run({a: "test"})).to.be.equal('aTEST'); }); [ ['index:a|toupper |prefix:a', {a: "test"}, 'aTEST'], ['path:a.b.c.d | toupper | prefix:Hello\\ ', { a: { b: { c: { d: "world" } } } }, 'Hello WORLD'], ['path:a.b.c|index:d|toupper |suffix:x', {a: {b: {c: {d: "test"}}}}, 'TESTx'], ].forEach(function (data) { let a = data.shift() let b = data.shift() let c = data.shift() it('new Pipe(' + JSON.stringify(a) + ').run(' + JSON.stringify(b) + ') should return ' + JSON.stringify(c) + ' ', function () { let t = new Pipe(a); expect(t.run(b)).to.be.equal(c); }); }); }); describe('new Pipe and locale', function () { let html1 = ` <div id="mock-translations"></div> <script type="application/json" data-monster-role="translations"> { "51": "xyz", "52": "abc", "53": "def" } </script> `; beforeEach((done) => { let mocks = document.getElementById('mocks'); mocks.innerHTML = html1; let elem = document.getElementById('mock-translations'); Embed.assignTranslationsToElement(elem).then((o) => { done() }).catch((e) => { done(e) }) }) afterEach(() => { let mocks = document.getElementById('mocks'); mocks.innerHTML = ""; }) before(function (done) { initJSDOM().then(() => { done() }); }); [ ['path:status | tostring | i18n', {status: 51}, "xyz"] ].forEach(function (data) { let pipe = data.shift() let obj = data.shift() let expected = data.shift() it('should transform(' + pipe + ').run(' + JSON.stringify(obj) + ') return ' + JSON.stringify(expected), function () { let t = new Pipe(pipe); expect(t.run(obj)).to.be.equal(expected); }); }) }) });