Skip to content

Commit ea60f0e

Browse files
authoredOct 20, 2020
Merge pull request #924 from nag5000/fix/setting-empty-value-clears-files
2 parents e1cb9b4 + 0baeffc commit ea60f0e

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed
 

‎addon-test-support/@ember/test-helpers/dom/fire-event.ts

+19
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,25 @@ function buildFileEvent(
267267
value: files,
268268
configurable: true,
269269
});
270+
271+
let elementProto = Object.getPrototypeOf(element);
272+
let valueProp = Object.getOwnPropertyDescriptor(elementProto, 'value');
273+
Object.defineProperty(element, 'value', {
274+
configurable: true,
275+
get() {
276+
return valueProp!.get!.call(element);
277+
},
278+
set(value) {
279+
valueProp!.set!.call(element, value);
280+
281+
// We are sure that the value is empty here.
282+
// For a non-empty value the original setter must raise an exception.
283+
Object.defineProperty(element, 'files', {
284+
configurable: true,
285+
value: [],
286+
});
287+
},
288+
});
270289
}
271290

272291
Object.defineProperty(event, 'target', {

‎tests/unit/dom/select-files-test.js

+16
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,20 @@ module('DOM Helper: selectFiles', function (hooks) {
8080

8181
assert.verifySteps(['change', 'empty']);
8282
});
83+
84+
test('setting an empty value resets selected files', async function (assert) {
85+
element = buildInstrumentedElement('input');
86+
element.setAttribute('type', 'file');
87+
88+
element.addEventListener('change', e => {
89+
assert.step(e.target.files[0].name);
90+
});
91+
92+
await setupContext(context);
93+
await triggerEvent(element, 'change', { files: [imageFile] });
94+
element.value = '';
95+
96+
assert.verifySteps(['change', 'image-file.png']);
97+
assert.equal(element.files.length, 0, 'Files should be empty');
98+
});
8399
});

0 commit comments

Comments
 (0)
Please sign in to comment.