konacha-chai-matchers 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/.gitmodules +36 -0
- data/Gemfile +7 -0
- data/LICENSE +22 -0
- data/README.md +38 -0
- data/Rakefile +2 -0
- data/konacha-chai-matchers.gemspec +21 -0
- data/lib/konacha-chai-matchers.rb +11 -0
- data/lib/konacha-chai-matchers/version.rb +7 -0
- data/tasks/update.rb +47 -0
- data/vendor/assets/javascripts/chai-as-promised.js +391 -0
- data/vendor/assets/javascripts/chai-backbone.js +101 -0
- data/vendor/assets/javascripts/chai-changes.js +173 -0
- data/vendor/assets/javascripts/chai-factories.js +166 -0
- data/vendor/assets/javascripts/chai-jquery.js +232 -0
- data/vendor/assets/javascripts/chai-null.js +136 -0
- data/vendor/assets/javascripts/chai-spies.js +372 -0
- data/vendor/assets/javascripts/chai-stats.js +286 -0
- data/vendor/assets/javascripts/chai-timers.js +174 -0
- data/vendor/assets/javascripts/js-factories.js +71 -0
- data/vendor/assets/javascripts/sinon-chai.js +106 -0
- data/vendor/assets/javascripts/sinon.js +3738 -0
- metadata +74 -0
@@ -0,0 +1,101 @@
|
|
1
|
+
(function() {
|
2
|
+
|
3
|
+
(function(chaiBackbone) {
|
4
|
+
if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
|
5
|
+
return module.exports = chaiBackbone;
|
6
|
+
} else if (typeof define === "function" && define.amd) {
|
7
|
+
return define(function() {
|
8
|
+
return chaiBackbone;
|
9
|
+
});
|
10
|
+
} else {
|
11
|
+
return chai.use(chaiBackbone);
|
12
|
+
}
|
13
|
+
})(function(chai, utils) {
|
14
|
+
var flag, inspect, routeTo;
|
15
|
+
inspect = utils.inspect;
|
16
|
+
flag = utils.flag;
|
17
|
+
chai.Assertion.addMethod('trigger', function(trigger, options) {
|
18
|
+
var definedActions;
|
19
|
+
if (options == null) options = {};
|
20
|
+
definedActions = flag(this, 'whenActions') || [];
|
21
|
+
definedActions.push({
|
22
|
+
negate: flag(this, 'negate'),
|
23
|
+
before: function(context) {
|
24
|
+
this.callback = sinon.spy();
|
25
|
+
return flag(context, 'object').on(trigger, this.callback);
|
26
|
+
},
|
27
|
+
after: function(context) {
|
28
|
+
var negate, _ref;
|
29
|
+
negate = flag(context, 'negate');
|
30
|
+
flag(context, 'negate', this.negate);
|
31
|
+
context.assert(this.callback.calledOnce, "expected to trigger " + trigger, "expected not to trigger " + trigger);
|
32
|
+
if (options["with"] != null) {
|
33
|
+
context.assert((_ref = this.callback).calledWith.apply(_ref, options["with"]), "expected trigger to be called with " + (inspect(options["with"])) + ", but was called with " + (inspect(this.callback.args[0])) + ".", "expected trigger not to be called with " + (inspect(options["with"])) + ", but was");
|
34
|
+
}
|
35
|
+
return flag(context, 'negate', negate);
|
36
|
+
}
|
37
|
+
});
|
38
|
+
return flag(this, 'whenActions', definedActions);
|
39
|
+
});
|
40
|
+
chai.Assertion.addProperty('route', function() {
|
41
|
+
return flag(this, 'routing', true);
|
42
|
+
});
|
43
|
+
routeTo = function(router, methodName, options) {
|
44
|
+
var consideredRouter, current_history, route, spy, _i, _len, _ref;
|
45
|
+
if (options == null) options = {};
|
46
|
+
current_history = Backbone.history;
|
47
|
+
Backbone.history = new Backbone.History;
|
48
|
+
spy = sinon.spy(router, methodName);
|
49
|
+
this.assert(router._bindRoutes != null, 'provided router is not a Backbone.Router');
|
50
|
+
router._bindRoutes();
|
51
|
+
if (options.considering != null) {
|
52
|
+
_ref = options.considering;
|
53
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
54
|
+
consideredRouter = _ref[_i];
|
55
|
+
consideredRouter._bindRoutes();
|
56
|
+
}
|
57
|
+
}
|
58
|
+
Backbone.history.options = {
|
59
|
+
root: '/'
|
60
|
+
};
|
61
|
+
route = flag(this, 'object');
|
62
|
+
Backbone.history.loadUrl(route);
|
63
|
+
Backbone.history = current_history;
|
64
|
+
router[methodName].restore();
|
65
|
+
this.assert(spy.calledOnce, "expected `" + route + "` to route to " + methodName, "expected `" + route + "` not to route to " + methodName);
|
66
|
+
if (options.arguments != null) {
|
67
|
+
return this.assert(spy.calledWith.apply(spy, options.arguments), "expected `" + methodName + "` to be called with " + (inspect(options.arguments)) + ", but was called with " + (inspect(spy.args[0])) + " instead", "expected `" + methodName + "` not to be called with " + (inspect(options.arguments)) + ", but was");
|
68
|
+
}
|
69
|
+
};
|
70
|
+
chai.Assertion.overwriteProperty('to', function(_super) {
|
71
|
+
return function() {
|
72
|
+
if (flag(this, 'routing')) {
|
73
|
+
return routeTo;
|
74
|
+
} else {
|
75
|
+
return _super.apply(this, arguments);
|
76
|
+
}
|
77
|
+
};
|
78
|
+
});
|
79
|
+
return chai.Assertion.addMethod('call', function(methodName) {
|
80
|
+
var definedActions, object;
|
81
|
+
object = flag(this, 'object');
|
82
|
+
definedActions = flag(this, 'whenActions') || [];
|
83
|
+
definedActions.push({
|
84
|
+
negate: flag(this, 'negate'),
|
85
|
+
before: function(context) {
|
86
|
+
this.originalMethod = object[methodName];
|
87
|
+
this.spy = sinon.spy();
|
88
|
+
object[methodName] = this.spy;
|
89
|
+
return typeof object.delegateEvents === "function" ? object.delegateEvents() : void 0;
|
90
|
+
},
|
91
|
+
after: function(context) {
|
92
|
+
object[methodName] = this.originalMethod;
|
93
|
+
if (typeof object.delegateEvents === "function") object.delegateEvents();
|
94
|
+
return context.assert(this.spy.callCount > 0, this.spy.printf("expected %n to have been called at least once"), this.spy.printf("expected %n to not have been called"));
|
95
|
+
}
|
96
|
+
});
|
97
|
+
return flag(this, 'whenActions', definedActions);
|
98
|
+
});
|
99
|
+
});
|
100
|
+
|
101
|
+
}).call(this);
|
@@ -0,0 +1,173 @@
|
|
1
|
+
(function(chaiChanges) {
|
2
|
+
if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
|
3
|
+
return module.exports = chaiChanges;
|
4
|
+
} else if (typeof define === "function" && define.amd) {
|
5
|
+
return define(function() {
|
6
|
+
return chaiChanges;
|
7
|
+
});
|
8
|
+
} else {
|
9
|
+
return chai.use(chaiChanges);
|
10
|
+
}
|
11
|
+
})(function(chai, utils) {
|
12
|
+
var changeBy, changeByAssert, changeFrom, changeFromAssert, changeFromBeginAssert, changeTo, changeToAssert, changeToBeginAssert, flag, formatFunction, inspect, noChangeAssert;
|
13
|
+
inspect = utils.inspect;
|
14
|
+
flag = utils.flag;
|
15
|
+
/*
|
16
|
+
#
|
17
|
+
# Changes Matchers
|
18
|
+
#
|
19
|
+
*/
|
20
|
+
|
21
|
+
chai.Assertion.addMethod('when', function(val) {
|
22
|
+
var action, definedActions, _i, _j, _len, _len1, _results;
|
23
|
+
definedActions = flag(this, 'whenActions') || [];
|
24
|
+
for (_i = 0, _len = definedActions.length; _i < _len; _i++) {
|
25
|
+
action = definedActions[_i];
|
26
|
+
if (typeof action.before === "function") {
|
27
|
+
action.before(this);
|
28
|
+
}
|
29
|
+
}
|
30
|
+
val();
|
31
|
+
_results = [];
|
32
|
+
for (_j = 0, _len1 = definedActions.length; _j < _len1; _j++) {
|
33
|
+
action = definedActions[_j];
|
34
|
+
_results.push(typeof action.after === "function" ? action.after(this) : void 0);
|
35
|
+
}
|
36
|
+
return _results;
|
37
|
+
});
|
38
|
+
noChangeAssert = function(context) {
|
39
|
+
var endValue, negate, object, relevant, result, startValue;
|
40
|
+
relevant = flag(context, 'no-change');
|
41
|
+
if (!relevant) {
|
42
|
+
return;
|
43
|
+
}
|
44
|
+
negate = flag(context, 'negate');
|
45
|
+
flag(context, 'negate', this.negate);
|
46
|
+
object = flag(context, 'object');
|
47
|
+
startValue = flag(context, 'changeStart');
|
48
|
+
endValue = object();
|
49
|
+
result = !utils.eql(endValue, startValue);
|
50
|
+
context.assert(result, "expected `" + (formatFunction(object)) + "` to change, but it stayed " + (utils.inspect(startValue)), "expected `" + (formatFunction(object)) + "` not to change, but it changed from " + (utils.inspect(startValue)) + " to " + (utils.inspect(endValue)));
|
51
|
+
return flag(context, 'negate', negate);
|
52
|
+
};
|
53
|
+
changeByAssert = function(context) {
|
54
|
+
var actualDelta, endValue, negate, object, startValue;
|
55
|
+
negate = flag(context, 'negate');
|
56
|
+
flag(context, 'negate', this.negate);
|
57
|
+
object = flag(context, 'object');
|
58
|
+
startValue = flag(context, 'changeStart');
|
59
|
+
endValue = object();
|
60
|
+
actualDelta = endValue - startValue;
|
61
|
+
context.assert(this.expectedDelta === actualDelta, "expected `" + (formatFunction(object)) + "` to change by " + this.expectedDelta + ", but it changed by " + actualDelta, "expected `" + (formatFunction(object)) + "` not to change by " + this.expectedDelta + ", but it did");
|
62
|
+
return flag(context, 'negate', negate);
|
63
|
+
};
|
64
|
+
changeToBeginAssert = function(context) {
|
65
|
+
var negate, object, result, startValue;
|
66
|
+
negate = flag(context, 'negate');
|
67
|
+
flag(context, 'negate', this.negate);
|
68
|
+
object = flag(context, 'object');
|
69
|
+
startValue = object();
|
70
|
+
result = !utils.eql(startValue, this.expectedEndValue);
|
71
|
+
if (negate) {
|
72
|
+
result = !result;
|
73
|
+
}
|
74
|
+
context.assert(result, "expected `" + (formatFunction(object)) + "` to change to " + (utils.inspect(this.expectedEndValue)) + ", but it was already " + (utils.inspect(startValue)), "not supported");
|
75
|
+
return flag(context, 'negate', negate);
|
76
|
+
};
|
77
|
+
changeToAssert = function(context) {
|
78
|
+
var endValue, negate, object, result;
|
79
|
+
negate = flag(context, 'negate');
|
80
|
+
flag(context, 'negate', this.negate);
|
81
|
+
object = flag(context, 'object');
|
82
|
+
endValue = object();
|
83
|
+
result = utils.eql(endValue, this.expectedEndValue);
|
84
|
+
context.assert(result, "expected `" + (formatFunction(object)) + "` to change to " + (utils.inspect(this.expectedEndValue)) + ", but it changed to " + (utils.inspect(endValue)), "expected `" + (formatFunction(object)) + "` not to change to " + (utils.inspect(this.expectedEndValue)) + ", but it did");
|
85
|
+
return flag(context, 'negate', negate);
|
86
|
+
};
|
87
|
+
changeFromBeginAssert = function(context) {
|
88
|
+
var negate, object, result, startValue;
|
89
|
+
negate = flag(context, 'negate');
|
90
|
+
flag(context, 'negate', this.negate);
|
91
|
+
object = flag(context, 'object');
|
92
|
+
startValue = object();
|
93
|
+
result = utils.eql(startValue, this.expectedStartValue);
|
94
|
+
context.assert(result, "expected the change of `" + (formatFunction(object)) + "` to start from " + (utils.inspect(this.expectedStartValue)) + ", but it started from " + (utils.inspect(startValue)), "expected the change of `" + (formatFunction(object)) + "` not to start from " + (utils.inspect(this.expectedStartValue)) + ", but it did");
|
95
|
+
return flag(context, 'negate', negate);
|
96
|
+
};
|
97
|
+
changeFromAssert = function(context) {
|
98
|
+
var endValue, negate, object, result, startValue;
|
99
|
+
negate = flag(context, 'negate');
|
100
|
+
flag(context, 'negate', this.negate);
|
101
|
+
object = flag(context, 'object');
|
102
|
+
startValue = flag(context, 'changeStart');
|
103
|
+
endValue = object();
|
104
|
+
result = !utils.eql(startValue, endValue);
|
105
|
+
if (negate) {
|
106
|
+
result = !result;
|
107
|
+
}
|
108
|
+
context.assert(result, "expected `" + (formatFunction(object)) + "` to change from " + (utils.inspect(this.expectedStartValue)) + ", but it did not change", "not supported");
|
109
|
+
return flag(context, 'negate', negate);
|
110
|
+
};
|
111
|
+
chai.Assertion.addProperty('change', function() {
|
112
|
+
var definedActions;
|
113
|
+
flag(this, 'no-change', true);
|
114
|
+
definedActions = flag(this, 'whenActions') || [];
|
115
|
+
definedActions.push({
|
116
|
+
negate: flag(this, 'negate'),
|
117
|
+
before: function(context) {
|
118
|
+
var startValue;
|
119
|
+
startValue = flag(context, 'object')();
|
120
|
+
return flag(context, 'changeStart', startValue);
|
121
|
+
},
|
122
|
+
after: noChangeAssert
|
123
|
+
});
|
124
|
+
return flag(this, 'whenActions', definedActions);
|
125
|
+
});
|
126
|
+
formatFunction = function(func) {
|
127
|
+
return func.toString().replace(/^\s*function \(\) {\s*/, '').replace(/\s+}$/, '').replace(/\s*return\s*/, '');
|
128
|
+
};
|
129
|
+
changeBy = function(delta) {
|
130
|
+
var definedActions;
|
131
|
+
flag(this, 'no-change', false);
|
132
|
+
definedActions = flag(this, 'whenActions') || [];
|
133
|
+
definedActions.push({
|
134
|
+
negate: flag(this, 'negate'),
|
135
|
+
expectedDelta: delta,
|
136
|
+
after: changeByAssert
|
137
|
+
});
|
138
|
+
return flag(this, 'whenActions', definedActions);
|
139
|
+
};
|
140
|
+
chai.Assertion.addChainableMethod('by', changeBy, function() {
|
141
|
+
return this;
|
142
|
+
});
|
143
|
+
changeTo = function(endValue) {
|
144
|
+
var definedActions;
|
145
|
+
flag(this, 'no-change', false);
|
146
|
+
definedActions = flag(this, 'whenActions') || [];
|
147
|
+
definedActions.push({
|
148
|
+
negate: flag(this, 'negate'),
|
149
|
+
expectedEndValue: endValue,
|
150
|
+
before: changeToBeginAssert,
|
151
|
+
after: changeToAssert
|
152
|
+
});
|
153
|
+
return flag(this, 'whenActions', definedActions);
|
154
|
+
};
|
155
|
+
chai.Assertion.addChainableMethod('to', changeTo, function() {
|
156
|
+
return this;
|
157
|
+
});
|
158
|
+
changeFrom = function(startValue) {
|
159
|
+
var definedActions;
|
160
|
+
flag(this, 'no-change', false);
|
161
|
+
definedActions = flag(this, 'whenActions') || [];
|
162
|
+
definedActions.push({
|
163
|
+
negate: flag(this, 'negate'),
|
164
|
+
expectedStartValue: startValue,
|
165
|
+
before: changeFromBeginAssert,
|
166
|
+
after: changeFromAssert
|
167
|
+
});
|
168
|
+
return flag(this, 'whenActions', definedActions);
|
169
|
+
};
|
170
|
+
return chai.Assertion.addChainableMethod('from', changeFrom, function() {
|
171
|
+
return this;
|
172
|
+
});
|
173
|
+
});
|
@@ -0,0 +1,166 @@
|
|
1
|
+
!function (name, definition) {
|
2
|
+
if (typeof define == 'function' && typeof define.amd == 'object') define(definition);
|
3
|
+
else this[name] = definition();
|
4
|
+
}('chai_factories', function () {
|
5
|
+
// CommonJS require()
|
6
|
+
function require(p){
|
7
|
+
var path = require.resolve(p)
|
8
|
+
, mod = require.modules[path];
|
9
|
+
if (!mod) throw new Error('failed to require "' + p + '"');
|
10
|
+
if (!mod.exports) {
|
11
|
+
mod.exports = {};
|
12
|
+
mod.call(mod.exports, mod, mod.exports, require.relative(path));
|
13
|
+
}
|
14
|
+
return mod.exports;
|
15
|
+
}
|
16
|
+
|
17
|
+
require.modules = {};
|
18
|
+
|
19
|
+
require.resolve = function (path){
|
20
|
+
var orig = path
|
21
|
+
, reg = path + '.js'
|
22
|
+
, index = path + '/index.js';
|
23
|
+
return require.modules[reg] && reg
|
24
|
+
|| require.modules[index] && index
|
25
|
+
|| orig;
|
26
|
+
};
|
27
|
+
|
28
|
+
require.register = function (path, fn){
|
29
|
+
require.modules[path] = fn;
|
30
|
+
};
|
31
|
+
|
32
|
+
require.relative = function (parent) {
|
33
|
+
return function(p){
|
34
|
+
if ('.' != p[0]) return require(p);
|
35
|
+
|
36
|
+
var path = parent.split('/')
|
37
|
+
, segs = p.split('/');
|
38
|
+
path.pop();
|
39
|
+
|
40
|
+
for (var i = 0; i < segs.length; i++) {
|
41
|
+
var seg = segs[i];
|
42
|
+
if ('..' == seg) path.pop();
|
43
|
+
else if ('.' != seg) path.push(seg);
|
44
|
+
}
|
45
|
+
|
46
|
+
return require(path.join('/'));
|
47
|
+
};
|
48
|
+
};
|
49
|
+
|
50
|
+
|
51
|
+
require.register("factories", function (module, exports, require) {
|
52
|
+
/*!
|
53
|
+
* chai-null :: Factories over fixtures
|
54
|
+
*
|
55
|
+
* Chai.js Team - http://chaijs.com/
|
56
|
+
* Copyright (c) 2012 Veselin Todorov <hi@vesln.com>
|
57
|
+
*
|
58
|
+
* MIT Licensed
|
59
|
+
*/
|
60
|
+
|
61
|
+
/**
|
62
|
+
* Extends multiple objects.
|
63
|
+
*
|
64
|
+
* @returns {Object}
|
65
|
+
*/
|
66
|
+
function extend() {
|
67
|
+
var arr = Array.prototype.slice.call(arguments);
|
68
|
+
var main = arr.length === 2 ? arr.shift() : {};
|
69
|
+
|
70
|
+
arr.forEach(function(obj) {
|
71
|
+
for (var p in obj) {
|
72
|
+
if (!obj.hasOwnProperty(p)) continue;
|
73
|
+
main[p] = obj[p];
|
74
|
+
}
|
75
|
+
});
|
76
|
+
|
77
|
+
return main;
|
78
|
+
};
|
79
|
+
|
80
|
+
/**
|
81
|
+
* Collector. Store the registered factories.
|
82
|
+
*
|
83
|
+
* @api public
|
84
|
+
*/
|
85
|
+
function Collector() {
|
86
|
+
this.collection = {};
|
87
|
+
};
|
88
|
+
|
89
|
+
/**
|
90
|
+
* Register a factory.
|
91
|
+
*
|
92
|
+
* @param {String} name
|
93
|
+
* @param {Factory} factory
|
94
|
+
* @api public
|
95
|
+
*/
|
96
|
+
Collector.prototype.set = function(name, factory) {
|
97
|
+
this.collection[name] = factory;
|
98
|
+
};
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Get a factory.
|
102
|
+
*
|
103
|
+
* @param {String} name
|
104
|
+
* @returns {Factory} factory
|
105
|
+
* @api public
|
106
|
+
*/
|
107
|
+
Collector.prototype.get = function(name) {
|
108
|
+
return this.collection[name];
|
109
|
+
};
|
110
|
+
|
111
|
+
/**
|
112
|
+
* Factory class.
|
113
|
+
*
|
114
|
+
* @param {Object} attributes
|
115
|
+
* @api public
|
116
|
+
*/
|
117
|
+
function Factory(attributes) {
|
118
|
+
this.attributes = attributes;
|
119
|
+
};
|
120
|
+
|
121
|
+
/**
|
122
|
+
* Create a factory.
|
123
|
+
*
|
124
|
+
* @param {Object} attributes
|
125
|
+
* @returns {Object}
|
126
|
+
* @api public
|
127
|
+
*/
|
128
|
+
Factory.prototype.create = function(attributes) {
|
129
|
+
return extend(extend(this.attributes), attributes);
|
130
|
+
};
|
131
|
+
|
132
|
+
/**
|
133
|
+
* Extend a factory.
|
134
|
+
*
|
135
|
+
* @param {Object} attributes
|
136
|
+
* @returns {Object}
|
137
|
+
* @api public
|
138
|
+
*/
|
139
|
+
Factory.prototype.extend = function(attributes) {
|
140
|
+
return this.create(attributes);
|
141
|
+
};
|
142
|
+
|
143
|
+
/**
|
144
|
+
* Register as plugin.
|
145
|
+
*/
|
146
|
+
module.exports = function(chai, _) {
|
147
|
+
var collector = new Collector;
|
148
|
+
|
149
|
+
chai.factory = function(name, attributes) {
|
150
|
+
var factory = new Factory(attributes);
|
151
|
+
collector.set(name, factory);
|
152
|
+
return factory;
|
153
|
+
};
|
154
|
+
|
155
|
+
chai.create = function(name, attributes) {
|
156
|
+
var factory = collector.get(name);
|
157
|
+
if (!factory) throw new Error('Unknown factory: ' + name);
|
158
|
+
return factory.create(attributes);
|
159
|
+
};
|
160
|
+
};
|
161
|
+
|
162
|
+
}); // module factories
|
163
|
+
return require('factories');
|
164
|
+
});
|
165
|
+
|
166
|
+
chai.use(chai_factories);
|
@@ -0,0 +1,232 @@
|
|
1
|
+
(function (chaiJquery) {
|
2
|
+
// Module systems magic dance.
|
3
|
+
if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
|
4
|
+
// NodeJS
|
5
|
+
module.exports = chaiJquery;
|
6
|
+
} else if (typeof define === "function" && define.amd) {
|
7
|
+
// AMD
|
8
|
+
define(function () {
|
9
|
+
return chaiJquery;
|
10
|
+
});
|
11
|
+
} else {
|
12
|
+
// Other environment (usually <script> tag): plug in to global chai instance directly.
|
13
|
+
chai.use(chaiJquery);
|
14
|
+
}
|
15
|
+
}(function (chai, utils) {
|
16
|
+
var inspect = utils.inspect,
|
17
|
+
flag = utils.flag;
|
18
|
+
|
19
|
+
jQuery.fn.inspect = function (depth) {
|
20
|
+
var el = jQuery('<div />').append(this.clone());
|
21
|
+
if (depth !== undefined) {
|
22
|
+
var children = el.children();
|
23
|
+
while (depth-- > 0)
|
24
|
+
children = children.children();
|
25
|
+
children.html('...');
|
26
|
+
}
|
27
|
+
return el.html();
|
28
|
+
};
|
29
|
+
|
30
|
+
var props = {attr: 'attribute', css: 'CSS property'};
|
31
|
+
for (var prop in props) {
|
32
|
+
(function (prop, description) {
|
33
|
+
chai.Assertion.addMethod(prop, function (name, val) {
|
34
|
+
var actual = flag(this, 'object')[prop](name);
|
35
|
+
|
36
|
+
if (!flag(this, 'negate') || undefined === val) {
|
37
|
+
this.assert(
|
38
|
+
undefined !== actual
|
39
|
+
, 'expected #{this} to have a #{exp} ' + description
|
40
|
+
, 'expected #{this} not to have a #{exp} ' + description
|
41
|
+
, name
|
42
|
+
);
|
43
|
+
}
|
44
|
+
|
45
|
+
if (undefined !== val) {
|
46
|
+
this.assert(
|
47
|
+
val === actual
|
48
|
+
, 'expected #{this} to have a ' + inspect(name) + ' ' + description + ' with the value #{exp}, but the value was #{act}'
|
49
|
+
, 'expected #{this} not to have a ' + inspect(name) + ' ' + description + ' with the value #{act}'
|
50
|
+
, val
|
51
|
+
, actual
|
52
|
+
);
|
53
|
+
}
|
54
|
+
|
55
|
+
flag(this, 'object', actual);
|
56
|
+
});
|
57
|
+
})(prop, props[prop]);
|
58
|
+
}
|
59
|
+
|
60
|
+
chai.Assertion.addMethod('data', function (name, val) {
|
61
|
+
// Work around a chai bug (https://github.com/logicalparadox/chai/issues/16)
|
62
|
+
if (flag(this, 'negate') && undefined !== val && undefined === flag(this, 'object').data(name)) {
|
63
|
+
return;
|
64
|
+
}
|
65
|
+
|
66
|
+
var assertion = new chai.Assertion(flag(this, 'object').data());
|
67
|
+
if (flag(this, 'negate'))
|
68
|
+
assertion = assertion.not;
|
69
|
+
return assertion.property(name, val);
|
70
|
+
});
|
71
|
+
|
72
|
+
chai.Assertion.addMethod('class', function (className) {
|
73
|
+
this.assert(
|
74
|
+
flag(this, 'object').hasClass(className)
|
75
|
+
, 'expected #{this} to have class #{exp}'
|
76
|
+
, 'expected #{this} not to have class #{exp}'
|
77
|
+
, className
|
78
|
+
);
|
79
|
+
});
|
80
|
+
|
81
|
+
chai.Assertion.addMethod('id', function (id) {
|
82
|
+
this.assert(
|
83
|
+
flag(this, 'object').attr('id') === id
|
84
|
+
, 'expected #{this} to have id #{exp}'
|
85
|
+
, 'expected #{this} not to have id #{exp}'
|
86
|
+
, id
|
87
|
+
);
|
88
|
+
});
|
89
|
+
|
90
|
+
chai.Assertion.addMethod('html', function (html) {
|
91
|
+
this.assert(
|
92
|
+
flag(this, 'object').html() === html
|
93
|
+
, 'expected #{this} to have HTML #{exp}'
|
94
|
+
, 'expected #{this} not to have HTML #{exp}'
|
95
|
+
, html
|
96
|
+
);
|
97
|
+
});
|
98
|
+
|
99
|
+
chai.Assertion.addMethod('text', function (text) {
|
100
|
+
this.assert(
|
101
|
+
flag(this, 'object').text() === text
|
102
|
+
, 'expected #{this} to have text #{exp}'
|
103
|
+
, 'expected #{this} not to have text #{exp}'
|
104
|
+
, text
|
105
|
+
);
|
106
|
+
});
|
107
|
+
|
108
|
+
chai.Assertion.addMethod('value', function (value) {
|
109
|
+
this.assert(
|
110
|
+
flag(this, 'object').val() === value
|
111
|
+
, 'expected #{this} to have value #{exp}'
|
112
|
+
, 'expected #{this} not to have value #{exp}'
|
113
|
+
, value
|
114
|
+
);
|
115
|
+
});
|
116
|
+
|
117
|
+
jQuery.each(['visible', 'hidden', 'selected', 'checked', 'disabled'], function (i, attr) {
|
118
|
+
chai.Assertion.addProperty(attr, function () {
|
119
|
+
this.assert(
|
120
|
+
flag(this, 'object').is(':' + attr)
|
121
|
+
, 'expected #{this} to be ' + attr
|
122
|
+
, 'expected #{this} not to be ' + attr);
|
123
|
+
});
|
124
|
+
});
|
125
|
+
|
126
|
+
chai.Assertion.overwriteProperty('exist', function (_super) {
|
127
|
+
return function () {
|
128
|
+
var obj = flag(this, 'object');
|
129
|
+
if (obj instanceof jQuery) {
|
130
|
+
this.assert(
|
131
|
+
obj.length > 0
|
132
|
+
, 'expected ' + inspect(obj.selector) + ' to exist'
|
133
|
+
, 'expected ' + inspect(obj.selector) + ' not to exist');
|
134
|
+
} else {
|
135
|
+
_super.apply(this, arguments);
|
136
|
+
}
|
137
|
+
};
|
138
|
+
});
|
139
|
+
|
140
|
+
chai.Assertion.overwriteProperty('empty', function (_super) {
|
141
|
+
return function () {
|
142
|
+
var obj = flag(this, 'object');
|
143
|
+
if (obj instanceof jQuery) {
|
144
|
+
this.assert(
|
145
|
+
obj.is(':empty')
|
146
|
+
, 'expected #{this} to be empty'
|
147
|
+
, 'expected #{this} not to be empty');
|
148
|
+
} else {
|
149
|
+
_super.apply(this, arguments);
|
150
|
+
}
|
151
|
+
};
|
152
|
+
});
|
153
|
+
|
154
|
+
chai.Assertion.overwriteProperty('be', function (_super) {
|
155
|
+
return function () {
|
156
|
+
var be = function (selector) {
|
157
|
+
var obj = flag(this, 'object');
|
158
|
+
if (obj instanceof jQuery) {
|
159
|
+
this.assert(
|
160
|
+
obj.is(selector)
|
161
|
+
, 'expected #{this} to be #{exp}'
|
162
|
+
, 'expected #{this} not to be #{exp}'
|
163
|
+
, selector
|
164
|
+
);
|
165
|
+
} else {
|
166
|
+
_super.apply(this, arguments);
|
167
|
+
}
|
168
|
+
};
|
169
|
+
be.__proto__ = this;
|
170
|
+
return be;
|
171
|
+
}
|
172
|
+
});
|
173
|
+
|
174
|
+
chai.Assertion.overwriteMethod('match', function (_super) {
|
175
|
+
return function (selector) {
|
176
|
+
var obj = flag(this, 'object');
|
177
|
+
if (obj instanceof jQuery) {
|
178
|
+
this.assert(
|
179
|
+
obj.is(selector)
|
180
|
+
, 'expected #{this} to match #{exp}'
|
181
|
+
, 'expected #{this} not to match #{exp}'
|
182
|
+
, selector
|
183
|
+
);
|
184
|
+
} else {
|
185
|
+
_super.apply(this, arguments);
|
186
|
+
}
|
187
|
+
}
|
188
|
+
});
|
189
|
+
|
190
|
+
chai.Assertion.overwriteProperty('contain', function (_super) {
|
191
|
+
return function () {
|
192
|
+
_super.call(this);
|
193
|
+
var contain = function (text) {
|
194
|
+
var obj = flag(this, 'object');
|
195
|
+
if (obj instanceof jQuery) {
|
196
|
+
this.assert(
|
197
|
+
obj.is(':contains(\'' + text + '\')')
|
198
|
+
, 'expected #{this} to contain #{exp}'
|
199
|
+
, 'expected #{this} not to contain #{exp}'
|
200
|
+
, text
|
201
|
+
);
|
202
|
+
} else {
|
203
|
+
Function.prototype.apply.call(_super.call(this), this, arguments);
|
204
|
+
}
|
205
|
+
};
|
206
|
+
contain.__proto__ = this;
|
207
|
+
return contain;
|
208
|
+
}
|
209
|
+
});
|
210
|
+
|
211
|
+
chai.Assertion.overwriteProperty('have', function (_super) {
|
212
|
+
return function () {
|
213
|
+
var obj = flag(this, 'object');
|
214
|
+
if (obj instanceof jQuery) {
|
215
|
+
var have = function (selector) {
|
216
|
+
this.assert(
|
217
|
+
// Using find() rather than has() to work around a jQuery bug:
|
218
|
+
// http://bugs.jquery.com/ticket/11706
|
219
|
+
obj.find(selector).length > 0
|
220
|
+
, 'expected #{this} to have #{exp}'
|
221
|
+
, 'expected #{this} not to have #{exp}'
|
222
|
+
, selector
|
223
|
+
);
|
224
|
+
};
|
225
|
+
have.__proto__ = this;
|
226
|
+
return have;
|
227
|
+
} else {
|
228
|
+
_super.call(this);
|
229
|
+
}
|
230
|
+
}
|
231
|
+
});
|
232
|
+
}));
|