-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
67 lines (52 loc) · 1.31 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
'use strict'
const oldIt = global.it
function isFunction (x) {
return typeof x === 'function'
}
function isNumber (x) {
return typeof x === 'number'
}
function isNonNegative (x) {
return isNumber(x) && x >= 0
}
console.assert(isFunction(oldIt), 'missing global it function')
console.assert(isFunction(oldIt.only), 'missing it.only function')
function checkTimes (times) {
console.assert(isNonNegative(times), 'repeat times should be non-negative')
}
function formatMessage (title, times) {
return function finishFormat (k) {
return k + 1 + '/' + times + ' ' + title
}
}
function only (times) {
if (!isNumber(times)) {
// probably plain it('name', ...) call
return oldIt.only.apply(null, arguments)
}
checkTimes(times)
return function (title, fn) {
let k
const fullTitle = formatMessage(title, times)
for (k = 0; k < times; k += 1) {
oldIt.only(fullTitle(k), fn)
}
}
}
function repeatIt (times) {
if (!isNumber(times)) {
// probably plain it('name', ...) call
return oldIt.apply(null, arguments)
}
checkTimes(times)
return function (title, fn) {
let k
const fullTitle = formatMessage(title, times)
for (k = 0; k < times; k += 1) {
oldIt(fullTitle(k), fn)
}
}
}
repeatIt.only = only
repeatIt.skip = oldIt.skip
module.exports = repeatIt