UNPKG

3.12 kBJavaScriptView Raw
1var Lab = require('lab');
2var Filter = require('../lib/filter');
3var assert = require('chai').assert;
4
5var lab = exports.lab = Lab.script();
6
7lab.experiment('Filter', function() {
8
9 function FilterWithOnA() {}
10 FilterWithOnA.prototype = new Filter();
11 (function() {
12 this.on_a = function() {
13 return ['a'];
14 };
15
16 this.on_a_b = function(exps) {
17 return ['a', 'b', exps[2]];
18 };
19 }).apply(FilterWithOnA.prototype);
20
21 function TestFilter() {}
22 TestFilter.prototype = new Filter();
23 (function() {
24 this.on_test = function(exps) {
25 return ['on_test'].concat(exps[1]);
26 };
27
28 this.on_test_check = function(exps) {
29 return ['on_check'].concat(exps[2]);
30 };
31
32 this.on_second_test = function(exps) {
33 return ['on_second_test'].concat(exps[2]);
34 };
35
36 this.on_a_b = function(exps) {
37 exps.shift();
38 exps.shift();
39 return ['on_ab'].concat(exps);
40 };
41
42 this.on_a_b_test = function(exps) {
43 return ['on_ab_test'].concat(exps[3]);
44 };
45
46 this.on_a_b_c_d_test = function(exps) {
47 return ['on_abcd_test'].concat(exps[5]);
48 };
49 }).apply(TestFilter.prototype);
50
51 function InheritedTestFilter() {}
52 InheritedTestFilter.prototype = new TestFilter();
53
54 InheritedTestFilter.prototype.on = function(args) {
55 return ['on_zero'].concat(args);
56 };
57
58 var filter;
59
60 lab.before(function(done) {
61 filter = new TestFilter();
62 done();
63 });
64
65 lab.test('#dispatchedMethods', function(done) {
66 var filter = new Filter();
67 assert.deepEqual(
68 filter._dispatchedMethods(),
69 [ 'on_multi',
70 'on_capture',
71 'on_if',
72 'on_switch',
73 'on_block',
74 'on_escape' ]
75 );
76
77 var filterWithOnA = new FilterWithOnA();
78
79 assert.deepEqual(
80 filterWithOnA._dispatchedMethods(),
81 [ 'on_a',
82 'on_a_b',
83 'on_multi',
84 'on_capture',
85 'on_if',
86 'on_switch',
87 'on_block',
88 'on_escape' ]
89 );
90
91 done();
92 });
93
94 lab.test('return unhandled expressions', function(done) {
95 assert.deepEqual(filter.exec(['unhandled']), ['unhandled'] );
96 done();
97 });
98
99 lab.test('dispatch first level', function(done) {
100 assert.deepEqual(filter.exec(['test', 42]), ['on_test', 42]);
101 done();
102 });
103
104 lab.test('dispatch second level', function(done) {
105 assert.deepEqual(filter.exec(['second', 'test', 42]), ['on_second_test', 42]);
106 done();
107 });
108
109 lab.test('dispatch second level if prefixed', function(done) {
110 assert.deepEqual(filter.exec(['test', 'check', 42]), ['on_check', 42]);
111 done();
112 });
113
114 lab.test('dispatch parent level', function(done) {
115 assert.deepEqual(filter.exec(['a', 42]), ['a', 42]);
116 assert.deepEqual(filter.exec(['a', 'b', 42]), ['on_ab', 42]);
117 assert.deepEqual(filter.exec(['a', 'b', 'test', 42]), ['on_ab_test', 42]);
118 assert.deepEqual(filter.exec(['a', 'b', 'c', 42]), ['on_ab', 'c', 42]);
119 assert.deepEqual(filter.exec(['a', 'b', 'c', 'd', 42]), ['on_ab', 'c', 'd', 42]);
120 assert.deepEqual(filter.exec(['a', 'b', 'c', 'd', 'test', 42]), ['on_abcd_test', 42]);
121 done();
122 });
123});