konacha-chai-matchers 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,286 @@
|
|
1
|
+
!function (name, definition) {
|
2
|
+
if (typeof define == 'function' && typeof define.amd == 'object') define(definition);
|
3
|
+
else this[name] = definition();
|
4
|
+
}('chai_stats', 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("calc", function (module, exports, require) {
|
52
|
+
/*!
|
53
|
+
* Chai Stats - calculation utilities
|
54
|
+
* Copyright (c) 2012 Jake Luer <jake@alogicalparadox.com>
|
55
|
+
* MIT Licenced
|
56
|
+
*/
|
57
|
+
|
58
|
+
/**
|
59
|
+
* # sum
|
60
|
+
*
|
61
|
+
* Returns the sum of a given array of numbers.
|
62
|
+
*
|
63
|
+
* @param {Array} numbers to sum
|
64
|
+
* @returns sum
|
65
|
+
*/
|
66
|
+
|
67
|
+
exports.sum = function (nums) {
|
68
|
+
var res = 0;
|
69
|
+
for (var i = 0; i < nums.length; i++)
|
70
|
+
res += nums[i];
|
71
|
+
return res;
|
72
|
+
};
|
73
|
+
|
74
|
+
/**
|
75
|
+
* # mean
|
76
|
+
*
|
77
|
+
* Returns the mean (average) of a given array of numbers.
|
78
|
+
*
|
79
|
+
* @param {Array} numbers to average
|
80
|
+
* @returs mean
|
81
|
+
*/
|
82
|
+
|
83
|
+
exports.mean = function (nums) {
|
84
|
+
var sum = exports.sum(nums);
|
85
|
+
return sum / nums.length;
|
86
|
+
};
|
87
|
+
|
88
|
+
/**
|
89
|
+
* # sdeviation
|
90
|
+
*
|
91
|
+
* Returns the standard deviation of a given array of numbers.
|
92
|
+
*
|
93
|
+
* @param {Array} numbers for stdev
|
94
|
+
* @return standard deviation
|
95
|
+
*/
|
96
|
+
|
97
|
+
exports.sdeviation = function (nums) {
|
98
|
+
var devs = []
|
99
|
+
, mean = exports.mean(nums);
|
100
|
+
for (var i = 0; i < nums.length; i++)
|
101
|
+
devs.push(nums[i] - mean);
|
102
|
+
for (var d = 0; d < devs.length; d++)
|
103
|
+
devs[d] = Math.pow(devs[d], 2);
|
104
|
+
var davg = exports.sum(devs) / (devs.length - 1);
|
105
|
+
return Math.sqrt(davg);
|
106
|
+
};
|
107
|
+
|
108
|
+
}); // module calc
|
109
|
+
|
110
|
+
|
111
|
+
require.register("stats", function (module, exports, require) {
|
112
|
+
var calc = require('./calc');
|
113
|
+
|
114
|
+
module.exports = function (chai, _) {
|
115
|
+
var Assertion = chai.Assertion
|
116
|
+
, flag = _.flag
|
117
|
+
|
118
|
+
Assertion.addProperty('almost', function () {
|
119
|
+
flag(this, 'almost', true);
|
120
|
+
});
|
121
|
+
|
122
|
+
/**
|
123
|
+
* # .almost.equal(expected, [precision])
|
124
|
+
*
|
125
|
+
* The same as NumPy's assert_almost_equal, for scalars.
|
126
|
+
* Assert near equality: abs(expected-actual) < 0.5 * 10**(-decimal)
|
127
|
+
*
|
128
|
+
* expect(3.1415).to.almost.equal(3.14159, 3);
|
129
|
+
* assert.almostEqual(3.1416, 3.14159, 3, 'these numbers are almost equal');
|
130
|
+
*
|
131
|
+
* @name equal
|
132
|
+
* @param {Number} actual
|
133
|
+
* @param {Number} expected
|
134
|
+
* @param {Number} decimal
|
135
|
+
* @param {String} message
|
136
|
+
* @api public
|
137
|
+
*/
|
138
|
+
|
139
|
+
Assertion.overwriteMethod('equal', function(_super) {
|
140
|
+
return function equal (exp, precision) {
|
141
|
+
if (flag(this, 'almost')) {
|
142
|
+
var act = flag(this, 'object')
|
143
|
+
if (null == precision) precision = 7;
|
144
|
+
this.assert(
|
145
|
+
Math.abs(act - exp) < 0.5 * Math.pow(10, -precision)
|
146
|
+
, "expected #{this} to equal #{exp} up to " + _.inspect(precision) + " decimal places"
|
147
|
+
, "expected #{this} to not equal #{exp} up to " + _.inspect(precision) + " decimal places"
|
148
|
+
, exp
|
149
|
+
, act
|
150
|
+
);
|
151
|
+
} else {
|
152
|
+
_super.apply(this, arguments);
|
153
|
+
}
|
154
|
+
};
|
155
|
+
});
|
156
|
+
|
157
|
+
_.addMethod(chai.assert, 'almostEqual', function (act, exp, precision, msg) {
|
158
|
+
new Assertion(act, msg).to.almost.equal(exp, precision);
|
159
|
+
});
|
160
|
+
|
161
|
+
/**
|
162
|
+
* # .deepAlmostEqual(actual, expected, [decimal, message])
|
163
|
+
*
|
164
|
+
* The same as NumPy's assert_almost_equal, for objects whose leaves are all numbers.
|
165
|
+
* Assert near equality: abs(expected-actual) < 0.5 * 10**(-decimal) for every leaf.
|
166
|
+
*
|
167
|
+
* assert.deepAlmostEqual({pi: 3.1416}, {pi: 3.14159}, 3);
|
168
|
+
*
|
169
|
+
* @name equal
|
170
|
+
* @param {*} actual
|
171
|
+
* @param {*} expected
|
172
|
+
* @param {Number} decimal
|
173
|
+
* @param {String} message
|
174
|
+
* @api public
|
175
|
+
*/
|
176
|
+
|
177
|
+
Assertion.overwriteMethod('eql', function (_super) {
|
178
|
+
return function eql (exp, precision) {
|
179
|
+
if (flag(this, 'almost')) {
|
180
|
+
if (null == precision) precision = 7;
|
181
|
+
var act = flag(this, 'object')
|
182
|
+
, tol = 0.5 * Math.pow(10, -precision);
|
183
|
+
|
184
|
+
function deepEql (act, exp) {
|
185
|
+
if (Object(act) === act){
|
186
|
+
for (var k in act) {
|
187
|
+
if (!(deepEql(act[k], exp[k]))) {
|
188
|
+
return false;
|
189
|
+
}
|
190
|
+
}
|
191
|
+
return true;
|
192
|
+
} else {
|
193
|
+
return Math.abs(act - exp) < tol;
|
194
|
+
}
|
195
|
+
};
|
196
|
+
|
197
|
+
this.assert(
|
198
|
+
deepEql(act, exp)
|
199
|
+
, "expected #{this} to equal #{exp} up to " + _.inspect(precision) + ' decimal places'
|
200
|
+
, "expected #{this} to not equal #{exp} up to " + _.inspect(precision) + ' decimal places'
|
201
|
+
, exp
|
202
|
+
, act
|
203
|
+
);
|
204
|
+
} else {
|
205
|
+
_super.apply(this, arguments);
|
206
|
+
}
|
207
|
+
};
|
208
|
+
});
|
209
|
+
|
210
|
+
_.addMethod(chai.assert, 'deepAlmostEqual', function (act, exp, precision, msg) {
|
211
|
+
new Assertion(act, msg).to.almost.eql(exp, precision);
|
212
|
+
});
|
213
|
+
|
214
|
+
/**
|
215
|
+
* ### .sum
|
216
|
+
*
|
217
|
+
* Modifies the assertion subject with the sum of an
|
218
|
+
* array of number so it can be compared using chai's
|
219
|
+
* core assertions.
|
220
|
+
*
|
221
|
+
* expect([ 1, 2, 3 ]).to.have.sum.equal(6);
|
222
|
+
* expect([ 1, 2, 3 ]).to.have.sum.above(5);
|
223
|
+
* expect([ 1, 2, 3 ]).to.have.sum.below(7);
|
224
|
+
*
|
225
|
+
* @name sum
|
226
|
+
* @expects {Array}
|
227
|
+
* @api public
|
228
|
+
*/
|
229
|
+
|
230
|
+
Assertion.addProperty('sum', function () {
|
231
|
+
var obj = flag(this, 'object');
|
232
|
+
new Assertion(obj).to.be.instanceOf(Array);
|
233
|
+
flag(this, 'object', calc.sum(obj));
|
234
|
+
});
|
235
|
+
|
236
|
+
/**
|
237
|
+
* ### .mean
|
238
|
+
*
|
239
|
+
* Modifies the assertion subject with the mean of an
|
240
|
+
* array of number so it can be compared using chai's
|
241
|
+
* core assertions.
|
242
|
+
*
|
243
|
+
* expect([ 1, 2, 3 ]).to.have.mean.equal(2);
|
244
|
+
* expect([ 1, 2, 3 ]).to.have.mean.above(1.5);
|
245
|
+
* expect([ 1, 2, 3 ]).to.have.mean.below(2.5);
|
246
|
+
*
|
247
|
+
* @name mean
|
248
|
+
* @expects {Array}
|
249
|
+
* @api public
|
250
|
+
*/
|
251
|
+
|
252
|
+
Assertion.addProperty('mean', function () {
|
253
|
+
var obj = flag(this, 'object');
|
254
|
+
new Assertion(obj).to.be.instanceOf(Array);
|
255
|
+
flag(this, 'object', calc.mean(obj));
|
256
|
+
});
|
257
|
+
|
258
|
+
function deviation () {
|
259
|
+
var obj = flag(this, 'object');
|
260
|
+
new Assertion(obj).to.be.instanceOf(Array);
|
261
|
+
flag(this, 'object', calc.sdeviation(obj));
|
262
|
+
}
|
263
|
+
|
264
|
+
/**
|
265
|
+
* ### .deviation
|
266
|
+
*
|
267
|
+
* Modifies the assertion subject with the standard
|
268
|
+
* deviations of an array of number so it can be
|
269
|
+
* compared using chai's core assertions.
|
270
|
+
*
|
271
|
+
* expect([ 1, 2, 3, 4 ]).to.have.deviation.almost.equal(1.290, 2);
|
272
|
+
*
|
273
|
+
* @name mean
|
274
|
+
* @expects {Array}
|
275
|
+
* @api public
|
276
|
+
*/
|
277
|
+
|
278
|
+
Assertion.addProperty('stdev', deviation);
|
279
|
+
Assertion.addProperty('deviation', deviation);
|
280
|
+
};
|
281
|
+
|
282
|
+
}); // module stats
|
283
|
+
return require('stats');
|
284
|
+
});
|
285
|
+
|
286
|
+
chai.use(chai_stats);
|
@@ -0,0 +1,174 @@
|
|
1
|
+
!function (context, definition) {
|
2
|
+
if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
|
3
|
+
module.exports = definition();
|
4
|
+
} else if (typeof define === 'function' && typeof define.amd === 'object') {
|
5
|
+
define(definition);
|
6
|
+
} else {
|
7
|
+
if (!context.chai) throw new Error('Chai cannot be found in current scope.');
|
8
|
+
context.chai.use(definition());
|
9
|
+
}
|
10
|
+
}(this, function () {
|
11
|
+
|
12
|
+
|
13
|
+
function require(p) {
|
14
|
+
var path = require.resolve(p)
|
15
|
+
, mod = require.modules[path];
|
16
|
+
if (!mod) throw new Error('failed to require "' + p + '"');
|
17
|
+
if (!mod.exports) {
|
18
|
+
mod.exports = {};
|
19
|
+
mod.call(mod.exports, mod, mod.exports, require.relative(path));
|
20
|
+
}
|
21
|
+
return mod.exports;
|
22
|
+
}
|
23
|
+
|
24
|
+
require.modules = {};
|
25
|
+
|
26
|
+
require.resolve = function (path) {
|
27
|
+
var orig = path
|
28
|
+
, reg = path + '.js'
|
29
|
+
, index = path + '/index.js';
|
30
|
+
return require.modules[reg] && reg
|
31
|
+
|| require.modules[index] && index
|
32
|
+
|| orig;
|
33
|
+
};
|
34
|
+
|
35
|
+
require.register = function (path, fn) {
|
36
|
+
require.modules[path] = fn;
|
37
|
+
};
|
38
|
+
|
39
|
+
require.relative = function (parent) {
|
40
|
+
return function(p){
|
41
|
+
if ('.' != p[0]) return require(p);
|
42
|
+
|
43
|
+
var path = parent.split('/')
|
44
|
+
, segs = p.split('/');
|
45
|
+
path.pop();
|
46
|
+
|
47
|
+
for (var i = 0; i < segs.length; i++) {
|
48
|
+
var seg = segs[i];
|
49
|
+
if ('..' == seg) path.pop();
|
50
|
+
else if ('.' != seg) path.push(seg);
|
51
|
+
}
|
52
|
+
|
53
|
+
return require(path.join('/'));
|
54
|
+
};
|
55
|
+
};
|
56
|
+
|
57
|
+
require.alias = function (from, to) {
|
58
|
+
var fn = require.modules[from];
|
59
|
+
require.modules[to] = fn;
|
60
|
+
};
|
61
|
+
|
62
|
+
|
63
|
+
require.register("chai-timers.js", function(module, exports, require){
|
64
|
+
var Timer = require('./timer');
|
65
|
+
|
66
|
+
module.exports = function (chai, _) {
|
67
|
+
var Assertion = chai.Assertion;
|
68
|
+
|
69
|
+
chai.Timer = Timer;
|
70
|
+
|
71
|
+
chai.timer = function (name) {
|
72
|
+
return new Timer(name);
|
73
|
+
};
|
74
|
+
|
75
|
+
Assertion.addProperty('timer', function () {
|
76
|
+
this.assert(
|
77
|
+
this._obj instanceof Timer
|
78
|
+
, 'expected #{this} to be a chai timer'
|
79
|
+
, 'expected #{this} to not be a chai timer' );
|
80
|
+
});
|
81
|
+
|
82
|
+
[ 'started', 'stopped', 'created' ].forEach(function (when) {
|
83
|
+
Assertion.overwriteProperty(when, function (_super) {
|
84
|
+
return function () {
|
85
|
+
if (this._obj instanceof Timer) {
|
86
|
+
_.flag(this, 'timer_when', when);
|
87
|
+
} else {
|
88
|
+
_super.call(this);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
});
|
92
|
+
});
|
93
|
+
|
94
|
+
Assertion.overwriteMethod('before', function (_super) {
|
95
|
+
return function assertBefore (timer2, when2) {
|
96
|
+
var timer1 = this._obj;
|
97
|
+
new Assertion(timer1).to.be.a.timer;
|
98
|
+
new Assertion(timer2).to.be.a.timer;
|
99
|
+
|
100
|
+
var when1 = _.flag(this, 'timer_when') || 'started';
|
101
|
+
when2 = when2 || when1;
|
102
|
+
var time1 = timer1[when1].getTime()
|
103
|
+
, time2 = timer2[when2].getTime();
|
104
|
+
|
105
|
+
this.assert(
|
106
|
+
time1 < time2
|
107
|
+
, 'expected timer {' + timer1.name + '} to have been ' + when1 + ' before timer {' + timer2.name + '} was ' + when2
|
108
|
+
, 'expected timer {' + timer1.name + '} to not have been ' + when1 + ' before timer {' + timer2.name + '} was ' + when2
|
109
|
+
);
|
110
|
+
};
|
111
|
+
});
|
112
|
+
|
113
|
+
Assertion.overwriteMethod('after', function (_super) {
|
114
|
+
return function assertBefore (timer2, when2) {
|
115
|
+
var timer1 = this._obj;
|
116
|
+
new Assertion(timer1).to.be.a.timer;
|
117
|
+
new Assertion(timer2).to.be.a.timer;
|
118
|
+
|
119
|
+
var when1 = _.flag(this, 'timer_when') || 'started';
|
120
|
+
when2 = when2 || when1;
|
121
|
+
var time1 = timer1[when1].getTime()
|
122
|
+
, time2 = timer2[when2].getTime();
|
123
|
+
|
124
|
+
this.assert(
|
125
|
+
time1 > time2
|
126
|
+
, 'expected timer {' + timer1.name + '} to have been ' + when1 + ' after timer {' + timer2.name + '} was ' + when2
|
127
|
+
, 'expected timer {' + timer1.name + '} to not have been ' + when1 + ' after timer {' + timer2.name + '} was' + when2
|
128
|
+
);
|
129
|
+
};
|
130
|
+
});
|
131
|
+
|
132
|
+
};
|
133
|
+
|
134
|
+
}); // module: chai-timers.js
|
135
|
+
|
136
|
+
require.register("timer.js", function(module, exports, require){
|
137
|
+
|
138
|
+
module.exports = Timer;
|
139
|
+
|
140
|
+
function Timer (name) {
|
141
|
+
this.name = name || 'timer';
|
142
|
+
this.created = new Date();
|
143
|
+
this.marks = [];
|
144
|
+
this.started = null;
|
145
|
+
this.stopped = null;
|
146
|
+
};
|
147
|
+
|
148
|
+
Object.defineProperty(Timer.prototype, 'elapsed',
|
149
|
+
{ get: function () {
|
150
|
+
var start = this.started.getTime()
|
151
|
+
, stop = this.stopped.getTime();
|
152
|
+
return stop - start;
|
153
|
+
}
|
154
|
+
});
|
155
|
+
|
156
|
+
Timer.prototype.start = function (date) {
|
157
|
+
this.started = date || new Date();
|
158
|
+
return this;
|
159
|
+
};
|
160
|
+
|
161
|
+
Timer.prototype.stop = function (date) {
|
162
|
+
this.stopped = date || new Date();
|
163
|
+
};
|
164
|
+
|
165
|
+
Timer.prototype.mark = function (date) {
|
166
|
+
this.marks.push(date || new Date());
|
167
|
+
};
|
168
|
+
|
169
|
+
}); // module: timer.js
|
170
|
+
|
171
|
+
require.alias("./chai-timers.js", "chai-timers");
|
172
|
+
|
173
|
+
return require('chai-timers');
|
174
|
+
});
|