Skip to content

Commit 95bf7de

Browse files
committed
[BUGFIX beta] Align Em.isArray behavior with Array.isArray for FileList type
1 parent de4d6b6 commit 95bf7de

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

packages/ember-runtime/lib/utils.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ const TYPE_MAP = {
1212
'[object Array]': 'array',
1313
'[object Date]': 'date',
1414
'[object RegExp]': 'regexp',
15-
'[object Object]': 'object'
15+
'[object Object]': 'object',
16+
'[object FileList]': 'filelist'
1617
};
1718

1819
const { toString } = Object.prototype;
@@ -70,6 +71,7 @@ export function isArray(obj) {
7071
| 'array' | An instance of Array |
7172
| 'regexp' | An instance of RegExp |
7273
| 'date' | An instance of Date |
74+
| 'filelist' | An instance of FileList |
7375
| 'class' | An Ember class (created using Ember.Object.extend()) |
7476
| 'instance' | An Ember object instance |
7577
| 'error' | An instance of the Error object |
@@ -91,6 +93,7 @@ export function isArray(obj) {
9193
Ember.typeOf([1, 2, 90]); // 'array'
9294
Ember.typeOf(/abc/); // 'regexp'
9395
Ember.typeOf(new Date()); // 'date'
96+
Ember.typeOf(event.target.files); // 'filelist'
9497
Ember.typeOf(Ember.Object.extend()); // 'class'
9598
Ember.typeOf(Ember.Object.create()); // 'instance'
9699
Ember.typeOf(new Error('teamocil')); // 'error'

packages/ember-runtime/tests/core/is_array_test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { isArray } from '../../utils';
22
import { A as emberA } from '../../system/native_array';
33
import ArrayProxy from '../../system/array_proxy';
4+
import { environment } from 'ember-environment';
45

56
QUnit.module('Ember Type Checking');
67

@@ -26,3 +27,12 @@ QUnit.test('Ember.isArray', function() {
2627
equal(isArray(fn), false, 'function() {}');
2728
equal(isArray(arrayProxy), true, '[]');
2829
});
30+
31+
if (environment.window && typeof environment.window.FileList === 'function') {
32+
QUnit.test('Ember.isArray(fileList)', function() {
33+
let fileListElement = document.createElement('input');
34+
fileListElement.type = 'file';
35+
let fileList = fileListElement.files;
36+
equal(isArray(fileList), false, 'fileList');
37+
});
38+
}

packages/ember-runtime/tests/core/type_of_test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { typeOf } from '../../utils';
22
import EmberObject from '../../system/object';
3+
import { environment } from 'ember-environment';
34

45
QUnit.module('Ember Type Checking');
56

@@ -36,3 +37,12 @@ QUnit.test('Ember.typeOf', function() {
3637
equal(typeOf(EmberObject.extend()), 'class', 'item of type class');
3738
equal(typeOf(new Error()), 'error', 'item of type error');
3839
});
40+
41+
if (environment.window && typeof environment.window.FileList === 'function') {
42+
QUnit.test('Ember.typeOf(fileList)', function() {
43+
let fileListElement = document.createElement('input');
44+
fileListElement.type = 'file';
45+
let fileList = fileListElement.files;
46+
equal(typeOf(fileList), 'filelist', 'item of type filelist');
47+
});
48+
}

0 commit comments

Comments
 (0)