Browse Source

chore: unit tests for NanoEmitter and translation

Sv443 3 weeks ago
parent
commit
a6409b5292
2 changed files with 93 additions and 0 deletions
  1. 36 0
      lib/NanoEmitter.spec.ts
  2. 57 0
      lib/translation.spec.ts

+ 36 - 0
lib/NanoEmitter.spec.ts

@@ -0,0 +1,36 @@
+import { describe, expect, it } from "vitest";
+import { NanoEmitter } from "./NanoEmitter.js";
+
+describe("NanoEmitter", () => {
+  it("Functional", async () => {
+    const evts = new NanoEmitter<{
+      val: (v1: number, v2: number) => void;
+    }>({
+      publicEmit: true,
+    });
+
+    setTimeout(() => evts.emit("val", 5, 5), 1);
+    const [v1, v2] = await evts.once("val");
+    expect(v1 + v2).toBe(10);
+  });
+
+  it("Object oriented", async () => {
+    class MyEmitter extends NanoEmitter<{
+      val: (v1: number, v2: number) => void;
+    }> {
+      constructor() {
+        super({ publicEmit: false });
+      }
+
+      run() {
+        this.events.emit("val", 5, 5);
+      }
+    }
+
+    const evts = new MyEmitter();
+
+    setTimeout(() => evts.run(), 1);
+    const [v1, v2] = await evts.once("val");
+    expect(v1 + v2).toBe(10);
+  });
+});

+ 57 - 0
lib/translation.spec.ts

@@ -0,0 +1,57 @@
+import { describe, expect, it } from "vitest";
+import { tr } from "./translation.js";
+
+describe("Translation", () => {
+  //#region base
+  it("Base translation", () => {
+    tr.addTranslations("en", {
+      hello: "Hello",
+      goodbye: "Goodbye",
+    });
+    tr.addTranslations("de", {
+      hello: "Hallo",
+    });
+    expect(tr.getFallbackLanguage()).toBeUndefined();
+    tr.setFallbackLanguage("en");
+    expect(tr.getFallbackLanguage()).toBe("en");
+
+    expect(tr.for("en", "hello")).toBe("Hello");
+    expect(tr.for("de", "hello")).toBe("Hallo");
+    expect(tr.for("de", "goodbye")).toBe("Goodbye");
+
+    tr.deleteTranslations("de");
+    expect(tr.for("de", "hello")).toBe("Hello");
+
+    tr.setFallbackLanguage();
+    expect(tr.for("de", "hello")).toBe("hello");
+
+    expect(tr.getTranslations("en")?.hello).toBe("Hello");
+    expect(tr.getTranslations("de")?.hello).toBeUndefined();
+
+    const t = tr.use("en");
+    expect(t("hello")).toBe("Hello");
+  });
+
+  //#region transforms
+  it("Transforms", () => {
+    tr.addTranslations("en", {
+      percent: "Hello, %1",
+      templateLiteral: "Hello, ${name}",
+    });
+
+    expect(tr.for("en", "percent", "Jeff")).toBe("Hello, %1");
+
+    tr.addTransform(tr.transforms.percent);
+    expect(tr.for("en", "percent")).toBe("Hello, %1");
+    expect(tr.for("en", "percent", "Jeff")).toBe("Hello, Jeff");
+
+    tr.addTransform(tr.transforms.templateLiteral);
+    expect(tr.for("en", "templateLiteral")).toBe("Hello, ${name}");
+    expect(tr.for("en", "templateLiteral", "Jeff")).toBe("Hello, Jeff");
+    expect(tr.for("en", "templateLiteral", { name: "Jeff" })).toBe("Hello, Jeff");
+    expect(tr.for("en", "templateLiteral", { toString: () => "Jeff" })).toBe("Hello, Jeff");
+
+    tr.deleteTransform(tr.transforms.percent[0]);
+    expect(tr.for("en", "percent", "Jeff")).toBe("Hello, %1");
+  });
+});