diff --git a/ospec/ospec.js b/ospec/ospec.js index 24495b87..56111b66 100644 --- a/ospec/ospec.js +++ b/ospec/ospec.js @@ -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 } diff --git a/ospec/tests/test-ospec.js b/ospec/tests/test-ospec.js index a1433d26..b3878f7a 100644 --- a/ospec/tests/test-ospec.js +++ b/ospec/tests/test-ospec.js @@ -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++) {