Add additional checks for dom Element check
This commit is contained in:
parent
2e58d40c7d
commit
d32db3c312
2 changed files with 10 additions and 13 deletions
6
index.js
6
index.js
|
|
@ -161,6 +161,10 @@ is.inRange = (x, range) => {
|
||||||
throw new TypeError(`Invalid range: ${util.inspect(range)}`);
|
throw new TypeError(`Invalid range: ${util.inspect(range)}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
is.domElement = x => is.object(x) && x.nodeType === 1 && is.string(x.nodeName) && !is.plainObject(x);
|
is.domElement = x => {
|
||||||
|
const propsToCheck = ['innerHTML', 'ownerDocument', 'style', 'attributes', 'nodeValue'];
|
||||||
|
return is.object(x) && x.nodeType === 1 && is.string(x.nodeName) &&
|
||||||
|
!is.plainObject(x) && propsToCheck.every(prop => prop in x);
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = is;
|
module.exports = is;
|
||||||
|
|
|
||||||
17
test.js
17
test.js
|
|
@ -8,6 +8,8 @@ const isNode8orHigher = Number(process.versions.node.split('.')[0]) >= 8;
|
||||||
const PromiseSubclassFixture = class extends Promise {};
|
const PromiseSubclassFixture = class extends Promise {};
|
||||||
const ErrorSubclassFixture = class extends Error {};
|
const ErrorSubclassFixture = class extends Error {};
|
||||||
|
|
||||||
|
const document = jsdom();
|
||||||
|
|
||||||
const types = new Map([
|
const types = new Map([
|
||||||
['undefined', undefined],
|
['undefined', undefined],
|
||||||
['null', null],
|
['null', null],
|
||||||
|
|
@ -90,7 +92,8 @@ const types = new Map([
|
||||||
Object.create(null),
|
Object.create(null),
|
||||||
new Object() // eslint-disable-line no-new-object
|
new Object() // eslint-disable-line no-new-object
|
||||||
]],
|
]],
|
||||||
['integer', 6]
|
['integer', 6],
|
||||||
|
['domElement', document.createElement('div')]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// This ensures a certain method matches only the types
|
// This ensures a certain method matches only the types
|
||||||
|
|
@ -361,16 +364,6 @@ test('is.inRange', t => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('is.domElement', t => {
|
test('is.domElement', t => {
|
||||||
const document = jsdom();
|
testType(t, 'domElement');
|
||||||
|
|
||||||
t.true(m.domElement(document.createElement('div')));
|
|
||||||
t.false(m.domElement('hello world'));
|
|
||||||
t.false(m.domElement([]));
|
|
||||||
t.false(m.domElement(new Map()));
|
|
||||||
t.false(m.domElement(null));
|
|
||||||
t.false(m.domElement(undefined));
|
|
||||||
t.false(m.domElement(0));
|
|
||||||
t.false(m.domElement(NaN));
|
|
||||||
t.false(m.domElement(Infinity));
|
|
||||||
t.false(m.domElement({nodeType: 1, nodeName: 'div'}));
|
t.false(m.domElement({nodeType: 1, nodeName: 'div'}));
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue