• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"use strict";
2module.exports = (function(){
3var AssertionError = (function() {
4    function AssertionError(a) {
5        this.constructor$(a);
6        this.message = a;
7        this.name = "AssertionError";
8    }
9    AssertionError.prototype = new Error();
10    AssertionError.prototype.constructor = AssertionError;
11    AssertionError.prototype.constructor$ = Error;
12    return AssertionError;
13})();
14
15function getParams(args) {
16    var params = [];
17    for (var i = 0; i < args.length; ++i) params.push("arg" + i);
18    return params;
19}
20
21function nativeAssert(callName, args, expect) {
22    try {
23        var params = getParams(args);
24        var constructorArgs = params;
25        constructorArgs.push("return " +
26                callName + "("+ params.join(",") + ");");
27        var fn = Function.apply(null, constructorArgs);
28        return fn.apply(null, args);
29    } catch (e) {
30        if (!(e instanceof SyntaxError)) {
31            throw e;
32        } else {
33            return expect;
34        }
35    }
36}
37
38return function assert(boolExpr, message) {
39    if (boolExpr === true) return;
40
41    if (typeof boolExpr === "string" &&
42        boolExpr.charAt(0) === "%") {
43        var nativeCallName = boolExpr;
44        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];};
45        if (nativeAssert(nativeCallName, args, message) === message) return;
46        message = (nativeCallName + " !== " + message);
47    }
48
49    var ret = new AssertionError(message);
50    if (Error.captureStackTrace) {
51        Error.captureStackTrace(ret, assert);
52    }
53    throw ret;
54};
55})();
56