You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.6 KiB
55 lines
1.6 KiB
"use strict"; |
|
module.exports = (function(){ |
|
var AssertionError = (function() { |
|
function AssertionError(a) { |
|
this.constructor$(a); |
|
this.message = a; |
|
this.name = "AssertionError"; |
|
} |
|
AssertionError.prototype = new Error(); |
|
AssertionError.prototype.constructor = AssertionError; |
|
AssertionError.prototype.constructor$ = Error; |
|
return AssertionError; |
|
})(); |
|
|
|
function getParams(args) { |
|
var params = []; |
|
for (var i = 0; i < args.length; ++i) params.push("arg" + i); |
|
return params; |
|
} |
|
|
|
function nativeAssert(callName, args, expect) { |
|
try { |
|
var params = getParams(args); |
|
var constructorArgs = params; |
|
constructorArgs.push("return " + |
|
callName + "("+ params.join(",") + ");"); |
|
var fn = Function.apply(null, constructorArgs); |
|
return fn.apply(null, args); |
|
} catch (e) { |
|
if (!(e instanceof SyntaxError)) { |
|
throw e; |
|
} else { |
|
return expect; |
|
} |
|
} |
|
} |
|
|
|
return function assert(boolExpr, message) { |
|
if (boolExpr === true) return; |
|
|
|
if (typeof boolExpr === "string" && |
|
boolExpr.charAt(0) === "%") { |
|
var nativeCallName = boolExpr; |
|
var $_len = arguments.length;var args = new Array(Math.max($_len - 2, 0)); for(var $_i = 2; $_i < $_len; ++$_i) {args[$_i - 2] = arguments[$_i];}; |
|
if (nativeAssert(nativeCallName, args, message) === message) return; |
|
message = (nativeCallName + " !== " + message); |
|
} |
|
|
|
var ret = new AssertionError(message); |
|
if (Error.captureStackTrace) { |
|
Error.captureStackTrace(ret, assert); |
|
} |
|
throw ret; |
|
}; |
|
})();
|
|
|