From 2353398bab6fc13e51108cc7bce6c6081b5f5439 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Tue, 7 Aug 2018 19:05:20 -0400 Subject: [PATCH 1/4] Ensure tests run minimally transpiled. --- tests/dummy/config/targets.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 tests/dummy/config/targets.js diff --git a/tests/dummy/config/targets.js b/tests/dummy/config/targets.js new file mode 100644 index 00000000000..2e8b5f14f4a --- /dev/null +++ b/tests/dummy/config/targets.js @@ -0,0 +1,13 @@ +'use strict'; + +const browsers = ['last 1 Chrome versions', 'last 1 Firefox versions', 'last 1 Safari versions']; + +const needsIE11 = !!process.env.TARGET_IE11; + +if (needsIE11) { + browsers.push('ie 11'); +} + +module.exports = { + browsers, +}; From c8acd36a11509b71f89c1ebda0697977bc5eefc2 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Tue, 7 Aug 2018 19:19:36 -0400 Subject: [PATCH 2/4] Add specific test run for full transpilation. --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index 08df190252f..27582faad4e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,6 +47,11 @@ jobs: install: yarn install --no-lockfile --non-interactive script: yarn test + - name: "Max Transpilation" + install: yarn install + env: TARGET_IE11=true + script: yarn test + - env: NAME=production # used only to make Travis UI show description install: yarn install script: yarn test:production From 1ec36d9a4ecfa3cf1dcb011e97a7040d65efea08 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Tue, 7 Aug 2018 19:19:55 -0400 Subject: [PATCH 3/4] [BUGFIX beta] Prevent transpilation issues with @ember/ordered-set. --- .../system/model/internal-model.js | 2 +- addon/-private/system/ordered-set.js | 47 ++++++++----------- .../system/model/internal-model.js | 2 +- 3 files changed, 22 insertions(+), 29 deletions(-) diff --git a/addon/-legacy-private/system/model/internal-model.js b/addon/-legacy-private/system/model/internal-model.js index b162c058317..73d53c4c2cd 100644 --- a/addon/-legacy-private/system/model/internal-model.js +++ b/addon/-legacy-private/system/model/internal-model.js @@ -181,7 +181,7 @@ export default class InternalModel { get _recordArrays() { if (this.__recordArrays === null) { - this.__recordArrays = OrderedSet.create(); + this.__recordArrays = new OrderedSet(); } return this.__recordArrays; } diff --git a/addon/-private/system/ordered-set.js b/addon/-private/system/ordered-set.js index 27a6205057c..0dcf16433fa 100644 --- a/addon/-private/system/ordered-set.js +++ b/addon/-private/system/ordered-set.js @@ -1,37 +1,30 @@ import EmberOrderedSet from '@ember/ordered-set'; import { guidFor } from '@ember/object/internals'; -export default function OrderedSet() { - this._super$constructor(); -} +export default class EmberDataOrderedSet extends EmberOrderedSet { + static create() { + return new this(); + } -OrderedSet.create = function() { - let Constructor = this; - return new Constructor(); -}; + addWithIndex(obj, idx) { + let guid = guidFor(obj); + let presenceSet = this.presenceSet; + let list = this.list; -OrderedSet.prototype = Object.create(EmberOrderedSet.prototype); -OrderedSet.prototype.constructor = OrderedSet; -OrderedSet.prototype._super$constructor = EmberOrderedSet; + if (presenceSet[guid] === true) { + return; + } -OrderedSet.prototype.addWithIndex = function(obj, idx) { - let guid = guidFor(obj); - let presenceSet = this.presenceSet; - let list = this.list; + presenceSet[guid] = true; - if (presenceSet[guid] === true) { - return; - } + if (idx === undefined || idx === null) { + list.push(obj); + } else { + list.splice(idx, 0, obj); + } - presenceSet[guid] = true; + this.size += 1; - if (idx === undefined || idx === null) { - list.push(obj); - } else { - list.splice(idx, 0, obj); + return this; } - - this.size += 1; - - return this; -}; +} diff --git a/addon/-record-data-private/system/model/internal-model.js b/addon/-record-data-private/system/model/internal-model.js index b13bf977129..39728e2b0b5 100644 --- a/addon/-record-data-private/system/model/internal-model.js +++ b/addon/-record-data-private/system/model/internal-model.js @@ -145,7 +145,7 @@ export default class InternalModel { get _recordArrays() { if (this.__recordArrays === null) { - this.__recordArrays = OrderedSet.create(); + this.__recordArrays = new OrderedSet(); } return this.__recordArrays; } From 81decd0ae6735c5240df7a26b03c2ab92bc95771 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Wed, 8 Aug 2018 10:21:48 -0400 Subject: [PATCH 4/4] Fix ES compatibility issues. These cases were all previously working due to transpilation from `let` to `var`. You *cannot* reference a block scoped variable (`let` / `const`) during the variables own initializer. --- tests/integration/store-test.js | 4 ++-- tests/unit/model-test.js | 14 +++++++------- tests/unit/model/rollback-attributes-test.js | 8 ++++++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/tests/integration/store-test.js b/tests/integration/store-test.js index 207b653e201..175bf80c4da 100644 --- a/tests/integration/store-test.js +++ b/tests/integration/store-test.js @@ -174,9 +174,9 @@ test('destroying the store correctly cleans everything up', function(assert) { }; let adapterPopulatedPeople = run(() => { - return (adapterPopulatedPeople = store.query('person', { + return store.query('person', { someCrazy: 'query', - })); + }); }); let adapterPopulatedPeopleWillDestroy = tap(adapterPopulatedPeople.get('content'), 'willDestroy'); diff --git a/tests/unit/model-test.js b/tests/unit/model-test.js index 9a8c00c256c..22fcbc35d1e 100644 --- a/tests/unit/model-test.js +++ b/tests/unit/model-test.js @@ -889,10 +889,10 @@ test(`a DS.model can define 'setUnknownProperty'`, function(assert) { }); let tag = run(() => { - tag = store.createRecord('tag', { name: 'old' }); - set(tag, 'title', 'new'); + let record = store.createRecord('tag', { name: 'old' }); + set(record, 'title', 'new'); - return tag; + return record; }); assert.equal(get(tag, 'name'), 'new', 'setUnknownProperty not triggered'); @@ -963,12 +963,12 @@ test('setting a property to undefined on a newly created record should not impac }); let tag = run(() => { - tag = store.createRecord('tag'); + let record = store.createRecord('tag'); - set(tag, 'name', 'testing'); - set(tag, 'name', undefined); + set(record, 'name', 'testing'); + set(record, 'name', undefined); - return tag; + return record; }); assert.equal(get(tag, 'currentState.stateName'), 'root.loaded.created.uncommitted'); diff --git a/tests/unit/model/rollback-attributes-test.js b/tests/unit/model/rollback-attributes-test.js index 9cd25a23988..13aa1f365c1 100644 --- a/tests/unit/model/rollback-attributes-test.js +++ b/tests/unit/model/rollback-attributes-test.js @@ -32,7 +32,9 @@ module('unit/model/rollbackAttributes - model.rollbackAttributes()', { }); test('changes to attributes can be rolled back', function(assert) { - let person = run(() => { + let person; + + run(() => { store.push({ data: { type: 'person', @@ -59,7 +61,9 @@ test('changes to attributes can be rolled back', function(assert) { }); test('changes to unassigned attributes can be rolled back', function(assert) { - let person = run(() => { + let person; + + run(() => { store.push({ data: { type: 'person',