diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-07-05 23:24:06 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-05 23:24:06 -0400 | 
| commit | e15513208584764526e2348ca7796ea665925086 (patch) | |
| tree | da165d327ec0e932e61882deeddcb81cfebc09b6 | |
| parent | 54808d4a2dc077a9a35924951743de12ae464b1b (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.js | 12 | ||||
| -rw-r--r-- | test/test-options-util.js | 43 | 
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);      }  } |