Skip to content

Commit 9ce3807

Browse files
jfmengelsjamestalmage
authored andcommitted
Simplify tests. Fixes #72 (#111)
1 parent 590ff2d commit 9ce3807

21 files changed

+174
-136
lines changed

create-ava-rule.js

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22
var espurify = require('espurify');
33
var assign = require('object-assign');
4+
var rest = require('lodash.rest');
45
var deepStrictEqual = require('deep-strict-equal');
56

67
var avaImportDeclarationAst = {
@@ -102,11 +103,11 @@ module.exports = function createAvaRule() {
102103
hasTestModifier: function (mod) {
103104
return hasTestModifier(currentTestNode, mod);
104105
},
105-
hasHookModifier: function () {
106-
return hasTestModifier(currentTestNode, 'before') ||
107-
hasTestModifier(currentTestNode, 'beforeEach') ||
108-
hasTestModifier(currentTestNode, 'after') ||
109-
hasTestModifier(currentTestNode, 'afterEach');
106+
hasNoHookModifier: function () {
107+
return !hasTestModifier(currentTestNode, 'before') &&
108+
!hasTestModifier(currentTestNode, 'beforeEach') &&
109+
!hasTestModifier(currentTestNode, 'after') &&
110+
!hasTestModifier(currentTestNode, 'afterEach');
110111
},
111112
merge: function (customHandlers) {
112113
Object.keys(predefinedRules).forEach(function (key) {
@@ -129,16 +130,29 @@ module.exports = function createAvaRule() {
129130
}
130131
};
131132

132-
Object.defineProperty(rule, 'isTestFile', {
133-
get: function () {
134-
return isTestFile;
135-
}
136-
});
133+
rule.isInTestFile = function () {
134+
return isTestFile;
135+
};
137136

138-
Object.defineProperty(rule, 'currentTestNode', {
139-
get: function () {
140-
return currentTestNode;
141-
}
137+
rule.isTestNode = function (node) {
138+
return currentTestNode === node;
139+
};
140+
141+
rule.isInTestNode = function () {
142+
return currentTestNode;
143+
};
144+
145+
rule.if = rest(function (predicates) {
146+
return function (visitor) {
147+
return function (node) {
148+
var isValid = predicates.every(function (fn) {
149+
return fn(node);
150+
});
151+
if (isValid) {
152+
return visitor(node);
153+
}
154+
};
155+
};
142156
});
143157

144158
return rule;

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
"deep-strict-equal": "^0.1.0",
6666
"espree": "^3.1.3",
6767
"espurify": "^1.5.0",
68+
"lodash.rest": "^4.0.3",
6869
"multimatch": "^2.1.0",
6970
"object-assign": "^4.0.1",
7071
"pkg-up": "^1.0.0"

rules/assertion-arguments.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,16 @@ module.exports = function (context) {
4949
}
5050

5151
return ava.merge({
52-
CallExpression: function (node) {
53-
if (!ava.isTestFile || !ava.currentTestNode || node.callee.type !== 'MemberExpression') {
54-
return;
55-
}
56-
52+
CallExpression: ava.if(
53+
ava.isInTestFile,
54+
ava.isInTestNode
55+
)(function (node) {
5756
var callee = node.callee;
58-
if (!callee.property || util.nameOfRootObject(callee) !== 't' || util.isInContext(callee)) {
57+
if (callee.type !== 'MemberExpression' ||
58+
!callee.property ||
59+
util.nameOfRootObject(callee) !== 't' ||
60+
util.isInContext(callee)
61+
) {
5962
return;
6063
}
6164

@@ -77,7 +80,7 @@ module.exports = function (context) {
7780
report(node, 'Expected no assertion message, but found one.');
7881
}
7982
}
80-
}
83+
})
8184
});
8285
};
8386

rules/assertion-message.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,15 @@ module.exports = function (context) {
3838
var shouldHaveMessage = context.options[0] !== 'never';
3939

4040
return ava.merge({
41-
CallExpression: function (node) {
42-
if (!ava.isTestFile || !ava.currentTestNode || node.callee.type !== 'MemberExpression') {
41+
CallExpression: ava.if(
42+
ava.isInTestFile,
43+
ava.isInTestNode
44+
)(function (node) {
45+
var callee = node.callee;
46+
if (callee.type !== 'MemberExpression') {
4347
return;
4448
}
4549

46-
var callee = node.callee;
47-
4850
if (callee.property && util.nameOfRootObject(callee) === 't') {
4951
var nArgs = nbArguments(callee);
5052

@@ -66,7 +68,7 @@ module.exports = function (context) {
6668
});
6769
}
6870
}
69-
}
71+
})
7072
});
7173
};
7274

rules/max-asserts.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ module.exports = function (context) {
1111
var nodeToReport = null;
1212

1313
return ava.merge({
14-
'CallExpression': function (node) {
15-
if (!ava.isTestFile || !ava.currentTestNode || node.callee.type !== 'MemberExpression') {
14+
'CallExpression': ava.if(
15+
ava.isInTestFile,
16+
ava.isInTestNode
17+
)(function (node) {
18+
var callee = node.callee;
19+
if (callee.type !== 'MemberExpression') {
1620
return;
1721
}
1822

19-
var callee = node.callee;
20-
2123
if (callee.property &&
2224
notAssertionMethods.indexOf(callee.property.name) === -1 &&
2325
util.nameOfRootObject(callee) === 't') {
@@ -27,21 +29,19 @@ module.exports = function (context) {
2729
nodeToReport = node;
2830
}
2931
}
30-
},
31-
'CallExpression:exit': function (node) {
32-
if (ava.currentTestNode === node) {
33-
// leaving test function
34-
if (assertionCount > maxAssertions) {
35-
context.report({
36-
node: nodeToReport,
37-
message: 'Expected at most ' + maxAssertions + ' assertions, but found ' + assertionCount + '.'
38-
});
39-
}
40-
41-
assertionCount = 0;
42-
nodeToReport = null;
32+
}),
33+
'CallExpression:exit': ava.if(ava.isTestNode)(function () {
34+
// leaving test function
35+
if (assertionCount > maxAssertions) {
36+
context.report({
37+
node: nodeToReport,
38+
message: 'Expected at most ' + maxAssertions + ' assertions, but found ' + assertionCount + '.'
39+
});
4340
}
44-
}
41+
42+
assertionCount = 0;
43+
nodeToReport = null;
44+
})
4545
});
4646
};
4747

rules/no-cb-test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ module.exports = function (context) {
55
var ava = createAvaRule();
66

77
return ava.merge({
8-
CallExpression: function (node) {
9-
if (ava.isTestFile && ava.currentTestNode === node && ava.hasTestModifier('cb')) {
8+
CallExpression: ava.if(
9+
ava.isInTestFile,
10+
ava.isTestNode
11+
)(function (node) {
12+
if (ava.hasTestModifier('cb')) {
1013
context.report({
1114
node: node,
1215
message: '`test.cb()` should be not be used.'
1316
});
1417
}
15-
}
18+
})
1619
});
1720
};

rules/no-identical-title.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ module.exports = function (context) {
3030
var usedTitleNodes = [];
3131

3232
return ava.merge({
33-
'CallExpression': function (node) {
34-
if (!ava.isTestFile || ava.currentTestNode !== node || ava.hasHookModifier()) {
35-
return;
36-
}
37-
33+
'CallExpression': ava.if(
34+
ava.isInTestFile,
35+
ava.isTestNode,
36+
ava.hasNoHookModifier
37+
)(function (node) {
3838
var args = node.arguments;
3939
var titleNode = args.length > 1 || ava.hasTestModifier('todo') ? args[0] : undefined;
4040

@@ -52,7 +52,7 @@ module.exports = function (context) {
5252
}
5353

5454
usedTitleNodes.push(purify(titleNode));
55-
},
55+
}),
5656
'Program:exit': function () {
5757
usedTitleNodes = [];
5858
}

rules/no-ignored-test-files.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,12 @@ module.exports = function (context) {
5959
}
6060

6161
return ava.merge({
62-
'CallExpression': function (node) {
63-
if (ava.isTestFile && ava.currentTestNode === node) {
64-
hasTestCall = true;
65-
}
66-
},
62+
'CallExpression': ava.if(
63+
ava.isInTestFile,
64+
ava.isTestNode
65+
)(function () {
66+
hasTestCall = true;
67+
}),
6768
'Program:exit': function (node) {
6869
if (!hasTestCall) {
6970
return;

rules/no-invalid-end.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@ module.exports = function (context) {
66
var ava = createAvaRule();
77

88
return ava.merge({
9-
MemberExpression: function (node) {
10-
if (ava.isTestFile &&
11-
ava.currentTestNode &&
12-
node.property.name === 'end' &&
9+
MemberExpression: ava.if(
10+
ava.isInTestFile,
11+
ava.isInTestNode
12+
)(function (node) {
13+
if (node.property.name === 'end' &&
1314
!ava.hasTestModifier('cb') &&
1415
util.nameOfRootObject(node) === 't') {
1516
context.report({
1617
node: node,
1718
message: '`t.end()` should only be used inside of `test.cb()`.'
1819
});
1920
}
20-
}
21+
})
2122
});
2223
};

rules/no-only-test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ module.exports = function (context) {
55
var ava = createAvaRule();
66

77
return ava.merge({
8-
CallExpression: function (node) {
9-
if (ava.isTestFile && ava.currentTestNode === node && ava.hasTestModifier('only')) {
8+
CallExpression: ava.if(
9+
ava.isInTestFile,
10+
ava.isTestNode
11+
)(function (node) {
12+
if (ava.hasTestModifier('only')) {
1013
context.report({
1114
node: node,
1215
message: '`test.only()` should not be used.'
1316
});
1417
}
15-
}
18+
})
1619
});
1720
};

rules/no-skip-assert.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@ module.exports = function (context) {
66
var ava = createAvaRule();
77

88
return ava.merge({
9-
MemberExpression: function (node) {
10-
if (ava.isTestFile &&
11-
ava.currentTestNode &&
12-
node.property.name === 'skip' &&
9+
MemberExpression: ava.if(
10+
ava.isInTestFile,
11+
ava.isInTestNode
12+
)(function (node) {
13+
if (node.property.name === 'skip' &&
1314
util.nameOfRootObject(node) === 't') {
1415
context.report({
1516
node: node,
1617
message: 'No assertions should be skipped.'
1718
});
1819
}
19-
}
20+
})
2021
});
2122
};

rules/no-skip-test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ module.exports = function (context) {
55
var ava = createAvaRule();
66

77
return ava.merge({
8-
CallExpression: function (node) {
9-
if (ava.isTestFile && ava.currentTestNode === node && ava.hasTestModifier('skip')) {
8+
CallExpression: ava.if(
9+
ava.isInTestFile,
10+
ava.isTestNode
11+
)(function (node) {
12+
if (ava.hasTestModifier('skip')) {
1013
context.report({
1114
node: node,
1215
message: 'No tests should be skipped.'
1316
});
1417
}
15-
}
18+
})
1619
});
1720
};

rules/no-statement-after-end.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ module.exports = function (context) {
5151
}
5252

5353
function checkStatement(node) {
54-
if (!ava.isTestFile) {
54+
if (!ava.isInTestFile()) {
5555
return;
5656
}
5757

rules/no-todo-test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ module.exports = function (context) {
55
var ava = createAvaRule();
66

77
return ava.merge({
8-
CallExpression: function (node) {
9-
if (ava.isTestFile && ava.currentTestNode === node && ava.hasTestModifier('todo')) {
8+
CallExpression: ava.if(
9+
ava.isInTestFile,
10+
ava.isTestNode
11+
)(function (node) {
12+
if (ava.hasTestModifier('todo')) {
1013
context.report({
1114
node: node,
1215
message: '`test.todo()` should be not be used.'
1316
});
1417
}
15-
}
18+
})
1619
});
1720
};

rules/no-unknown-modifiers.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,10 @@ module.exports = function (context) {
3737
var ava = createAvaRule();
3838

3939
return ava.merge({
40-
CallExpression: function (node) {
41-
if (!ava.isTestFile || ava.currentTestNode !== node) {
42-
return;
43-
}
44-
40+
CallExpression: ava.if(
41+
ava.isInTestFile,
42+
ava.isTestNode
43+
)(function (node) {
4544
var unknown = unknownModifiers(node);
4645

4746
if (unknown.length !== 0) {
@@ -50,6 +49,6 @@ module.exports = function (context) {
5049
message: 'Unknown test modifier `' + unknown[0] + '`.'
5150
});
5251
}
53-
}
52+
})
5453
});
5554
};

0 commit comments

Comments
 (0)