in JsTestDriver/plugin/src/main/resources/com/google/jstestdriver/idea/assertFramework/jstd/jsSrc/Asserts.js [158:222]
function compare_(expected, actual) {
if (expected === actual) {
return true;
}
if (typeof expected != 'object' ||
typeof actual != 'object' ||
!expected || !actual) {
return expected == actual;
}
if (isElement_(expected) || isElement_(actual)) {
return false;
}
var key = null;
var actualLength = 0;
var expectedLength = 0;
try {
// If an array is expected the length of actual should be simple to
// determine. If it is not it is undefined.
if (jstestdriver.jQuery.isArray(actual)) {
actualLength = actual.length;
} else {
// In case it is an object it is a little bit more complicated to
// get the length.
for (key in actual) {
if (actual.hasOwnProperty(key)) {
++actualLength;
}
}
}
// Arguments object
if (actualLength == 0 && typeof actual.length == 'number') {
actualLength = actual.length;
for (var i = 0, l = actualLength; i < l; i++) {
if (!(i in actual)) {
actualLength = 0;
break;
}
}
}
for (key in expected) {
if (expected.hasOwnProperty(key)) {
if (!compare_(expected[key], actual[key])) {
return false;
}
++expectedLength;
}
}
if (expectedLength != actualLength) {
return false;
}
return expectedLength == 0 ? expected.toString() == actual.toString() : true;
} catch (e) {
return false;
}
}