UNPKG

anbani

Version:

Multifunctional javascript toolkit for Georgian Alphabet - Anbani

112 lines (91 loc) 3.99 kB
import assert from "assert"; import anbani, { core, utils, toolkit, lorem, data, ab } from "../src/anbani.mjs"; describe("core.convert", function () { it("resolves Georgian script aliases", function () { assert.strictEqual(core.convert("ანბანი", "მხედრული", "მთავრული"), "ᲐᲜᲑᲐᲜᲘ"); }); it("throws on an unsupported source script", function () { assert.throws(() => core.convert("abc", "common", "mkhedruli")); }); it("throws an Error on an unsupported target script", function () { assert.throws(() => core.convert("ანბანი", "mkhedruli", "klingon"), Error); }); it("passes through characters not in the alphabet", function () { assert.strictEqual(core.convert("ა 1 ბ", "mkhedruli", "asomtavruli"), "Ⴀ 1 Ⴁ"); }); }); describe("core.interpret", function () { it("detects a mkhedruli source", function () { assert.strictEqual(core.interpret("ანბანი", "asomtavruli"), "ႠႬႡႠႬႨ"); }); it("detects a qwerty source for latin input", function () { assert.strictEqual(core.interpret("anbani", "mkhedruli"), "ანბანი"); }); }); describe("utils", function () { it("classifyText distinguishes scripts", function () { assert.strictEqual(utils.classifyText("rostevan"), "latin"); assert.strictEqual(utils.classifyText("привет"), "cyrillic"); assert.strictEqual(utils.classifyText("ანბანი"), "mkhedruli"); }); it("classifyText detects bicameral co-occurrence", function () { assert.strictEqual(utils.classifyText("Ⴀანბანი"), "shanidziseuli"); }); it("classifyText returns 'unknown' when nothing matches", function () { assert.strictEqual(utils.classifyText("123 ..."), "unknown"); assert.strictEqual(utils.classifyText("ანბანabc"), "unknown"); }); it("cca / fcc round-trip", function () { assert.strictEqual(utils.fcc(utils.cca("ა")), "ა"); }); it("isSame compares vectors", function () { assert.ok(utils.isSame([1, 2, 3], [1, 2, 3])); assert.ok(!utils.isSame([1, 2], [1, 3])); }); it("isBicameral", function () { assert.ok(utils.isBicameral("sasataure")); assert.ok(!utils.isBicameral("mkhedruli")); }); it("detectAlphabet", function () { assert.strictEqual(utils.detectAlphabet("ანბანი", 5), "mkhedruli"); assert.strictEqual(utils.detectAlphabet("abc", 2), "qwerty"); }); }); describe("toolkit", function () { it("friedman returns 0 for too-short input", function () { assert.strictEqual(toolkit.friedman(""), 0); assert.strictEqual(toolkit.friedman("ა"), 0); }); }); describe("lorem", function () { it("names returns n 'First Last' strings", function () { const names = lorem.names(3); assert.strictEqual(names.length, 3); names.forEach((n) => assert.strictEqual(n.split(" ").length, 2)); }); it("paragraphs returns the requested number of paragraphs", function () { const p = lorem.paragraphs(5, 3); assert.strictEqual(p.trim().split("\n\n").length, 3); }); it("$ exposes random generators", function () { assert.strictEqual(typeof lorem.$.randomWord(), "string"); assert.strictEqual(typeof lorem.$.randomFirstName(), "string"); assert.strictEqual(typeof lorem.$.randomLastName(), "string"); }); }); describe("ab and data", function () { it("ab.keys lists scripts including bicameral ones", function () { assert.ok(ab.keys.includes("mkhedruli")); assert.ok(ab.keys.includes("sasataure")); assert.ok(ab.keys.includes("braille")); }); it("alphabets are length-aligned", function () { const len = data.alphabets.mkhedruli.length; assert.strictEqual(data.alphabets.asomtavruli.length, len); assert.strictEqual(data.alphabets.braille.length, len); }); it("default export bundles the modules", function () { assert.strictEqual(anbani.core, core); assert.strictEqual(anbani.ab, ab); }); });