konacha-chai-matchers 0.1.7 → 0.1.8
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.
- checksums.yaml +7 -0
- data/VERSIONS +3 -3
- data/VERSIONS.lock +1 -0
- data/lib/konacha-chai-matchers/collector.rb +17 -11
- data/lib/konacha-chai-matchers/library.rb +15 -5
- data/lib/konacha-chai-matchers/version.rb +1 -1
- data/vendor/assets/javascripts/chai-jquery.js +3 -3
- data/vendor/assets/javascripts/chai-timers.js +100 -118
- data/vendor/assets/javascripts/memo-is.js +1 -1
- data/vendor/assets/javascripts/mocha-as-promised.js +20 -19
- data/vendor/assets/javascripts/sinon-chai.js +17 -0
- data/vendor/assets/javascripts/sinon.js +21 -3749
- metadata +8 -15
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7846ed3732b6b9ce3c5d0d37b4cdfeece59545c1
|
4
|
+
data.tar.gz: 27b0b95a6be691ad3b3d1a454dc2f65980ce2416
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 28873ea28cdbe4b63c5f7c14c0dcf055df0592de429738c92b2bc0a1bdb34e455242f94c4e9e190a0148d5c3d2ff08e92416ff65156dac1b97a58c478ef53d28
|
7
|
+
data.tar.gz: 0ade1f615cf3e634355d9ec2a00f24f745288f8e85c8560471a1d73d12a0aa07ed92d0bb43e266d58a880f9bd24643e96f0a036373695281302cba6bbd530b1a
|
data/VERSIONS
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
chai-spies: 0.5.1
|
2
|
-
sinon-chai: 2.
|
2
|
+
sinon-chai: 2.5.0
|
3
3
|
chai-as-promised: 4.1.0
|
4
|
-
chai-jquery: 1.1
|
4
|
+
chai-jquery: 1.2.1
|
5
5
|
chai-timers: 0.2.0
|
6
6
|
chai-stats: 0.3.0
|
7
7
|
chai-null: 0.1.0
|
@@ -9,7 +9,7 @@ chai-factories: 0.1.0
|
|
9
9
|
chai-changes: 1.3.4
|
10
10
|
chai-backbone: 0.9.2
|
11
11
|
js-factories: 1.0.1
|
12
|
-
mocha-as-promised:
|
12
|
+
mocha-as-promised: 2.0.0
|
13
13
|
chai-things: 0.2.0
|
14
14
|
chai-fuzzy: 1.4.0
|
15
15
|
sinon: 1.7.3
|
data/VERSIONS.lock
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
sinon: v1.7.3
|
@@ -1,10 +1,14 @@
|
|
1
|
+
require 'yaml'
|
1
2
|
|
2
3
|
module Konacha
|
3
4
|
module Chai
|
4
5
|
module Matchers
|
5
6
|
class Collector
|
6
7
|
|
8
|
+
|
7
9
|
def update_libraries
|
10
|
+
`git submodule init`
|
11
|
+
`git submodule update`
|
8
12
|
modules = collect_libraries
|
9
13
|
|
10
14
|
modules.each(&:update)
|
@@ -18,20 +22,22 @@ module Konacha
|
|
18
22
|
end
|
19
23
|
|
20
24
|
private
|
21
|
-
|
22
25
|
def collect_libraries
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
locked_versions = YAML.load_file 'VERSIONS.lock'
|
27
|
+
|
28
|
+
urls = `cat .gitmodules | grep 'url =' | awk '{print $3}'`.split("\n")
|
29
|
+
paths = `cat .gitmodules | grep 'path =' | awk '{print $3}'`.split("\n")
|
30
|
+
@libs ||= urls.each_with_index.map do |url, i|
|
31
|
+
name = paths[i]
|
32
|
+
`cd ./#{name} && git fetch && cd ..`
|
33
|
+
latest_tag = `cd ./#{name} && git describe --tags --abbrev=0 && cd ..`.split.first
|
34
|
+
library_tag = locked_versions[name] || latest_tag
|
35
|
+
|
36
|
+
latest_commit = `cd ./#{name} && git rev-parse #{library_tag || 'HEAD'} && cd ..`.split.first
|
37
|
+
|
38
|
+
Library.new url: url, name: name, tag: library_tag, commit: latest_commit
|
31
39
|
end
|
32
|
-
libs
|
33
40
|
end
|
34
|
-
|
35
41
|
end
|
36
42
|
end
|
37
43
|
end
|
@@ -4,15 +4,25 @@ module Konacha
|
|
4
4
|
module Matchers
|
5
5
|
class Library
|
6
6
|
|
7
|
-
attr_reader :name
|
7
|
+
attr_reader :data, :name
|
8
8
|
|
9
|
-
def initialize(
|
10
|
-
@
|
9
|
+
def initialize(data)
|
10
|
+
@data = data
|
11
|
+
@name = data[:name]
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
"#{@data[:name]} => #{@data[:tag]}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def latest_version
|
19
|
+
`cd ./#@name && git fetch`
|
20
|
+
@data[:tag]
|
11
21
|
end
|
12
22
|
|
13
23
|
def update
|
14
|
-
|
15
|
-
`cd
|
24
|
+
puts "Updating #{@data[:name]} to #{latest_version}"
|
25
|
+
`cd ./#{@data[:name]} && git checkout #{@data[:commit]}`
|
16
26
|
end
|
17
27
|
|
18
28
|
def vendor
|
@@ -52,7 +52,7 @@
|
|
52
52
|
return el.html();
|
53
53
|
};
|
54
54
|
|
55
|
-
var props = {attr: 'attribute', css: 'CSS property'};
|
55
|
+
var props = {attr: 'attribute', css: 'CSS property', prop: 'property'};
|
56
56
|
for (var prop in props) {
|
57
57
|
(function (prop, description) {
|
58
58
|
chai.Assertion.addMethod(prop, function (name, val) {
|
@@ -139,7 +139,7 @@
|
|
139
139
|
);
|
140
140
|
});
|
141
141
|
|
142
|
-
$.each(['visible', 'hidden', 'selected', 'checked', 'disabled'], function (i, attr) {
|
142
|
+
$.each(['visible', 'hidden', 'selected', 'checked', 'enabled', 'disabled'], function (i, attr) {
|
143
143
|
chai.Assertion.addProperty(attr, function () {
|
144
144
|
this.assert(
|
145
145
|
flag(this, 'object').is(':' + attr)
|
@@ -225,7 +225,7 @@
|
|
225
225
|
, text
|
226
226
|
);
|
227
227
|
} else {
|
228
|
-
Function.prototype.apply.call(_super.call(this), this, arguments);
|
228
|
+
return Function.prototype.apply.call(_super.call(this), this, arguments);
|
229
229
|
}
|
230
230
|
};
|
231
231
|
setPrototypeOf(contain, this);
|
@@ -1,16 +1,9 @@
|
|
1
|
-
!function (
|
2
|
-
if (typeof
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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) {
|
1
|
+
!function (name, definition) {
|
2
|
+
if (typeof define == 'function' && typeof define.amd == 'object') define(definition);
|
3
|
+
else this[name] = definition();
|
4
|
+
}('chai_timers', function () {
|
5
|
+
// CommonJS require()
|
6
|
+
function require(p){
|
14
7
|
var path = require.resolve(p)
|
15
8
|
, mod = require.modules[path];
|
16
9
|
if (!mod) throw new Error('failed to require "' + p + '"');
|
@@ -23,7 +16,7 @@
|
|
23
16
|
|
24
17
|
require.modules = {};
|
25
18
|
|
26
|
-
require.resolve = function (path)
|
19
|
+
require.resolve = function (path){
|
27
20
|
var orig = path
|
28
21
|
, reg = path + '.js'
|
29
22
|
, index = path + '/index.js';
|
@@ -32,7 +25,7 @@
|
|
32
25
|
|| orig;
|
33
26
|
};
|
34
27
|
|
35
|
-
require.register = function (path, fn)
|
28
|
+
require.register = function (path, fn){
|
36
29
|
require.modules[path] = fn;
|
37
30
|
};
|
38
31
|
|
@@ -54,121 +47,110 @@
|
|
54
47
|
};
|
55
48
|
};
|
56
49
|
|
57
|
-
require.alias = function (from, to) {
|
58
|
-
var fn = require.modules[from];
|
59
|
-
require.modules[to] = fn;
|
60
|
-
};
|
61
50
|
|
51
|
+
require.register("timers", function (module, exports, require) {
|
62
52
|
|
63
|
-
|
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
|
-
});
|
53
|
+
module.exports = function (chai, _) {
|
131
54
|
|
132
|
-
|
55
|
+
chai.Timer = function (name) {
|
56
|
+
this.name = name || 'timer';
|
57
|
+
this.created = new Date();
|
58
|
+
this.marks = [];
|
59
|
+
this.started = null;
|
60
|
+
this.stopped = null;
|
61
|
+
};
|
133
62
|
|
134
|
-
|
63
|
+
chai.Timer.prototype.start = function (date) {
|
64
|
+
this.started = date || new Date();
|
65
|
+
return this;
|
66
|
+
};
|
135
67
|
|
136
|
-
|
68
|
+
chai.Timer.prototype.stop = function (date) {
|
69
|
+
this.stopped = date || new Date();
|
70
|
+
};
|
137
71
|
|
138
|
-
|
72
|
+
chai.Timer.prototype.mark = function (date) {
|
73
|
+
this.marks.push(date || new Date());
|
74
|
+
};
|
139
75
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
76
|
+
Object.defineProperty(chai.Timer.prototype, 'elapsed',
|
77
|
+
{ get: function () {
|
78
|
+
var start = this.started.getTime()
|
79
|
+
, stop = this.stopped.getTime();
|
80
|
+
return stop - start;
|
81
|
+
}
|
82
|
+
, configurable: true
|
83
|
+
});
|
147
84
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
85
|
+
Object.defineProperty(chai.Timer.prototype, 'marks',
|
86
|
+
{ get: function () {
|
87
|
+
var marks = _.flag(this, 'marks');
|
88
|
+
return marks;
|
89
|
+
}
|
90
|
+
, configurable: true
|
91
|
+
});
|
92
|
+
|
93
|
+
chai.Assertion.addProperty('timer', function () {
|
94
|
+
this.assert(
|
95
|
+
this._obj instanceof chai.Timer
|
96
|
+
, 'expected #{this} to be a chai timer'
|
97
|
+
, 'expected #{this} to not be a chai timer' );
|
98
|
+
});
|
99
|
+
|
100
|
+
[ 'started', 'stopped', 'created' ].forEach(function (when) {
|
101
|
+
chai.Assertion.overwriteProperty(when, function (_super) {
|
102
|
+
return function () {
|
103
|
+
if (this._obj instanceof chai.Timer) {
|
104
|
+
_.flag(this, 'timer_when', when);
|
105
|
+
} else {
|
106
|
+
_super.call(this);
|
153
107
|
}
|
108
|
+
}
|
154
109
|
});
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
110
|
+
});
|
111
|
+
|
112
|
+
chai.Assertion.overwriteMethod('before', function (_super) {
|
113
|
+
return function assertBefore (timer2, when2) {
|
114
|
+
var timer1 = this._obj;
|
115
|
+
new chai.Assertion(timer1).to.be.a.timer;
|
116
|
+
new chai.Assertion(timer2).to.be.a.timer;
|
117
|
+
|
118
|
+
var when1 = _.flag(this, 'timer_when') || 'started';
|
119
|
+
when2 = when2 || when1;
|
120
|
+
var time1 = timer1[when1].getTime()
|
121
|
+
, time2 = timer2[when2].getTime();
|
122
|
+
|
123
|
+
this.assert(
|
124
|
+
time1 < time2
|
125
|
+
, 'expected timer {' + timer1.name + '} to have been ' + when1 + ' before timer {' + timer2.name + '} was ' + when2
|
126
|
+
, 'expected timer {' + timer1.name + '} to not have been ' + when1 + ' before timer {' + timer2.name + '} was ' + when2
|
127
|
+
);
|
159
128
|
};
|
160
|
-
|
161
|
-
|
162
|
-
|
129
|
+
});
|
130
|
+
|
131
|
+
chai.Assertion.overwriteMethod('after', function (_super) {
|
132
|
+
return function assertBefore (timer2, when2) {
|
133
|
+
var timer1 = this._obj;
|
134
|
+
new chai.Assertion(timer1).to.be.a.timer;
|
135
|
+
new chai.Assertion(timer2).to.be.a.timer;
|
136
|
+
|
137
|
+
var when1 = _.flag(this, 'timer_when') || 'started';
|
138
|
+
when2 = when2 || when1;
|
139
|
+
var time1 = timer1[when1].getTime()
|
140
|
+
, time2 = timer2[when2].getTime();
|
141
|
+
|
142
|
+
this.assert(
|
143
|
+
time1 > time2
|
144
|
+
, 'expected timer {' + timer1.name + '} to have been ' + when1 + ' after timer {' + timer2.name + '} was ' + when2
|
145
|
+
, 'expected timer {' + timer1.name + '} to not have been ' + when1 + ' after timer {' + timer2.name + '} was' + when2
|
146
|
+
);
|
163
147
|
};
|
148
|
+
});
|
164
149
|
|
165
|
-
|
166
|
-
this.marks.push(date || new Date());
|
167
|
-
};
|
168
|
-
|
169
|
-
}); // module: timer.js
|
150
|
+
};
|
170
151
|
|
171
|
-
|
172
|
-
|
173
|
-
return require('chai-timers');
|
152
|
+
}); // module timers
|
153
|
+
return require('timers');
|
174
154
|
});
|
155
|
+
|
156
|
+
chai.use(chai_timers);
|
@@ -1,18 +1,20 @@
|
|
1
1
|
(function (mochaAsPromised) {
|
2
2
|
"use strict";
|
3
3
|
|
4
|
-
function findNodeJSMocha(moduleToTest, suffix) {
|
4
|
+
function findNodeJSMocha(moduleToTest, suffix, accumulator) {
|
5
|
+
if (accumulator === undefined) {
|
6
|
+
accumulator = [];
|
7
|
+
}
|
8
|
+
|
5
9
|
if (moduleToTest.id.indexOf(suffix, moduleToTest.id.length - suffix.length) !== -1 && moduleToTest.exports) {
|
6
|
-
|
10
|
+
accumulator.push(moduleToTest.exports);
|
7
11
|
}
|
8
12
|
|
9
|
-
|
10
|
-
|
13
|
+
moduleToTest.children.forEach(function (child) {
|
14
|
+
findNodeJSMocha(child, suffix, accumulator);
|
15
|
+
});
|
11
16
|
|
12
|
-
|
13
|
-
return found;
|
14
|
-
}
|
15
|
-
}
|
17
|
+
return accumulator;
|
16
18
|
}
|
17
19
|
|
18
20
|
// Module systems magic dance.
|
@@ -22,31 +24,32 @@
|
|
22
24
|
// using the Mocha test runner from either a locally-installed package, or from a globally-installed one.
|
23
25
|
// In the latter case, naively plugging in `require("mocha")` would end up duck-punching the wrong instance,
|
24
26
|
// so we provide this shortcut to auto-detect which Mocha package needs to be duck-punched.
|
25
|
-
module.exports = function (
|
26
|
-
if (
|
27
|
+
module.exports = function (mochaModules) {
|
28
|
+
if (mochaModules === undefined) {
|
27
29
|
if (typeof process === "object" && Object.prototype.toString.call(process) === "[object process]") {
|
28
30
|
// We're in *real* Node.js, not in a browserify-like environment. Do automatic detection logic.
|
29
31
|
|
30
|
-
// Funky syntax prevents Browserify from detecting the require, since it's needed for Node.js-only
|
32
|
+
// Funky syntax prevents Browserify from detecting the require, since it's needed for Node.js-only
|
33
|
+
// stuff.
|
31
34
|
var path = (require)("path");
|
32
35
|
var suffix = path.join("mocha", "lib", "mocha.js");
|
33
|
-
|
36
|
+
mochaModules = findNodeJSMocha(require.main, suffix);
|
34
37
|
|
35
|
-
if (
|
38
|
+
if (mochaModules === undefined) {
|
36
39
|
throw new Error("Attempted to automatically plug in to Mocha, but could not detect a " +
|
37
40
|
"running Mocha module.");
|
38
41
|
}
|
39
42
|
|
40
43
|
} else if (typeof Mocha !== "undefined") {
|
41
44
|
// We're in a browserify-like emulation environment. Try the `Mocha` global.
|
42
|
-
|
45
|
+
mochaModules = [Mocha];
|
43
46
|
} else {
|
44
47
|
throw new Error("Attempted to automatically plug in to Mocha, but could not detect the " +
|
45
48
|
"environment. Plug in manually by passing the running Mocha module.");
|
46
49
|
}
|
47
50
|
}
|
48
51
|
|
49
|
-
mochaAsPromised
|
52
|
+
mochaModules.forEach(mochaAsPromised);
|
50
53
|
};
|
51
54
|
} else if (typeof define === "function" && define.amd) {
|
52
55
|
// AMD
|
@@ -69,13 +72,11 @@
|
|
69
72
|
}
|
70
73
|
}
|
71
74
|
|
72
|
-
var duckPunchedAlready = false;
|
73
|
-
|
74
75
|
return function mochaAsPromised(mocha) {
|
75
|
-
if (
|
76
|
+
if (mocha._mochaAsPromisedLoadedAlready) {
|
76
77
|
return;
|
77
78
|
}
|
78
|
-
|
79
|
+
mocha._mochaAsPromisedLoadedAlready = true;
|
79
80
|
|
80
81
|
// Soooo this is an awesome hack.
|
81
82
|
|