UNPKG

32.2 kBSource Map (JSON)View Raw
1{"version":3,"file":"zora.js","sources":["../node_modules/deep-equal/lib/keys.js","../node_modules/deep-equal/lib/is_arguments.js","../node_modules/deep-equal/index.js","../lib/assertions.js","../lib/test.js","../lib/tap.js","../lib/combinators.js","../index.js"],"sourcesContent":["exports = module.exports = typeof Object.keys === 'function'\n ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n}\n","var supportsArgumentsClass = (function(){\n return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n return object &&\n typeof object == 'object' &&\n typeof object.length == 'number' &&\n Object.prototype.hasOwnProperty.call(object, 'callee') &&\n !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n false;\n};\n","var pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n if (!opts) opts = {};\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n\n } else if (actual instanceof Date && expected instanceof Date) {\n return actual.getTime() === expected.getTime();\n\n // 7.3. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n return opts.strict ? actual === expected : actual == expected;\n\n // 7.4. For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else {\n return objEquiv(actual, expected, opts);\n }\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') return false;\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n var i, key;\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n return false;\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) return false;\n //~~~I've managed to break Object.keys through screwy arguments passing.\n // Converting to array solves the problem.\n if (isArguments(a)) {\n if (!isArguments(b)) {\n return false;\n }\n a = pSlice.call(a);\n b = pSlice.call(b);\n return deepEqual(a, b, opts);\n }\n if (isBuffer(a)) {\n if (!isBuffer(b)) {\n return false;\n }\n if (a.length !== b.length) return false;\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n try {\n var ka = objectKeys(a),\n kb = objectKeys(b);\n } catch (e) {//happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length != kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) return false;\n }\n return typeof a === typeof b;\n}\n","import deepEqual from 'deep-equal';\n\nconst getAssertionLocation = () => {\n\tconst err = new Error();\n\tconst stack = (err.stack || '').split('\\n');\n\treturn (stack[3] || '').trim().replace(/^at/i, '');\n};\n\nconst assertMethodHook = fn => function (...args) {\n\tconst assertResult = fn(...args);\n\n\tif (assertResult.pass === false) {\n\t\tassertResult.at = getAssertionLocation();\n\t}\n\n\tthis.collect(assertResult);\n\treturn assertResult;\n};\n\nconst Assertion = {\n\tok: assertMethodHook((val, description = 'should be truthy') => ({\n\t\tpass: Boolean(val),\n\t\tactual: val,\n\t\texpected: true,\n\t\tdescription,\n\t\toperator: 'ok'\n\t})),\n\tdeepEqual: assertMethodHook((actual, expected, description = 'should be equivalent') => ({\n\t\tpass: deepEqual(actual, expected),\n\t\tactual,\n\t\texpected,\n\t\tdescription,\n\t\toperator: 'deepEqual'\n\t})),\n\tequal: assertMethodHook((actual, expected, description = 'should be equal') => ({\n\t\tpass: actual === expected,\n\t\tactual,\n\t\texpected,\n\t\tdescription,\n\t\toperator: 'equal'\n\t})),\n\tnotOk: assertMethodHook((val, description = 'should not be truthy') => ({\n\t\tpass: !val,\n\t\texpected: false,\n\t\tactual: val,\n\t\tdescription,\n\t\toperator: 'notOk'\n\t})),\n\tnotDeepEqual: assertMethodHook((actual, expected, description = 'should not be equivalent') => ({\n\t\tpass: !deepEqual(actual, expected),\n\t\tactual,\n\t\texpected,\n\t\tdescription,\n\t\toperator: 'notDeepEqual'\n\t})),\n\tnotEqual: assertMethodHook((actual, expected, description = 'should not be equal') => ({\n\t\tpass: actual !== expected,\n\t\tactual,\n\t\texpected,\n\t\tdescription,\n\t\toperator: 'notEqual'\n\t})),\n\tthrows: assertMethodHook((func, expected, description) => {\n\t\tlet caught;\n\t\tlet pass;\n\t\tlet actual;\n\t\tif (typeof expected === 'string') {\n\t\t\t[expected, description] = [description, expected];\n\t\t}\n\t\ttry {\n\t\t\tfunc();\n\t\t} catch (err) {\n\t\t\tcaught = {error: err};\n\t\t}\n\t\tpass = caught !== undefined;\n\t\tactual = caught && caught.error;\n\t\tif (expected instanceof RegExp) {\n\t\t\tpass = expected.test(actual) || expected.test(actual && actual.message);\n\t\t\texpected = String(expected);\n\t\t} else if (typeof expected === 'function' && caught) {\n\t\t\tpass = actual instanceof expected;\n\t\t\tactual = actual.constructor;\n\t\t}\n\t\treturn {\n\t\t\tpass,\n\t\t\texpected,\n\t\t\tactual,\n\t\t\toperator: 'throws',\n\t\t\tdescription: description || 'should throw'\n\t\t};\n\t}),\n\tdoesNotThrow: assertMethodHook((func, expected, description) => {\n\t\tlet caught;\n\t\tif (typeof expected === 'string') {\n\t\t\t[expected, description] = [description, expected];\n\t\t}\n\t\ttry {\n\t\t\tfunc();\n\t\t} catch (err) {\n\t\t\tcaught = {error: err};\n\t\t}\n\t\treturn {\n\t\t\tpass: caught === undefined,\n\t\t\texpected: 'no thrown error',\n\t\t\tactual: caught && caught.error,\n\t\t\toperator: 'doesNotThrow',\n\t\t\tdescription: description || 'should not throw'\n\t\t};\n\t}),\n\tfail: assertMethodHook((description = 'fail called') => ({\n\t\tpass: false,\n\t\tactual: 'fail called',\n\t\texpected: 'fail not called',\n\t\tdescription,\n\t\toperator: 'fail'\n\t}))\n};\n\nexport default (collect, test) => Object.assign(\n\tObject.create(Assertion, {collect: {value: collect}}), {\n\t\tasync test(description, spec) {\n\t\t\t// Note: we return the task so the caller can control whether he wants to wait for the sub test to complete or not\n\t\t\treturn test(description, spec).task;\n\t\t}\n\t});\n","import assert from './assertions';\n\nconst tester = (collect, {offset = 0} = {}) => (description, spec) => {\n\tconst buffer = [{type: 'title', data: description, offset}];\n\tconst result = {count: 0, pass: true, description, spec};\n\tlet done = false;\n\n\tconst createAssertion = item => {\n\t\tresult.pass = result.pass && item.pass;\n\t\treturn {type: 'assert', data: item, offset};\n\t};\n\n\tconst collector = item => {\n\t\tresult.count++;\n\t\titem.id = result.count;\n\t\tif (item[Symbol.asyncIterator] === undefined) {\n\t\t\t// Assertion\n\t\t\tbuffer.push(createAssertion(item));\n\t\t} else {\n\t\t\t// Sub test\n\t\t\tbuffer.push(item);\n\t\t}\n\t};\n\n\tconst handleDelegate = async delegate => {\n\t\tconst {value, done} = await delegate.next();\n\n\t\t// Delegate is exhausted: create a summary test point in the stream and throw the delegate\n\t\tif (done === true) {\n\t\t\tconst {executionTime, pass, description} = value;\n\t\t\tconst subTestAssertion = Object.assign(createAssertion({\n\t\t\t\tpass,\n\t\t\t\tdescription,\n\t\t\t\tid: delegate.id,\n\t\t\t\texecutionTime\n\t\t\t}), {type: 'testAssert'});\n\t\t\tbuffer.shift();\n\t\t\tbuffer.unshift(subTestAssertion);\n\t\t\treturn instance.next();\n\t\t}\n\t\treturn {value, done};\n\t};\n\n\tconst subTest = tester(collector, {offset: offset + 1});\n\n\tconst start = Date.now();\n\t// Execute the test collecting assertions\n\tconst assertFn = assert(collector, subTest);\n\tconst task = new Promise(resolve => resolve(spec(assertFn)))\n\t\t.then(() => {\n\t\t\t// Always report a plan and summary: the calling test will know how to deal with it\n\t\t\tresult.executionTime = Date.now() - start;\n\t\t\tbuffer.push({type: 'plan', data: {start: 1, end: result.count}, offset});\n\t\t\tbuffer.push({type: 'time', data: result.executionTime, offset});\n\t\t\tdone = true;\n\t\t\treturn result;\n\t\t})\n\t\t.catch(err => {\n\t\t\t// We report a failing test before bail out ... while unhandled promise rejection is still allowed by nodejs...\n\t\t\tbuffer.push({type: 'assert', data: {pass: false, description}});\n\t\t\tbuffer.push({type: 'comment', data: 'Unhandled exception'});\n\t\t\tbuffer.push({type: 'bailout', data: err, offset});\n\t\t\tdone = true;\n\t\t});\n\n\tconst instance = {\n\t\ttest: subTest,\n\t\ttask,\n\t\t[Symbol.asyncIterator]() {\n\t\t\treturn this;\n\t\t},\n\t\tasync next() {\n\t\t\tif (buffer.length === 0) {\n\t\t\t\tif (done === true) {\n\t\t\t\t\treturn {done: true, value: result};\n\t\t\t\t}\n\t\t\t\t// Flush\n\t\t\t\tawait task;\n\t\t\t\treturn this.next();\n\t\t\t}\n\n\t\t\tconst next = buffer[0];\n\n\t\t\t// Delegate if sub test\n\t\t\tif (next[Symbol.asyncIterator] !== undefined) {\n\t\t\t\treturn handleDelegate(next);\n\t\t\t}\n\n\t\t\treturn {value: buffer.shift(), done: false};\n\t\t}\n\t};\n\n\t// Collection by the calling test\n\tcollect(instance);\n\n\treturn instance;\n};\n\nexport default tester;\n","const print = (message, offset = 0) => {\n\tconsole.log(message.padStart(message.length + (offset * 4))); // 4 white space used as indent (see tap-parser)\n};\n\nconst toYaml = print => (obj, offset = 0) => {\n\tfor (const [prop, value] of Object.entries(obj)) {\n\t\tprint(`${prop}: ${JSON.stringify(value)}`, offset + 0.5);\n\t}\n};\n\nconst tap = print => {\n\tconst yaml = toYaml(print);\n\treturn {\n\t\tversion(version = 13) {\n\t\t\tprint(`TAP version ${version}`);\n\t\t},\n\t\ttitle(value, offset = 0) {\n\t\t\tconst message = offset > 0 ? `Subtest: ${value}` : value;\n\t\t\tthis.comment(message, offset);\n\t\t},\n\t\tassert(value, offset = 0) {\n\t\t\tconst {pass, description, id, executionTime, expected = '', actual = '', at = '', operator = ''} = value;\n\t\t\tconst label = pass === true ? 'ok' : 'not ok';\n\t\t\tprint(`${label} ${id} - ${description}${executionTime ? ` # time=${executionTime}ms` : ''}`, offset);\n\t\t\tif (pass === false && value.operator) {\n\t\t\t\tprint('---', offset + 0.5);\n\t\t\t\tyaml({expected, actual, at, operator}, offset);\n\t\t\t\tprint('...', offset + 0.5);\n\t\t\t}\n\t\t},\n\t\tplan(value, offset = 0) {\n\t\t\tprint(`1..${value.end}`, offset);\n\t\t},\n\t\ttime(value, offset = 0) {\n\t\t\tthis.comment(`time=${value}ms`, offset);\n\t\t},\n\t\tcomment(value, offset = 0) {\n\t\t\tprint(`# ${value}`, offset);\n\t\t},\n\t\tbailout(value = 'Unhandled exception') {\n\t\t\tprint(`Bail out! ${value}`);\n\t\t},\n\t\ttestAssert(value, offset = 0) {\n\t\t\treturn this.assert(value, offset);\n\t\t}\n\t};\n};\n\nexport default (printFn = print) => {\n\tconst reporter = tap(printFn);\n\treturn (toPrint = {}) => {\n\t\tconst {data, type, offset = 0} = toPrint;\n\t\tif (typeof reporter[type] === 'function') {\n\t\t\treporter[type](data, offset);\n\t\t}\n\t\t// Else ignore (unknown message type)\n\t};\n};\n","// Some combinators for asynchronous iterators: this will be way more easier when\n// Async generator are widely supported\n\nconst asyncIterator = behavior => Object.assign({\n\t[Symbol.asyncIterator]() {\n\t\treturn this;\n\t}\n}, behavior);\n\nexport const filter = predicate => iterator => asyncIterator({\n\tasync next() {\n\t\tconst {done, value} = await iterator.next();\n\n\t\tif (done === true) {\n\t\t\treturn {done};\n\t\t}\n\n\t\tif (!predicate(value)) {\n\t\t\treturn this.next();\n\t\t}\n\n\t\treturn {done, value};\n\t}\n});\n\nexport const map = mapFn => iterator => asyncIterator({\n\t[Symbol.asyncIterator]() {\n\t\treturn this;\n\t},\n\tasync next() {\n\t\tconst {done, value} = await iterator.next();\n\t\tif (done === true) {\n\t\t\treturn {done};\n\t\t}\n\t\treturn {done, value: mapFn(value)};\n\t}\n});\n\nexport const stream = asyncIterator => Object.assign(asyncIterator, {\n\tmap(fn) {\n\t\treturn stream(map(fn)(asyncIterator));\n\t},\n\tfilter(fn) {\n\t\treturn stream(filter(fn)(asyncIterator));\n\t}\n});\n\nexport const combine = (...iterators) => {\n\tconst [...pending] = iterators;\n\tlet current = pending.shift();\n\n\treturn asyncIterator({\n\t\tasync next() {\n\t\t\tif (current === undefined) {\n\t\t\t\treturn {done: true};\n\t\t\t}\n\n\t\t\tconst {done, value} = await current.next();\n\n\t\t\tif (done === true) {\n\t\t\t\tcurrent = pending.shift();\n\t\t\t\treturn this.next();\n\t\t\t}\n\n\t\t\treturn {done, value};\n\t\t}\n\t});\n};\n","import tester from './lib/test';\nimport tap from './lib/tap';\nimport {combine, stream} from './lib/combinators';\n\nlet flatten = true;\nconst tests = [];\nconst test = tester(t => tests.push(t));\n\n// Provide a root context for BSD style test suite\nconst subTest = (test('Root', () => {})).test;\ntest.test = (description, spec) => {\n\tflatten = false; // Turn reporter into BSD style\n\treturn subTest(description, spec);\n};\n\nconst start = async ({reporter = tap()} = {}) => {\n\tlet count = 0;\n\tlet failure = 0;\n\treporter({type: 'version', data: 13});\n\n\t// Remove the irrelevant root title\n\tawait tests[0].next();\n\n\tlet outputStream = stream(combine(...tests));\n\toutputStream = flatten ? outputStream\n\t\t.filter(({type}) => type !== 'testAssert')\n\t\t.map(item => Object.assign(item, {offset: 0})) :\n\t\toutputStream;\n\n\tconst filterOutAtRootLevel = ['plan', 'time'];\n\toutputStream = outputStream\n\t\t.filter(item => item.offset > 0 || !filterOutAtRootLevel.includes(item.type))\n\t\t.map(item => {\n\t\t\tif (item.offset > 0 || (item.type !== 'assert' && item.type !== 'testAssert')) {\n\t\t\t\treturn item;\n\t\t\t}\n\n\t\t\tcount++;\n\t\t\titem.data.id = count;\n\t\t\tfailure += item.data.pass ? 0 : 1;\n\t\t\treturn item;\n\t\t});\n\n\t// One day with for await loops ... :) !\n\twhile (true) {\n\t\tconst {done, value} = await outputStream.next();\n\n\t\tif (done === true) {\n\t\t\tbreak;\n\t\t}\n\n\t\treporter(value);\n\n\t\tif (value.type === 'bailout') {\n\t\t\tthrow value.data; // Rethrow but with Nodejs we keep getting the deprecation warning (unhandled promise) and the process exists with 0 exit code...\n\t\t}\n\t}\n\n\treporter({type: 'plan', data: {start: 1, end: count}});\n\treporter({type: 'comment', data: failure > 0 ? `failed ${failure} of ${count} tests` : 'ok'});\n};\n\n// Auto bootstrap following async env vs sync env (browser vs node)\nif (typeof window === 'undefined') {\n\tsetTimeout(start, 0);\n} else {\n\twindow.addEventListener('load', start);\n}\n\nexport default test;\n"],"names":["isArguments","objectKeys","deepEqual","tap"],"mappings":"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"}
\No newline at end of file