/*
This file is part of GNU Taler
(C) 2022 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see
*/
import test from "ava";
import * as ts from "typescript";
import { processFileForTesting } from "./potextract.js";
function wrapIntoFunction(src: string): string {
return `
function testing():VNode {
const TALER_SCREEN_ID = 5;
return ${src}
}
`;
}
function process(src: string): string {
const source = ts.createSourceFile(
"test.tsx",
wrapIntoFunction(src),
ts.ScriptTarget.ES2020,
);
return processFileForTesting(source).trim();
}
test("should extract the key from inner body", (t) => {
t.deepEqual(
process(`something`),
`#. screenid: 5
#: test.tsx:4
#, c-format
msgid "something"
msgstr ""`,
);
});
test("should support context on tags", (t) => {
t.deepEqual(
process(
`return
something
`,
),
`#. screenid: 5
#: test.tsx:5
#, c-format
msgctxt "some_context"
msgid "something"
msgstr ""`,
);
});
test("should support context on string template", (t) => {
t.deepEqual(
process(`return i18n.context("wire transfer")\`send\`;`),
`#. screenid: 5
#: test.tsx:4
#, c-format
msgctxt "wire transfer"
msgid "send"
msgstr ""`,
);
});
test("should support same message id with different context", (t) => {
t.deepEqual(
process(
`return i18n.context("wire transfer")\`send\` + i18n.context("gift")\`send\`;`,
),
`#. screenid: 5
#: test.tsx:4
#, c-format
msgctxt "wire transfer"
msgid "send"
msgstr ""
#. screenid: 5
#: test.tsx:4
#, c-format
msgctxt "gift"
msgid "send"
msgstr ""`,
);
});
test("should support on string template", (t) => {
t.deepEqual(
process(`
// comment of the translation
return i18n.str\`another key\`;`),
`#. screenid: 5
#. comment of the translation
#: test.tsx:6
#, c-format
msgid "another key"
msgstr ""`,
);
});
test("should override screen id", (t) => {
t.deepEqual(
process(`
{
const TALER_SCREEN_ID = 6;
// comment of the translation
return i18n.str\`another key\`;
}
`),
`#. screenid: 6
#. comment of the translation
#: test.tsx:8
#, c-format
msgid "another key"
msgstr ""`,
);
});