forked from jonschlinkert/remarkable
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathruler.js
142 lines (105 loc) · 3.61 KB
/
ruler.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*global describe, it*/
'use strict';
var assert = require('assert');
var Ruler = require('../lib/ruler');
describe('Ruler', function () {
it('should replace rule (.at)', function () {
var ruler = new Ruler();
var res = 0;
ruler.push('test', function foo() { res = 1; });
ruler.at('test', function bar() { res = 2; });
var rules = ruler.getRules('');
assert.strictEqual(rules.length, 1);
rules[0]();
assert.strictEqual(res, 2);
});
it('should inject before/after rule', function () {
var ruler = new Ruler();
var res = 0;
ruler.push('test', function foo() { res = 1; });
ruler.before('test', 'before_test', function fooBefore() { res = -10; });
ruler.after('test', 'after_test', function fooAfter() { res = 10; });
var rules = ruler.getRules('');
assert.strictEqual(rules.length, 3);
rules[0]();
assert.strictEqual(res, -10);
rules[1]();
assert.strictEqual(res, 1);
rules[2]();
assert.strictEqual(res, 10);
});
it('should enable/disable rule', function () {
var rules, ruler = new Ruler();
ruler.push('test', function foo() {});
ruler.push('test2', function bar() {});
rules = ruler.getRules('');
assert.strictEqual(rules.length, 2);
ruler.disable('test');
rules = ruler.getRules('');
assert.strictEqual(rules.length, 1);
ruler.disable('test2');
rules = ruler.getRules('');
assert.strictEqual(rules.length, 0);
ruler.enable('test');
rules = ruler.getRules('');
assert.strictEqual(rules.length, 1);
ruler.enable('test2');
rules = ruler.getRules('');
assert.strictEqual(rules.length, 2);
});
it('should enable/disable multiple rule', function () {
var rules, ruler = new Ruler();
ruler.push('test', function foo() {});
ruler.push('test2', function bar() {});
ruler.disable([ 'test', 'test2' ]);
rules = ruler.getRules('');
assert.strictEqual(rules.length, 0);
ruler.enable([ 'test', 'test2' ]);
rules = ruler.getRules('');
assert.strictEqual(rules.length, 2);
});
it('should enable rules by whitelist', function () {
var rules, ruler = new Ruler();
ruler.push('test', function foo() {});
ruler.push('test2', function bar() {});
ruler.enable('test', true);
rules = ruler.getRules('');
assert.strictEqual(rules.length, 1);
});
it('should support multiple chains', function () {
var rules, ruler = new Ruler();
ruler.push('test', function foo() {});
ruler.push('test2', function bar() {}, { alt: [ 'alt1' ] });
ruler.push('test2', function bar() {}, { alt: [ 'alt1', 'alt2' ] });
rules = ruler.getRules('');
assert.strictEqual(rules.length, 3);
rules = ruler.getRules('alt1');
assert.strictEqual(rules.length, 2);
rules = ruler.getRules('alt2');
assert.strictEqual(rules.length, 1);
});
it('should fail on invalid rule name', function () {
var ruler = new Ruler();
ruler.push('test', function foo() {});
assert.throws(function () {
ruler.at('invalid name', function bar() {});
});
assert.throws(function () {
ruler.before('invalid name', function bar() {});
});
assert.throws(function () {
ruler.after('invalid name', function bar() {});
});
assert.throws(function () {
ruler.enable('invalid name');
});
assert.throws(function () {
ruler.disable('invalid name');
});
});
it('should always return an array, even when no rules are defined for the rule name', function () {
var rules, ruler = new Ruler();
rules = ruler.getRules('list');
assert.strictEqual(rules.constructor, Array);
});
});