ace/build/cockpit/test/assert.js
2011-01-10 13:17:14 +01:00

132 lines
No EOL
4.7 KiB
JavaScript

define(function(i, h) {
var c = {success:function(a) {
console.log(a)
}, fail:function() {
c._recordThrow("fail", arguments)
}, assertTrue:function(a) {
a || c._recordThrow("assertTrue", arguments)
}, verifyTrue:function(a) {
a || c._recordTrace("verifyTrue", arguments)
}, assertFalse:function(a) {
a && c._recordThrow("assertFalse", arguments)
}, verifyFalse:function(a) {
a && c._recordTrace("verifyFalse", arguments)
}, assertNull:function(a) {
a !== null && c._recordThrow("assertNull", arguments)
}, verifyNull:function(a) {
a !== null && c._recordTrace("verifyNull", arguments)
}, assertNotNull:function(a) {
a === null && c._recordThrow("assertNotNull", arguments)
}, verifyNotNull:function(a) {
a === null && c._recordTrace("verifyNotNull", arguments)
}, assertUndefined:function(a) {
a !== undefined && c._recordThrow("assertUndefined", arguments)
}, verifyUndefined:function(a) {
a !== undefined && c._recordTrace("verifyUndefined", arguments)
}, assertNotUndefined:function(a) {
a === undefined && c._recordThrow("assertNotUndefined", arguments)
}, verifyNotUndefined:function(a) {
a === undefined && c._recordTrace("verifyNotUndefined", arguments)
}, assertNaN:function(a) {
isNaN(a) || c._recordThrow("assertNaN", arguments)
}, verifyNaN:function(a) {
isNaN(a) || c._recordTrace("verifyNaN", arguments)
}, assertNotNaN:function(a) {
isNaN(a) && c._recordThrow("assertNotNaN", arguments)
}, verifyNotNaN:function(a) {
isNaN(a) && c._recordTrace("verifyNotNaN", arguments)
}, assertEqual:function(a, b) {
c._isEqual(a, b) || c._recordThrow("assertEqual", arguments)
}, verifyEqual:function(a, b) {
c._isEqual(a, b) || c._recordTrace("verifyEqual", arguments)
}, assertNotEqual:function(a, b) {
c._isEqual(a, b) && c._recordThrow("assertNotEqual", arguments)
}, verifyNotEqual:function(a, b) {
c._isEqual(a, b) && c._recordTrace("verifyNotEqual", arguments)
}, assertSame:function(a, b) {
a !== b && c._recordThrow("assertSame", arguments)
}, verifySame:function(a, b) {
a !== b && c._recordTrace("verifySame", arguments)
}, assertNotSame:function(a, b) {
a !== b && c._recordThrow("assertNotSame", arguments)
}, verifyNotSame:function(a, b) {
a !== b && c._recordTrace("verifyNotSame", arguments)
}, _recordTrace:function() {
c._record.apply(this, arguments);
console.trace()
}, _recordThrow:function() {
c._record.apply(this, arguments);
throw new Error;
}, _record:function() {
console.error(arguments);
var a = arguments[0] + "(", b = arguments[1];
if(typeof b == "string") {
a += b
}else {
for(var d = 0;d < b.length;d++) {
if(d != 0) {
a += ", "
}a += b[d]
}
}a += ")";
console.log(a)
}, _isEqual:function(a, b, d) {
d || (d = 0);
if(d > 10) {
return true
}if(a == null) {
if(b != null) {
console.log("expected: null, actual non-null: ", b);
return false
}return true
}if(typeof a == "number" && isNaN(a)) {
if(!(typeof b == "number" && isNaN(b))) {
console.log("expected: NaN, actual non-NaN: ", b);
return false
}return true
}if(b == null) {
if(a != null) {
console.log("actual: null, expected non-null: ", a);
return false
}return true
}if(typeof a == "object") {
if(typeof b != "object") {
console.log("expected object, actual not an object");
return false
}var f = 0;
for(var e in b) {
if(typeof b[e] != "function" || typeof a[e] != "function") {
var g = c._isEqual(b[e], a[e], d + 1);
if(typeof g != "boolean" || !g) {
console.log("element '" + e + "' does not match: " + g);
return false
}
}f++
}b = 0;
for(e in a) {
b++
}if(f != b) {
console.log("expected object size = " + b + ", actual object size = " + f);
return false
}return true
}if(b != a) {
console.log("expected = " + a + " (type=" + typeof a + "), actual = " + b + " (type=" + typeof b + ")");
return false
}if(a instanceof Array) {
if(!(b instanceof Array)) {
console.log("expected array, actual not an array");
return false
}if(b.length != a.length) {
console.log("expected array length = " + a.length + ", actual array length = " + b.length);
return false
}for(f = 0;f < b.length;f++) {
e = c._isEqual(b[f], a[f], d + 1);
if(typeof e != "boolean" || !e) {
console.log("element " + f + " does not match: " + e);
return false
}
}return true
}return true
}};
h.test = c
});