108 lines
4.3 KiB
TypeScript
108 lines
4.3 KiB
TypeScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import {
|
|
buildCavemanOutputInstruction,
|
|
detectCompressionLanguage,
|
|
loadAllRulesForLanguage,
|
|
} from "../../../open-sse/services/compression/index.ts";
|
|
import { applyRulesToText } from "../../../open-sse/services/compression/caveman.ts";
|
|
import { getRulesForContext } from "../../../open-sse/services/compression/cavemanRules.ts";
|
|
|
|
const LANGUAGES = ["pt-BR", "es", "de", "fr", "ja", "id"];
|
|
|
|
describe("Caveman language packs", () => {
|
|
it("ships 6 language packs with at least 15 rules each", () => {
|
|
for (const language of LANGUAGES) {
|
|
const rules = loadAllRulesForLanguage(language, { refresh: true });
|
|
assert.ok(rules.length >= 15, `${language} expected 15+ rules, got ${rules.length}`);
|
|
assert.ok(
|
|
rules.some((rule) => rule.category === "filler"),
|
|
`${language} missing filler`
|
|
);
|
|
assert.ok(
|
|
rules.some((rule) => rule.category === "context"),
|
|
`${language} missing context`
|
|
);
|
|
assert.ok(
|
|
rules.some((rule) => rule.category === "structural"),
|
|
`${language} missing structural`
|
|
);
|
|
}
|
|
});
|
|
|
|
it("detects supported languages", () => {
|
|
assert.equal(detectCompressionLanguage("preciso corrigir este arquivo com erro"), "pt-BR");
|
|
assert.equal(detectCompressionLanguage("necesito corregir este archivo con error"), "es");
|
|
assert.equal(detectCompressionLanguage("ich brauche diese konfiguration"), "de");
|
|
assert.equal(detectCompressionLanguage("j'ai besoin de corriger cette erreur fichier"), "fr");
|
|
assert.equal(detectCompressionLanguage("このコードを修正してください"), "ja");
|
|
assert.equal(detectCompressionLanguage("bisa tolong jelaskan tentang database ini"), "id");
|
|
});
|
|
|
|
it("applies non-English rule packs to golden samples", () => {
|
|
const ptRules = getRulesForContext("user", "full", "pt-BR");
|
|
const { text } = applyRulesToText("por favor segue o código: const auth = true", ptRules);
|
|
|
|
assert.ok(!text.toLowerCase().includes("por favor"));
|
|
assert.ok(text.includes("Código:"));
|
|
assert.ok(text.includes("auth"));
|
|
});
|
|
|
|
it("keeps the Spanish pack aligned with English rule categories", () => {
|
|
const esRules = loadAllRulesForLanguage("es", { refresh: true });
|
|
assert.ok(esRules.length >= 40, `es expected 40+ rules, got ${esRules.length}`);
|
|
assert.ok(
|
|
esRules.some((rule) => rule.category === "dedup"),
|
|
"es missing dedup"
|
|
);
|
|
assert.ok(
|
|
esRules.some((rule) => rule.category === "ultra"),
|
|
"es missing ultra"
|
|
);
|
|
assert.ok(
|
|
esRules.some((rule) => rule.category === "terse"),
|
|
"es missing terse"
|
|
);
|
|
});
|
|
|
|
it("applies expanded Spanish rules without touching technical terms", () => {
|
|
const esRules = getRulesForContext("user", "ultra", "es");
|
|
const { text } = applyRulesToText(
|
|
"Por favor proporciona una explicación detallada de la base de datos y autenticación en src/auth.ts",
|
|
esRules
|
|
);
|
|
|
|
assert.ok(!text.toLowerCase().includes("por favor"));
|
|
assert.ok(!text.toLowerCase().includes("explicación detallada"));
|
|
assert.ok(text.includes("BD"));
|
|
assert.ok(text.includes("auth"));
|
|
assert.ok(text.includes("src/auth.ts"));
|
|
});
|
|
|
|
it("applies Indonesian rules without touching technical terms", () => {
|
|
const idRules = getRulesForContext("user", "ultra", "id");
|
|
const { text } = applyRulesToText(
|
|
"Tolong berikan penjelasan detail tentang basis data dan autentikasi di src/auth.ts",
|
|
idRules
|
|
);
|
|
|
|
assert.ok(!text.toLowerCase().includes("tolong"));
|
|
assert.ok(!text.toLowerCase().includes("penjelasan detail"));
|
|
assert.ok(text.includes("DB"));
|
|
assert.ok(text.includes("auth"));
|
|
assert.ok(text.includes("src/auth.ts"));
|
|
});
|
|
|
|
it("builds localized output mode instructions", () => {
|
|
const config = { enabled: true, intensity: "full" as const, autoClarity: true };
|
|
|
|
assert.match(buildCavemanOutputInstruction(config, "pt-BR"), /Responda/);
|
|
assert.match(buildCavemanOutputInstruction(config, "es"), /Responde/);
|
|
assert.match(buildCavemanOutputInstruction(config, "de"), /Antworte/);
|
|
assert.match(buildCavemanOutputInstruction(config, "fr"), /Reponds/);
|
|
assert.match(buildCavemanOutputInstruction(config, "ja"), /回答/);
|
|
assert.match(buildCavemanOutputInstruction(config, "id"), /Jawab/);
|
|
});
|
|
});
|