UNPKG

litejs

Version:

Single-page application framework

211 lines (183 loc) 5.05 kB
!function(exports) { var empty = {} , toStr = empty.toString , hasOwn = empty.hasOwnProperty , isArray = Array.isArray module.exports = assert function assert(value, message, x, _stackStart) { if (!value) { if (!message) { message = stringify(value) + " == true" } else if (isArray(message)) { message = message[1] + "\nexpected: " + stringify(message[2], 160) + "\nactual: " + stringify(message[0], 160) } throw new AssertionError(message, _stackStart || assert) } } assert.ok = assert assert.notOk = function notOk(value, message, x, _stackStart) { assert( !value, message || [value, "==", null], null, _stackStart || notOk ) } assert.equal = assert.deepEqual = function assertEqual(actual, expected, message, _stackStart) { assert( _deepEqual(actual, expected, []), message || [actual, "==", expected], null, _stackStart || assertEqual ) } assert.notEqual = assert.notDeepEqual = function notEqual(actual, expected, message, _stackStart) { assert( !_deepEqual(actual, expected, []), message || [actual, "!=", expected], null, _stackStart || notEqual ) } assert.strictEqual = function strictEqual(actual, expected, message, _stackStart) { assert( actual === expected, message || [actual, "===", expected], null, _stackStart || strictEqual ) } assert.notStrictEqual = function notStrictEqual(actual, expected, message, _stackStart) { assert( actual !== expected, message || [actual, "!==", expected], null, _stackStart || notStrictEqual ) } assert["throws"] = function assertThrows(fn, message, x, _stackStart) { var actual = false , expected = true try { fn() } catch(e) { actual = true } assert(actual, message || "throws", null, _stackStart || assertThrows) } assert.type = function assertType(thing, expected, x, _stackStart) { var actual = type(thing) assert( actual === expected, "type should be " + expected + ", got " + actual, null, _stackStart || assertType ) } assert.anyOf = function anyOf(a, b, x, _stackStart) { assert( isArray(b) && b.indexOf(a) != -1, "should be one from " + stringify(b) + ", got " + a, null, _stackStart || anyOf ) } function AssertionError(message, _stackStart) { this.name = "AssertionError" this.message = message if (Error.captureStackTrace) { Error.captureStackTrace(this, _stackStart || AssertionError) } else { this.stack = this.toString() + "\n" + (new Error()).stack } } AssertionError.prototype = Object.create(Error.prototype) function _deepEqual(actual, expected, circ) { if ( actual === expected || // null == undefined expected === null && actual == expected || // make NaN equal to NaN actual !== actual && expected !== expected ) return true var key, aKeys, len , aType = typeof actual if ( aType !== "object" || actual == null || aType !== typeof expected || (aType = type(actual)) != type(expected) || actual.constructor !== expected.constructor || (aType == "date" && actual.getTime() !== expected.getTime()) || (aType == "regexp" && ""+actual !== ""+expected) ) { return false } key = circ.indexOf(actual) if (key > -1) return true circ.push(actual) if (aType == "array" || aType == "arguments") { len = actual.length if (len !== expected.length) return false for (; len--; ) { if (!_deepEqual(actual[len], expected[len], circ)) return false } } else { aKeys = Object.keys(actual) len = aKeys.length if (len !== Object.keys(expected).length) return false for (; len--; ) { key = aKeys[len] if ( !hasOwn.call(expected, key) || !_deepEqual(actual[key], expected[key], circ) ) return false } } return true } function type(obj) { // Standard clearly states that NaN is a number // but this is not useful for testing. return obj !== obj ? "nan" : toStr.call(obj).slice(8, -1).toLowerCase() } function stringify(item, maxLen) { var max = maxLen > 9 ? maxLen : 70 , str = _stringify(item, max, []) return str.length > max ? str.slice(0, max - 3) + ".." + str.slice(-1) : str } function _stringify(item, max, circ) { var i, tmp , left = max , t = type(item) , str = t === "string" ? JSON.stringify(item) : t === "function" ? ("" + item).split(/n | *\{/)[1] : (!item || t === "number" || t === "regexp" || item === true) ? "" + item : item.toJSON ? item.toJSON() : item if (typeof str == "object") { if (circ.indexOf(str) > -1) return "[Circular]" circ.push(str) tmp = [] for (i in str) if (hasOwn.call(str, i)) { i = (t === "object" ? i + ":" : "") + _stringify(str[i], left, circ) tmp.push(i) left -= i.length if (left < 0) break } str = t === "array" ? "[" + tmp + "]" : t === "arguments" ? t + "[" + tmp + "]" : "{" + tmp + "}" if (t === "object" && item.constructor !== Object) { str = item.constructor.name + str } } return str } }(this)