mirror of https://gitee.com/bigwinds/arangodb
132 lines
3.7 KiB
JavaScript
132 lines
3.7 KiB
JavaScript
/*!
|
|
* chai
|
|
* http://chaijs.com
|
|
* Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
|
|
* MIT Licensed
|
|
*/
|
|
|
|
var config = require('./config');
|
|
|
|
module.exports = function (_chai, util) {
|
|
/*!
|
|
* Module dependencies.
|
|
*/
|
|
|
|
var AssertionError = _chai.AssertionError
|
|
, flag = util.flag;
|
|
|
|
/*!
|
|
* Module export.
|
|
*/
|
|
|
|
_chai.Assertion = Assertion;
|
|
|
|
/*!
|
|
* Assertion Constructor
|
|
*
|
|
* Creates object for chaining.
|
|
*
|
|
* @api private
|
|
*/
|
|
|
|
function Assertion (obj, msg, stack) {
|
|
flag(this, 'ssfi', stack || arguments.callee);
|
|
flag(this, 'object', obj);
|
|
flag(this, 'message', msg);
|
|
}
|
|
|
|
Object.defineProperty(Assertion, 'includeStack', {
|
|
get: function() {
|
|
console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');
|
|
return config.includeStack;
|
|
},
|
|
set: function(value) {
|
|
console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');
|
|
config.includeStack = value;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(Assertion, 'showDiff', {
|
|
get: function() {
|
|
console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');
|
|
return config.showDiff;
|
|
},
|
|
set: function(value) {
|
|
console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');
|
|
config.showDiff = value;
|
|
}
|
|
});
|
|
|
|
Assertion.addProperty = function (name, fn) {
|
|
util.addProperty(this.prototype, name, fn);
|
|
};
|
|
|
|
Assertion.addMethod = function (name, fn) {
|
|
util.addMethod(this.prototype, name, fn);
|
|
};
|
|
|
|
Assertion.addChainableMethod = function (name, fn, chainingBehavior) {
|
|
util.addChainableMethod(this.prototype, name, fn, chainingBehavior);
|
|
};
|
|
|
|
Assertion.overwriteProperty = function (name, fn) {
|
|
util.overwriteProperty(this.prototype, name, fn);
|
|
};
|
|
|
|
Assertion.overwriteMethod = function (name, fn) {
|
|
util.overwriteMethod(this.prototype, name, fn);
|
|
};
|
|
|
|
Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {
|
|
util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);
|
|
};
|
|
|
|
/**
|
|
* ### .assert(expression, message, negateMessage, expected, actual, showDiff)
|
|
*
|
|
* Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.
|
|
*
|
|
* @name assert
|
|
* @param {Philosophical} expression to be tested
|
|
* @param {String|Function} message or function that returns message to display if expression fails
|
|
* @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails
|
|
* @param {Mixed} expected value (remember to check for negation)
|
|
* @param {Mixed} actual (optional) will default to `this.obj`
|
|
* @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails
|
|
* @api private
|
|
*/
|
|
|
|
Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {
|
|
var ok = util.test(this, arguments);
|
|
if (true !== showDiff) showDiff = false;
|
|
if (true !== config.showDiff) showDiff = false;
|
|
|
|
if (!ok) {
|
|
var msg = util.getMessage(this, arguments)
|
|
, actual = util.getActual(this, arguments);
|
|
throw new AssertionError(msg, {
|
|
actual: actual
|
|
, expected: expected
|
|
, showDiff: showDiff
|
|
}, (config.includeStack) ? this.assert : flag(this, 'ssfi'));
|
|
}
|
|
};
|
|
|
|
/*!
|
|
* ### ._obj
|
|
*
|
|
* Quick reference to stored `actual` value for plugin developers.
|
|
*
|
|
* @api private
|
|
*/
|
|
|
|
Object.defineProperty(Assertion.prototype, '_obj',
|
|
{ get: function () {
|
|
return flag(this, 'object');
|
|
}
|
|
, set: function (val) {
|
|
flag(this, 'object', val);
|
|
}
|
|
});
|
|
};
|