Merge pull request #1502 from pygy/ospec-array-deepEquals-corner-cases

[ospec] deepEquals corner cases with undefined values
This commit is contained in:
Leo Horie 2017-01-01 11:12:17 -05:00 committed by GitHub
commit f86140996b
2 changed files with 25 additions and 4 deletions

View file

@ -135,7 +135,7 @@ module.exports = new function init() {
var aIsArgs = isArguments(a), bIsArgs = isArguments(b)
if (a.constructor === Object && b.constructor === Object && !aIsArgs && !bIsArgs) {
for (var i in a) {
if (!deepEqual(a[i], b[i])) return false
if ((!(i in b)) || !deepEqual(a[i], b[i])) return false
}
for (var i in b) {
if (!(i in a)) return false
@ -145,9 +145,8 @@ module.exports = new function init() {
if (a.length === b.length && (a instanceof Array && b instanceof Array || aIsArgs && bIsArgs)) {
var aKeys = Object.getOwnPropertyNames(a), bKeys = Object.getOwnPropertyNames(b)
if (aKeys.length !== bKeys.length) return false
var larger = aKeys.length < bKeys.length ? bKeys : aKeys
for (var i = 0; i < larger.length; i++) {
if (!deepEqual(a[larger[i]], b[larger[i]])) return false
for (var i = 0; i < aKeys.length; i++) {
if (!b.hasOwnProperty(aKeys[i]) || !deepEqual(a[aKeys[i]], b[aKeys[i]])) return false
}
return true
}

View file

@ -36,7 +36,21 @@ o.spec("ospec", function() {
o(a).notEquals(2)
o({a: [1, 2], b: 3}).deepEquals({a: [1, 2], b: 3})
o([{a: 1, b: 2}, {c: 3}]).deepEquals([{a: 1, b: 2}, {c: 3}])
var undef1 = {undef: void 0}
var undef2 = {UNDEF: void 0}
o(undef1).notDeepEquals(undef2)
o(undef1).notDeepEquals({})
o({}).notDeepEquals(undef1)
var sparse1 = [void 1, void 2, void 3]
delete sparse1[0]
var sparse2 = [void 1, void 2, void 3]
delete sparse2[1]
o(sparse1).notDeepEquals(sparse2)
var monkeypatch1 = [1, 2]
monkeypatch1.field = 3
var monkeypatch2 = [1, 2]
@ -45,6 +59,14 @@ o.spec("ospec", function() {
o(monkeypatch1).notDeepEquals([1, 2])
o(monkeypatch1).notDeepEquals(monkeypatch2)
monkeypatch2.field = 3
o(monkeypatch1).deepEquals(monkeypatch2)
monkeypatch1.undef = undefined
monkeypatch2.UNDEF = undefined
o(monkeypatch1).notDeepEquals(monkeypatch2)
var values = ["a", "", 1, 0, true, false, null, undefined, Date(0), ["a"], [], function() {return arguments}.call(), new Uint8Array(), {a: 1}, {}]
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values.length; j++) {