compare.js (1296B)
1 function sameDate(d1, d2) { 2 return (d1 instanceof Date && d2 instanceof Date && d1.valueOf() == d2.valueOf()); 3 } 4 5 function sameRE(r1, r2) { 6 return (r1 instanceof RegExp && r2 instanceof RegExp && r1.toString() == r2.toString()); 7 } 8 9 function assert_array_equals_(observed, expected, msg) { 10 if (observed.length == expected.length) { 11 for (var i = 0; i < observed.length; i++) { 12 if (observed[i] instanceof Date) { 13 observed[i] = sameDate(observed[i], expected[i]); 14 expected[i] = true; 15 } else if (observed[i] instanceof RegExp) { 16 observed[i] = sameRE(observed[i], expected[i]); 17 expected[i] = true; 18 } 19 } 20 } 21 22 assert_array_equals(observed, expected, msg); 23 } 24 25 function assert_object_equals_(observed, expected, msg) { 26 for (var p in observed) { 27 if (observed[p] instanceof Date) { 28 observed[p] = sameDate(observed[p], expected[p]); 29 expected[p] = true; 30 } else if (observed[p] instanceof RegExp) { 31 observed[p] = sameRE(observed[p], expected[p]); 32 expected[p] = true; 33 } else if (observed[p] instanceof Array || String(observed[p]) === '[object Object]') { 34 observed[p] = String(observed[p]) === String(expected[p]); 35 expected[p] = true; 36 } 37 assert_equals(observed[p], expected[p], msg); 38 } 39 }