UNPKG

must

Version:

Testing and assertion library with friendly BDD syntax — awesome.must.be.true(). Many expressive matchers and is test runner and framework agnostic. Follows RFC 2119 with its use of MUST. Good and well tested stuff.

58 lines (49 loc) 1.83 kB
var kindof = require("kindof") var jsonify = require("json-stringify-safe") var setPrototypeOf = require("./es6").setPrototypeOf var INDENT = null exports.chain = function(self, fn) { if (typeof fn != "function") throw new TypeError("Not a function: " + fn) // Don't set toString as it seems to break "source-map-support". This is // a function with an Object prototype, after all. return Object.defineProperties(setPrototypeOf(fn.bind(self), self), { bind: {value: Function.prototype.apply, configurable: true, writable: true}, call: {value: Function.prototype.apply, configurable: true, writable: true}, apply: {value: Function.prototype.apply, configurable: true, writable: true} }) } exports.stringify = function stringify(obj) { var root = obj switch (kindof(obj)) { // Allow falling through: /* jshint -W086 */ /* eslint no-fallthrough: 0 */ case "null": return "null" case "undefined": return "undefined" case "number": return obj.toString() case "string": return JSON.stringify(obj) case "symbol": return obj.toString() case "regexp": return obj.toString() case "date": return obj.toISOString() case "function": return obj.toString() case "object": obj = clone(obj) if (root instanceof Error) obj.message = root.message // Fall through. default: return jsonify(obj, stringifyValue, INDENT) } } function clone(obj) { var clone = {}, value for (var key in obj) clone[key] = (value = obj[key]) === obj ? clone : value return clone } function stringifyValue(key, value) { switch (kindof(value)) { case "undefined": return "[Undefined]" case "number": return isNaN(value) ? "[NaN]" : value case "symbol": return value.toString() case "regexp": return value.toString() default: return value } }