1 | var Lab = require('lab');
|
2 | var Filter = require('../lib/filter');
|
3 | var assert = require('chai').assert;
|
4 |
|
5 | var lab = exports.lab = Lab.script();
|
6 |
|
7 | lab.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 | });
|