From 043ac79203abbc9c7f3aa971e2de8ddedb3c0e90 Mon Sep 17 00:00:00 2001 From: StefanVukovic99 Date: Mon, 12 Feb 2024 07:18:48 +0100 Subject: add cumulative handlebars upgrades test (#672) * add cumulative test * undo delete line * old templates from v2 to v1 * move test handlebars data to templates folder --------- Co-authored-by: Darius Jahandarie --- .../old-default-anki-field-templates.handlebars | 169 +++++++++++++++++++++ test/options-util.test.js | 37 +++++ 2 files changed, 206 insertions(+) create mode 100644 test/data/templates/old-default-anki-field-templates.handlebars (limited to 'test') diff --git a/test/data/templates/old-default-anki-field-templates.handlebars b/test/data/templates/old-default-anki-field-templates.handlebars new file mode 100644 index 00000000..42deae23 --- /dev/null +++ b/test/data/templates/old-default-anki-field-templates.handlebars @@ -0,0 +1,169 @@ +{{#*inline "glossary-single"}} + {{~#unless brief~}} + {{~#if definitionTags~}}({{#each definitionTags}}{{name}}{{#unless @last}}, {{/unless}}{{/each}}) {{/if~}} + {{~#if only~}}({{#each only}}{{{.}}}{{#unless @last}}, {{/unless}}{{/each}} only) {{/if~}} + {{~/unless~}} + {{~#if glossary.[1]~}} + {{~#if compactGlossaries~}} + {{#each glossary}}{{#multiLine}}{{.}}{{/multiLine}}{{#unless @last}} | {{/unless}}{{/each}} + {{~else~}} + + {{~/if~}} + {{~else~}} + {{~#multiLine}}{{glossary.[0]}}{{/multiLine~}} + {{~/if~}} +{{/inline}} + +{{#*inline "audio"}} + {{~#if definition.audioFileName~}} + [sound:{{definition.audioFileName}}] + {{~/if~}} +{{/inline}} + +{{#*inline "character"}} + {{~definition.character~}} +{{/inline}} + +{{#*inline "dictionary"}} + {{~definition.dictionary~}} +{{/inline}} + +{{#*inline "expression"}} + {{~#if merge~}} + {{~#if modeTermKana~}} + {{~#each definition.reading~}} + {{{.}}} + {{~#unless @last}}、{{/unless~}} + {{~else~}} + {{~#each definition.expression~}} + {{{.}}} + {{~#unless @last}}、{{/unless~}} + {{~/each~}} + {{~/each~}} + {{~else~}} + {{~#each definition.expression~}} + {{{.}}} + {{~#unless @last}}、{{/unless~}} + {{~/each~}} + {{~/if~}} + {{~else~}} + {{~#if modeTermKana~}} + {{~#if definition.reading~}} + {{definition.reading}} + {{~else~}} + {{definition.expression}} + {{~/if~}} + {{~else~}} + {{definition.expression}} + {{~/if~}} + {{~/if~}} +{{/inline}} + +{{#*inline "furigana"}} + {{~#if merge~}} + {{~#each definition.expressions~}} + {{~#furigana}}{{{.}}}{{/furigana~}} + {{~#unless @last}}、{{/unless~}} + {{~/each~}} + {{~else~}} + {{#furigana}}{{{definition}}}{{/furigana}} + {{~/if~}} +{{/inline}} + +{{#*inline "furigana-plain"}} + {{~#if merge~}} + {{~#each definition.expressions~}} + {{~#furiganaPlain}}{{{.}}}{{/furiganaPlain~}} + {{~#unless @last}}、{{/unless~}} + {{~/each~}} + {{~else~}} + {{#furiganaPlain}}{{{definition}}}{{/furiganaPlain}} + {{~/if~}} +{{/inline}} + +{{#*inline "glossary"}} +
+ {{~#if modeKanji~}} + {{~#if definition.glossary.[1]~}} +
    {{#each definition.glossary}}
  1. {{.}}
  2. {{/each}}
+ {{~else~}} + {{definition.glossary.[0]}} + {{~/if~}} + {{~else~}} + {{~#if group~}} + {{~#if definition.definitions.[1]~}} +
    {{#each definition.definitions}}
  1. {{> glossary-single brief=../brief compactGlossaries=../compactGlossaries}}
  2. {{/each}}
+ {{~else~}} + {{~> glossary-single definition.definitions.[0] brief=brief compactGlossaries=compactGlossaries~}} + {{~/if~}} + {{~else if merge~}} + {{~#if definition.definitions.[1]~}} +
    {{#each definition.definitions}}
  1. {{> glossary-single brief=../brief compactGlossaries=../compactGlossaries}}
  2. {{/each}}
+ {{~else~}} + {{~> glossary-single definition.definitions.[0] brief=brief compactGlossaries=compactGlossaries~}} + {{~/if~}} + {{~else~}} + {{~> glossary-single definition brief=brief compactGlossaries=compactGlossaries~}} + {{~/if~}} + {{~/if~}} +
+{{/inline}} + +{{#*inline "glossary-brief"}} + {{~> glossary brief=true ~}} +{{/inline}} + +{{#*inline "kunyomi"}} + {{~#each definition.kunyomi}}{{.}}{{#unless @last}}, {{/unless}}{{/each~}} +{{/inline}} + +{{#*inline "onyomi"}} + {{~#each definition.onyomi}}{{.}}{{#unless @last}}, {{/unless}}{{/each~}} +{{/inline}} + +{{#*inline "reading"}} + {{~#unless modeTermKana~}} + {{~#if merge~}} + {{~#each definition.reading~}} + {{{.}}} + {{~#unless @last}}、{{/unless~}} + {{~/each~}} + {{~else~}} + {{~definition.reading~}} + {{~/if~}} + {{~/unless~}} +{{/inline}} + +{{#*inline "sentence"}} + {{~#if definition.cloze}}{{definition.cloze.sentence}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-prefix"}} + {{~#if definition.cloze}}{{definition.cloze.prefix}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-body"}} + {{~#if definition.cloze}}{{definition.cloze.body}}{{/if~}} +{{/inline}} + +{{#*inline "cloze-suffix"}} + {{~#if definition.cloze}}{{definition.cloze.suffix}}{{/if~}} +{{/inline}} + +{{#*inline "tags"}} + {{~#mergeTags definition group merge}}{{this}}{{/mergeTags~}} +{{/inline}} + +{{#*inline "url"}} + {{definition.url}} +{{/inline}} + +{{#*inline "screenshot"}} + +{{/inline}} + +{{#*inline "document-title"}} + {{~context.document.title~}} +{{/inline}} + +{{~> (lookup . "marker") ~}} diff --git a/test/options-util.test.js b/test/options-util.test.js index 8fe0e212..78ac0009 100644 --- a/test/options-util.test.js +++ b/test/options-util.test.js @@ -627,6 +627,42 @@ async function testUpdate() { }); } +/** */ +async function testCumulativeFieldTemplatesUpdates() { + /** + * @param {string} templates + * @returns {Map} + */ + const getHandlebarsPartials = (templates) => { + const inlinePartialRegex = /{{~?#\*inline .*?"([^"]*)"~?}}.*?{{~?\/inline~?}}/gs; + const matches = templates.matchAll(inlinePartialRegex); + const partials = new Map(); + for (const match of matches) { + const [template, name] = match; + partials.set(name, template); + } + return partials; + }; + test('CumulativeFieldTemplatesUpdates', async () => { + const optionsUtil = new OptionsUtil(); + await optionsUtil.prepare(); + + const options = /** @type {import('core').SafeAny} */ (createOptionsTestData1()); + + const oldAnkiFieldTemplates = fs.readFileSync(path.join(dirname, 'data', 'templates', 'old-default-anki-field-templates.handlebars'), {encoding: 'utf8'}); + const defaultAnkiFieldTemplates = fs.readFileSync(path.join(dirname, '..', 'ext', 'data', 'templates', 'default-anki-field-templates.handlebars'), {encoding: 'utf8'}); + + options.profiles[0].options.anki.fieldTemplates = oldAnkiFieldTemplates; + const optionsUpdated = structuredClone(await optionsUtil.update(options)); + const fieldTemplatesUpdated = optionsUpdated.profiles[0].options.anki.fieldTemplates || ''; + + const partialsUpdated = getHandlebarsPartials(fieldTemplatesUpdated); + const partialsExpected = getHandlebarsPartials(defaultAnkiFieldTemplates); + + expect(partialsUpdated).toStrictEqual(partialsExpected); + }); +} + /** */ async function testDefault() { describe('Default', () => { @@ -1697,6 +1733,7 @@ async function main() { await testUpdate(); await testDefault(); await testFieldTemplatesUpdate(); + await testCumulativeFieldTemplatesUpdates(); } await main(); -- cgit v1.2.3