aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2021-07-05 23:24:06 -0400
committerGitHub <noreply@github.com>2021-07-05 23:24:06 -0400
commite15513208584764526e2348ca7796ea665925086 (patch)
treeda165d327ec0e932e61882deeddcb81cfebc09b6
parent54808d4a2dc077a9a35924951743de12ae464b1b (diff)
OptionsUtil and tests updates (#1801)
* Update OptionsUtil.update to support an optional targetVersion param * Update Anki template updates to have an explicit target version
-rw-r--r--ext/js/data/options-util.js12
-rw-r--r--test/test-options-util.js43
2 files changed, 35 insertions, 20 deletions
diff --git a/ext/js/data/options-util.js b/ext/js/data/options-util.js
index 42175d35..4bd5e7af 100644
--- a/ext/js/data/options-util.js
+++ b/ext/js/data/options-util.js
@@ -31,7 +31,7 @@ class OptionsUtil {
this._optionsSchema = new JsonSchema(schema);
}
- async update(options) {
+ async update(options, targetVersion=null) {
// Invalid options
if (!isObject(options)) {
options = {};
@@ -84,7 +84,7 @@ class OptionsUtil {
}
// Generic updates
- options = await this._applyUpdates(options, this._getVersionUpdates());
+ options = await this._applyUpdates(options, this._getVersionUpdates(targetVersion));
// Validation
options = this._optionsSchema.getValidValueOrDefault(options);
@@ -448,8 +448,8 @@ class OptionsUtil {
return options;
}
- _getVersionUpdates() {
- return [
+ _getVersionUpdates(targetVersion) {
+ const result = [
{async: false, update: this._updateVersion1.bind(this)},
{async: false, update: this._updateVersion2.bind(this)},
{async: true, update: this._updateVersion3.bind(this)},
@@ -464,6 +464,10 @@ class OptionsUtil {
{async: true, update: this._updateVersion12.bind(this)},
{async: true, update: this._updateVersion13.bind(this)}
];
+ if (typeof targetVersion === 'number' && targetVersion < result.length) {
+ result.splice(targetVersion);
+ }
+ return result;
}
_updateVersion1(options) {
diff --git a/test/test-options-util.js b/test/test-options-util.js
index 7d86743b..986ba040 100644
--- a/test/test-options-util.js
+++ b/test/test-options-util.js
@@ -658,10 +658,10 @@ async function testFieldTemplatesUpdate(extDir) {
{version: 12, changes: loadDataFile('data/templates/anki-field-templates-upgrade-v12.handlebars')},
{version: 13, changes: loadDataFile('data/templates/anki-field-templates-upgrade-v13.handlebars')}
];
- const getUpdateAdditions = (startVersion=0) => {
+ const getUpdateAdditions = (startVersion, targetVersion) => {
let value = '';
for (const {version, changes} of updates) {
- if (version < startVersion || changes.length === 0) { continue; }
+ if (version < startVersion || version > targetVersion || changes.length === 0) { continue; }
if (value.length > 0) { value += '\n'; }
value += changes;
}
@@ -671,6 +671,8 @@ async function testFieldTemplatesUpdate(extDir) {
const data = [
// Standard format
{
+ oldVersion: 0,
+ newVersion: 12,
old: `
{{#*inline "character"}}
{{~definition.character~}}
@@ -683,11 +685,13 @@ async function testFieldTemplatesUpdate(extDir) {
{{~definition.character~}}
{{/inline}}
-${getUpdateAdditions()}
+<<<UPDATE-ADDITIONS>>>
{{~> (lookup . "marker") ~}}`.trimStart()
},
// Non-standard marker format
{
+ oldVersion: 0,
+ newVersion: 12,
old: `
{{#*inline "character"}}
{{~definition.character~}}
@@ -701,19 +705,23 @@ ${getUpdateAdditions()}
{{/inline}}
{{~> (lookup . "marker2") ~}}
-${getUpdateAdditions()}`.trimStart()
+<<<UPDATE-ADDITIONS>>>`.trimStart()
},
// Empty test
{
+ oldVersion: 0,
+ newVersion: 12,
old: `
{{~> (lookup . "marker") ~}}`.trimStart(),
expected: `
-${getUpdateAdditions()}
+<<<UPDATE-ADDITIONS>>>
{{~> (lookup . "marker") ~}}`.trimStart()
},
// Definition tags update
{
+ oldVersion: 0,
+ newVersion: 12,
old: `
{{#*inline "glossary-single"}}
{{~#unless brief~}}
@@ -779,13 +787,14 @@ ${getUpdateAdditions()}
{{~> glossary-single definition brief=brief compactGlossaries=../compactGlossaries data=../.~}}
{{/inline}}
-${getUpdateAdditions()}
+<<<UPDATE-ADDITIONS>>>
{{~> (lookup . "marker") ~}}
`.trimStart()
},
// glossary and glossary-brief update
{
oldVersion: 7,
+ newVersion: 12,
old: `
{{#*inline "glossary-single"}}
{{~#unless brief~}}
@@ -876,11 +885,11 @@ ${getUpdateAdditions()}
{{~#if only~}}({{#each only}}{{.}}{{#unless @last}}, {{/unless}}{{/each}} only) {{/if~}}
{{~/unless~}}
{{~#if (op "<=" glossary.length 1)~}}
- {{#each glossary}}{{#formatGlossary ../dictionary}}{{{.}}}{{/formatGlossary}}{{/each}}
+ {{#each glossary}}{{#multiLine}}{{.}}{{/multiLine}}{{/each}}
{{~else if @root.compactGlossaries~}}
- {{#each glossary}}{{#formatGlossary ../dictionary}}{{{.}}}{{/formatGlossary}}{{#unless @last}} | {{/unless}}{{/each}}
+ {{#each glossary}}{{#multiLine}}{{.}}{{/multiLine}}{{#unless @last}} | {{/unless}}{{/each}}
{{~else~}}
- <ul>{{#each glossary}}<li>{{#formatGlossary ../dictionary}}{{{.}}}{{/formatGlossary}}</li>{{/each}}</ul>
+ <ul>{{#each glossary}}<li>{{#multiLine}}{{.}}{{/multiLine}}</li>{{/each}}</ul>
{{~/if~}}
{{~#set "previousDictionary" dictionary~}}{{~/set~}}
{{/inline}}
@@ -919,12 +928,13 @@ ${getUpdateAdditions()}
{{~> glossary brief=true ~}}
{{/inline}}
-${getUpdateAdditions(7)}
+<<<UPDATE-ADDITIONS>>>
{{~> (lookup . "marker") ~}}`.trimStart()
},
// formatGlossary update
{
oldVersion: 12,
+ newVersion: 13,
old: `
{{~#if (op "<=" glossary.length 1)~}}
{{#each glossary}}{{#multiLine}}{{.}}{{/multiLine}}{{/each}}
@@ -945,16 +955,17 @@ ${getUpdateAdditions(7)}
}
];
- for (const {old, expected, oldVersion} of data) {
+ const updatesPattern = /<<<UPDATE-ADDITIONS>>>/g;
+ for (const {old, expected, oldVersion, newVersion} of data) {
const options = createOptionsTestData1();
options.profiles[0].options.anki.fieldTemplates = old;
- if (typeof oldVersion === 'number') {
- options.version = oldVersion;
- }
+ options.version = oldVersion;
+
+ const expected2 = expected.replace(updatesPattern, getUpdateAdditions(oldVersion, newVersion));
- const optionsUpdated = clone(await optionsUtil.update(options));
+ const optionsUpdated = clone(await optionsUtil.update(options, newVersion));
const fieldTemplatesActual = optionsUpdated.profiles[0].options.anki.fieldTemplates;
- assert.deepStrictEqual(fieldTemplatesActual, expected);
+ assert.deepStrictEqual(fieldTemplatesActual, expected2);
}
}