cloudboost-tv
Version:
Database Service that does Storage, Search, Real-time and a whole lot more.
75 lines (64 loc) • 2.13 kB
JavaScript
/*!
* Should
* Copyright(c) 2010-2014 TJ Holowaychuk <tj@vision-media.ca>
* MIT Licensed
*/
var eql = require('should-equal');
var type = require('should-type');
var util = require('../util');
function formatEqlResult(r, a, b, format) {
return ((r.path.length > 0 ? 'at ' + r.path.map(util.formatProp).join(' -> ') : '') +
(r.a === a ? '' : ', A has ' + format(r.a)) +
(r.b === b ? '' : ' and B has ' + format(r.b)) +
(r.showReason ? ' because ' + r.reason: '')).trim();
}
module.exports = function(should, Assertion) {
/**
* Deep object equality comparison. For full spec see [`should-equal tests`](https://github.com/shouldjs/equal/blob/master/test.js).
*
* @name eql
* @memberOf Assertion
* @category assertion equality
* @param {*} val Expected value
* @param {string} [description] Optional message
* @example
*
* (10).should.be.eql(10);
* ('10').should.not.be.eql(10);
* (-0).should.not.be.eql(+0);
*
* NaN.should.be.eql(NaN);
*
* ({ a: 10}).should.be.eql({ a: 10 });
* [ 'a' ].should.not.be.eql({ '0': 'a' });
*/
Assertion.add('eql', function(val, description) {
this.params = {operator: 'to equal', expected: val, message: description};
var strictResult = eql(this.obj, val, should.config);
this.params.details = strictResult.result ? '': formatEqlResult(strictResult, this.obj, val, should.format);
this.params.showDiff = type(this.obj) == type(val);
this.assert(strictResult.result);
});
/**
* Exact comparison using ===.
*
* @name equal
* @memberOf Assertion
* @category assertion equality
* @alias Assertion#exactly
* @param {*} val Expected value
* @param {string} [description] Optional message
* @example
*
* 10.should.be.equal(10);
* 'a'.should.be.exactly('a');
*
* should(null).be.exactly(null);
*/
Assertion.add('equal', function(val, description) {
this.params = {operator: 'to be', expected: val, message: description};
this.params.showDiff = type(this.obj) == type(val);
this.assert(val === this.obj);
});
Assertion.alias('equal', 'exactly');
};