import { Component, mount, xml } from "../../src";
import { makeTestFixture, snapshotEverything } from "../helpers";
let fixture: HTMLElement;
snapshotEverything();
beforeEach(() => {
fixture = makeTestFixture();
});
describe("translation support", () => {
test("can translate node content", async () => {
class SomeComponent extends Component {
static template = xml`
word
`;
}
await mount(SomeComponent, fixture, {
translateFn: (expr: string) => (expr === "word" ? "mot" : expr),
});
expect(fixture.innerHTML).toBe("mot
");
});
test("does not translate node content if disabled", async () => {
class SomeComponent extends Component {
static template = xml`
word
word
`;
}
await mount(SomeComponent, fixture, {
translateFn: (expr: string) => (expr === "word" ? "mot" : expr),
});
expect(fixture.innerHTML).toBe("motword
");
});
test("some attributes are translated", async () => {
class SomeComponent extends Component {
static template = xml`
`;
}
await mount(SomeComponent, fixture, {
translateFn: (expr: string) => (expr === "word" ? "mot" : expr),
});
expect(fixture.innerHTML).toBe(
''
);
});
test("can set and remove translatable attributes", async () => {
class SomeComponent extends Component {
static template = xml`
text
`;
}
await mount(SomeComponent, fixture, {
translateFn: (expr: string) => (expr === "word" ? "mot" : expr),
translatableAttributes: ["potato", "-label"],
});
expect(fixture.innerHTML).toBe(
'text
'
);
});
test("translation is done on the trimmed text, with extra spaces readded after", async () => {
class SomeComponent extends Component {
static template = xml`
word
`;
}
const translateFn = jest.fn((expr: string) => (expr === "word" ? "mot" : expr));
await mount(SomeComponent, fixture, { translateFn });
expect(fixture.innerHTML).toBe(" mot
");
expect(translateFn).toHaveBeenCalledWith("word");
});
});