UNPKG

@seeessence/unit

Version:

```bash npm install seeessence/unit ```

110 lines (80 loc) 3.06 kB
var stream = require('./stream3.js'); var assert = require('assert'); var Mocha = require('mocha'); var mocha = new Mocha(); process.once('beforeExit', function () { mocha.run(); }); module.exports = function (expected, message, data) { if (expected instanceof Function || typeof expected === 'function') { var unit = new stream.Duplex({ objectMode: true, read: function() { this.push(data); this.pause(); } }); unit.on('pipe', function (source) { this._write = function(data, encoding, callback) { mocha.suite.addTest(new Mocha.Test( message || expected.toString(), expected.bind(null, data, callback) )); source.unpipe(this); }; this._readableState.pipesCount === 0 && this.pipe(source); this.emit('drain'); }); unit.pipe = (function (pipe) { return function (destination) { pipe.call(this, destination, { end: false }); }; })(unit.pipe); return unit; } if (expected instanceof String || typeof expected === 'string') return module.exports( assert.strictEqual.bind(null, expected), message || '\'' + expected + '\'', data || expected ); if (expected instanceof RegExp) return module.exports(function(data) { assert(expected.test(data)); }, message || expected.toString(), data || expected ); if (expected instanceof Object || typeof callback === 'object') return module.exports( assert.deepEqual.bind(null, expected), message || JSON.stringify(expected), data || expected ); return module.exports( assert.bind(null, process.env.npm_package_config_test), 'not expected' ); }; module.exports.not = function (expected, message, data) { if (expected instanceof String || typeof expected === 'string') return module.exports( assert.notStrictEqual.bind(null, expected), message || 'not \'' + expected + '\'', data || expected ); if (expected instanceof RegExp) return module.exports(function(data) { assert(!expected.test(data)); }, message || 'not ' + expected.toString(), data || expected ); if (expected instanceof Object || typeof callback === 'object') return module.exports( assert.notDeepStrictEqual.bind(null, expected), message || 'not ' + JSON.stringify(expected), data || expected ); return module.exports(expected); };