mirror of
https://github.com/FormidableLabs/react-fast-compare.git
synced 2026-01-18 16:13:59 +00:00
- Allow use of `Object.create(null)` to work without error. Fixes #64 - Add customized tests.
121 lines
3.0 KiB
JavaScript
121 lines
3.0 KiB
JavaScript
'use strict';
|
|
const generic = require('fast-deep-equal-git/spec/tests.js');
|
|
const es6 = require('fast-deep-equal-git/spec/es6tests.js');
|
|
|
|
const reactElementA = {
|
|
'$$typeof': 'react.element',
|
|
type: 'div',
|
|
key: null,
|
|
ref: null,
|
|
props: { x: 1 },
|
|
_owner: {},
|
|
_store: {}
|
|
};
|
|
// in reality the _owner object is much more complex (and contains over dozen circular references)
|
|
reactElementA._owner.children = [reactElementA];
|
|
|
|
const reactElementA2 = {
|
|
'$$typeof': 'react.element',
|
|
type: 'div',
|
|
key: null,
|
|
ref: null,
|
|
props: { x: 1 },
|
|
_owner: {},
|
|
_store: {}
|
|
};
|
|
reactElementA2._owner.children = [reactElementA2];
|
|
|
|
const reactElementB = {
|
|
'$$typeof': 'react.element',
|
|
type: 'div',
|
|
key: null,
|
|
ref: null,
|
|
props: { x: 2 },
|
|
_owner: {},
|
|
_store: {}
|
|
};
|
|
reactElementB._owner.children = [reactElementB];
|
|
|
|
|
|
const react = [
|
|
{
|
|
description: 'React elements',
|
|
reactSpecific: true,
|
|
tests: [
|
|
{
|
|
description: 'an element compared with itself',
|
|
value1: reactElementA,
|
|
value2: reactElementA,
|
|
equal: true
|
|
},
|
|
{
|
|
description: 'two elements equal by value',
|
|
value1: reactElementA,
|
|
value2: reactElementA2,
|
|
equal: true
|
|
},
|
|
{
|
|
description: 'two elements unequal by value',
|
|
value1: reactElementA,
|
|
value2: reactElementB,
|
|
equal: false
|
|
}
|
|
]
|
|
}
|
|
];
|
|
|
|
// Additional customized behavior.
|
|
const custom = [
|
|
{
|
|
description: 'Custom tests',
|
|
tests: [
|
|
{
|
|
description: 'Object.create(null) equal',
|
|
value1: Object.create(null),
|
|
value2: Object.create(null),
|
|
equal: true
|
|
},
|
|
{
|
|
description: 'Object.create(null) unequal to empty object',
|
|
value1: Object.create(null),
|
|
value2: {},
|
|
equal: false
|
|
},
|
|
{
|
|
description: 'Object.create(null) unequal to non-empty object',
|
|
value1: Object.create(null),
|
|
value2: { a: 1 },
|
|
equal: false
|
|
},
|
|
// See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#null-prototype_objects
|
|
{
|
|
description: 'Object.create(null) equal to vanilla null prototype deep objects',
|
|
value1: Object.assign(Object.create(null), { a: 1, b: { c: true } }),
|
|
value2: { __proto__: null, a: 1, b: { c: true } },
|
|
equal: true
|
|
},
|
|
// Object.create(null) has a different `constructor` than a vanilla, non-null object.
|
|
{
|
|
description: 'Object.create(null) unequal to vanilla deep objects',
|
|
value1: Object.assign(Object.create(null), { a: 1, b: { c: true } }),
|
|
value2: { a: 1, b: { c: true } },
|
|
equal: false
|
|
},
|
|
{
|
|
description: 'Object.create(null) equal for deep objects',
|
|
value1: Object.assign(Object.create(null), { a: 1, b: { c: true } }),
|
|
value2: Object.assign(Object.create(null), { b: { c: true }, a: 1 }),
|
|
equal: true
|
|
}
|
|
]
|
|
}
|
|
];
|
|
|
|
module.exports = {
|
|
generic,
|
|
es6,
|
|
react,
|
|
custom,
|
|
all: [].concat(generic, es6, react, custom),
|
|
};
|