UNPKG

7.38 kBJavaScriptView Raw
1describe('unit-wildstring-mode', function () {
2
3 this.timeout(5000);
4
5 var expect = require('expect.js');
6
7 var shortid = require('shortid');
8
9 var random = require('./__fixtures/random');
10
11 var PareTree = require('..');
12
13 function getTree(){
14 return new PareTree.create({mode:'wildstring'});
15 }
16
17 it('tests adding a subscription', function (done) {
18 var pareTree = getTree();
19
20 pareTree.add('test/*', {key:'testKey1', data:{test:'data'}});
21
22 done();
23 });
24
25 it('tests fails attempting a glob search', function (done) {
26
27 var pareTree = getTree();
28
29 pareTree.add('test', {key:'testKey1', data:{test:'data'}});
30
31 pareTree.add('precise', {key:'testKey1', data:{test:'data'}});
32
33 try{
34 pareTree.search('test*');
35 }catch(e){
36 expect(e.toString()).to.be('Error: glob or wildcard searches are not allowed unless options.exact is true (globs/wildcards are ignored both sides and literal key compare happens)');
37 done();
38 }
39 });
40
41 it('tests adding and finding a PR subscription', function (done) {
42
43 var pareTree = getTree();
44
45 pareTree.add('test*', {key:'testKey1', data:{test:'data'}});
46
47 pareTree.add('precise', {key:'testKey1', data:{test:'data'}});
48
49 expect(pareTree.search('testprecise').length).to.be(1);
50
51 done();
52 });
53
54 it('tests adding and finding a PP subscription', function (done) {
55
56 var pareTree = getTree();
57
58 pareTree.add('test', {key:'testKey1', data:{test:'data'}});
59
60 pareTree.add('precise', {key:'testKey1', data:{test:'data'}});
61
62 expect(pareTree.search('test').length).to.be(1);
63
64 done();
65 });
66
67 it('tests adding and finding subscriptions', function (done) {
68
69 var pareTree = getTree();
70
71 pareTree.add('test/*', {key:'testKey1', data:{test:'data'}});
72 pareTree.add('test/', {key:'testKey1', data:{test:'data'}});
73 pareTree.add('tes*/**', {key:'testKey1', data:{test:'data'}});
74 pareTree.add('test/', {key:'testKey1', data:{test:'data'}});
75 pareTree.add('*', {key:'testKey1', data:{test:'data'}});
76
77 expect(pareTree.search('test/1').length).to.be(3);
78 expect(pareTree.search('tester/').length).to.be(2);
79
80 done();
81 });
82
83 it('tests wildcard matching', function (done) {
84
85 var pareTree = getTree();
86
87 expect(pareTree.__wildcardMatch('/test/1', '/te*/*')).to.be(true);
88 expect(pareTree.__wildcardMatch('/test/match', '/test/mat*')).to.be(true);
89 expect(pareTree.__wildcardMatch('/test/complex/and/short','/test/complex/*/short')).to.be(true);
90 expect(pareTree.__wildcardMatch('/test/complex/and/short','/test/complex/**')).to.be(true);
91 expect(pareTree.__wildcardMatch('/test/complex/and/short', '/test/*/*/short')).to.be(true);
92 expect(pareTree.__wildcardMatch('/test/complex/and/short', '/test/**')).to.be(true);
93 expect(pareTree.__wildcardMatch('/test/complex/and/short','/test/**/short')).to.be(true);
94 expect(pareTree.__wildcardMatch('/test/complex/and/long','/test/complex/*/short')).to.be(false);
95 expect(pareTree.__wildcardMatch('/blah/complex/and/short', '/test/complex/*')).to.be(false);
96 expect(pareTree.__wildcardMatch('/test/complex/and/long', '/test/*/*/short')).to.be(false);
97 expect(pareTree.__wildcardMatch('/tes/complex/and/short', '/test*')).to.be(false);
98 expect(pareTree.__wildcardMatch('/test/complex/and/short/', '/test/**/short*')).to.be(true);
99 expect(pareTree.__wildcardMatch('/test/comp/**', '/test/**')).to.be(true);
100
101 done();
102 });
103
104 it('tests removing subscriptions by id', function (done) {
105
106 var pareTree = getTree();
107
108 pareTree.add('test', {key:'testKey1', data:{test:'data'}});
109
110 var toRemoveRef = pareTree.add('test', {key:'testKey2', data:{test:'data'}});
111
112 var found = pareTree.search('test');
113
114 expect(found.length).to.be(2);
115
116 expect(pareTree.remove(toRemoveRef).length).to.be(1);
117
118 found = pareTree.search('test');
119
120 expect(found.length).to.be(1);
121
122 done();
123
124 });
125
126 it('tests removing subscriptions by none-wild-card path', function (done) {
127
128 var pareTree = getTree();
129
130 pareTree.add('test1', {key:'testKey1', data:{test:'data'}});
131
132 pareTree.add('tes*', {key:'testKey2', data:{test:'data'}});
133
134 var found = pareTree.search('test1');
135
136 expect(found.length).to.be(2);
137
138 expect(pareTree.remove('test1').length).to.be(1);
139
140 found = pareTree.search('test');
141
142 expect(found.length).to.be(1);
143
144 done();
145 });
146
147 it('tests removing subscriptions by wild-card path', function (done) {
148
149 var pareTree = getTree();
150
151 pareTree.add('test', {key:'testKey1', data:{test:'data'}});
152
153 pareTree.add('tes*', {key:'testKey2', data:{test:'data'}});
154
155 var found = pareTree.search('test');
156
157 expect(found.length).to.be(2);
158
159 expect(pareTree.remove('tes*').length).to.be(1);
160
161 found = pareTree.search('test');
162
163 expect(found.length).to.be(1);
164
165 done();
166 });
167
168 it('tests removing subscriptions by subscriber', function (done) {
169
170 var pareTree = getTree();
171
172 pareTree.add('tes*', {key:'testKey1', data:{test:'data'}});
173
174 pareTree.add('te*', {key:'testKey2', data:{test:'data'}});
175
176 pareTree.add('t*', {key:'testKey3', data:{test:'data'}});
177
178 var found = pareTree.search('test');
179
180 expect(found.length).to.be(3);
181
182 expect(pareTree.remove({key:'testKey3'}).length).to.be(1);
183
184 found = pareTree.search('test');
185
186 expect(found.length).to.be(2);
187
188 done();
189 });
190
191 it('tests removing subscriptions by path and subscriber', function (done) {
192
193 var pareTree = getTree();
194
195 pareTree.add('te*', {key:'testKey1', data:{test:'data'}});
196
197 pareTree.add('test*', {key:'testKey2', data:{test:'data'}});
198
199 pareTree.add('test*', {key:'testKey3', data:{test:'data'}});
200
201 pareTree.add('test1', {key:'testKey3', data:{test:'data'}});
202
203 var found = pareTree.search('test1');
204
205 expect(found.length).to.be(4);
206
207 expect(pareTree.remove({key:'testKey3', path:'test*'}).length).to.be(1);
208
209 found = pareTree.search('test1');
210
211 expect(found.length).to.be(3);
212
213 done();
214
215 });
216
217 it('tests filtering a search for subscriptions', function (done) {
218
219 var pareTree = getTree();
220
221 pareTree.add('test1', {key:'testKey1', data:{test:'data'}});
222
223 pareTree.add('test*', {key:'testKey2', data:{test:'data'}});
224
225 pareTree.add('te*', {key:'testKey3', data:{test:'data'}});
226
227 pareTree.add('t*', {key:'testKey3', data:{test:'data'}});
228
229 var found = pareTree.search('test1', {filter:{key:'testKey3'}});
230
231 expect(found.length).to.be(2);
232
233 found = pareTree.search('test1');
234
235 expect(found.length).to.be(4);
236
237 done();
238 });
239
240 it('tests adding and finding and removing subscriptions', function (done) {
241
242 var pareTree = getTree();
243
244 pareTree.add('test/*', {key:'testKey1', data:{test:'data'}});
245 pareTree.add('test/', {key:'testKey1', data:{test:'data'}});
246 pareTree.add('tes*/**', {key:'testKey1', data:{test:'data'}});
247 pareTree.add('test/', {key:'testKey1', data:{test:'data'}});
248 pareTree.add('*', {key:'testKey1', data:{test:'data'}});
249
250 expect(pareTree.search('test/1').length).to.be(3);
251 expect(pareTree.search('tester/').length).to.be(2);
252
253 pareTree.remove({key:'testKey1', path:'*'});
254
255 expect(pareTree.search('test/1').length).to.be(2);
256 expect(pareTree.search('tester/').length).to.be(1);
257
258 pareTree.remove({path:'test/*'});
259
260 expect(pareTree.search('test/1').length).to.be(1);
261
262 done();
263 });
264
265});