From d094f1da9c0bc07725a082f9805f3460515898ec Mon Sep 17 00:00:00 2001 From: Simon Dahlbacka Date: Wed, 7 Oct 2020 20:50:23 +0300 Subject: [PATCH 1/4] Add a failing testcase for #921 --- tests/unit/dom/trigger-event-test.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/unit/dom/trigger-event-test.js b/tests/unit/dom/trigger-event-test.js index e1426b7af..ec220c7e2 100644 --- a/tests/unit/dom/trigger-event-test.js +++ b/tests/unit/dom/trigger-event-test.js @@ -170,4 +170,14 @@ module('DOM Helper: triggerEvent', function (hooks) { assert.verifySteps(['inner: mouseenter', 'outer: mouseenter', 'mouseenter']); }); + + test('can trigger file event twice without error', async function (assert) { + await setupContext(context); + let fileInput = buildInstrumentedElement('input'); + fileInput.type = 'file'; + + const files = [ new File(['(⌐□_□)'], 'chucknorris.png', { type: 'image/png' }) ]; + await triggerEvent(fileInput, 'change', { files }); + await triggerEvent(fileInput, 'change', { files }); + }); }); From 6b54d640226dc0b4b62cc9b2763f727b1a1c4be1 Mon Sep 17 00:00:00 2001 From: Simon Dahlbacka Date: Wed, 21 Oct 2020 18:06:44 +0300 Subject: [PATCH 2/4] Move test to a better location --- tests/unit/dom/select-files-test.js | 18 ++++++++++++++++++ tests/unit/dom/trigger-event-test.js | 10 ---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/tests/unit/dom/select-files-test.js b/tests/unit/dom/select-files-test.js index 55e8cfd17..d11cf4292 100644 --- a/tests/unit/dom/select-files-test.js +++ b/tests/unit/dom/select-files-test.js @@ -80,4 +80,22 @@ module('DOM Helper: selectFiles', function (hooks) { assert.verifySteps(['change', 'empty']); }); + + + test('can trigger file event with same selection twice without error', async function (assert) { + element = buildInstrumentedElement('input'); + element.setAttribute('type', 'file'); + + element.addEventListener('change', e => { + assert.step(e.target.files[0].name); + }); + + await setupContext(context); + + const files = [ new File(['(⌐□_□)'], 'chucknorris.png', { type: 'image/png' }) ]; + await triggerEvent(element, 'change', { files }); + await triggerEvent(element, 'change', { files }); + + assert.verifySteps(['change', 'chucknorris.png', 'change', 'chucknorris.png']); + }); }); diff --git a/tests/unit/dom/trigger-event-test.js b/tests/unit/dom/trigger-event-test.js index ec220c7e2..e1426b7af 100644 --- a/tests/unit/dom/trigger-event-test.js +++ b/tests/unit/dom/trigger-event-test.js @@ -170,14 +170,4 @@ module('DOM Helper: triggerEvent', function (hooks) { assert.verifySteps(['inner: mouseenter', 'outer: mouseenter', 'mouseenter']); }); - - test('can trigger file event twice without error', async function (assert) { - await setupContext(context); - let fileInput = buildInstrumentedElement('input'); - fileInput.type = 'file'; - - const files = [ new File(['(⌐□_□)'], 'chucknorris.png', { type: 'image/png' }) ]; - await triggerEvent(fileInput, 'change', { files }); - await triggerEvent(fileInput, 'change', { files }); - }); }); From 3ba1dc94bd2bd6d95b25c466367fafa74e2e0b10 Mon Sep 17 00:00:00 2001 From: Simon Dahlbacka Date: Wed, 21 Oct 2020 18:07:15 +0300 Subject: [PATCH 3/4] Make configurable --- addon-test-support/@ember/test-helpers/dom/fire-event.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/addon-test-support/@ember/test-helpers/dom/fire-event.ts b/addon-test-support/@ember/test-helpers/dom/fire-event.ts index c7f4b933f..d1ee8a65f 100644 --- a/addon-test-support/@ember/test-helpers/dom/fire-event.ts +++ b/addon-test-support/@ember/test-helpers/dom/fire-event.ts @@ -262,6 +262,7 @@ function buildFileEvent( value(index: number) { return typeof index === 'number' ? this[index] : null; }, + configurable: true }); Object.defineProperty(element, 'files', { value: files, From a5ef5d8839105d64c8bf48549555e31fe767278b Mon Sep 17 00:00:00 2001 From: Simon Dahlbacka Date: Wed, 21 Oct 2020 18:14:29 +0300 Subject: [PATCH 4/4] fix linting errors --- addon-test-support/@ember/test-helpers/dom/fire-event.ts | 2 +- tests/unit/dom/select-files-test.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/addon-test-support/@ember/test-helpers/dom/fire-event.ts b/addon-test-support/@ember/test-helpers/dom/fire-event.ts index d1ee8a65f..f5a0c66a3 100644 --- a/addon-test-support/@ember/test-helpers/dom/fire-event.ts +++ b/addon-test-support/@ember/test-helpers/dom/fire-event.ts @@ -262,7 +262,7 @@ function buildFileEvent( value(index: number) { return typeof index === 'number' ? this[index] : null; }, - configurable: true + configurable: true, }); Object.defineProperty(element, 'files', { value: files, diff --git a/tests/unit/dom/select-files-test.js b/tests/unit/dom/select-files-test.js index d11cf4292..763f67449 100644 --- a/tests/unit/dom/select-files-test.js +++ b/tests/unit/dom/select-files-test.js @@ -81,7 +81,6 @@ module('DOM Helper: selectFiles', function (hooks) { assert.verifySteps(['change', 'empty']); }); - test('can trigger file event with same selection twice without error', async function (assert) { element = buildInstrumentedElement('input'); element.setAttribute('type', 'file'); @@ -92,7 +91,7 @@ module('DOM Helper: selectFiles', function (hooks) { await setupContext(context); - const files = [ new File(['(⌐□_□)'], 'chucknorris.png', { type: 'image/png' }) ]; + const files = [new File(['(⌐□_□)'], 'chucknorris.png', { type: 'image/png' })]; await triggerEvent(element, 'change', { files }); await triggerEvent(element, 'change', { files });