@seeessence/unit
Version:
```bash npm install seeessence/unit ```
110 lines (80 loc) • 3.06 kB
JavaScript
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);
};