1 | var wayfarer = require('../')
|
2 | var noop = require('noop2')
|
3 | var tape = require('tape')
|
4 |
|
5 | tape('trie', function (t) {
|
6 | t.test('should match a path', function (t) {
|
7 | t.plan(1)
|
8 | var r = wayfarer()
|
9 | r.on('/', function () {
|
10 | t.pass('called')
|
11 | })
|
12 | r('/')
|
13 | })
|
14 |
|
15 | t.test('should match a nested path', function (t) {
|
16 | t.plan(1)
|
17 | var r = wayfarer()
|
18 | r.on('/foo/bar', function () {
|
19 | t.pass('called')
|
20 | })
|
21 | r('/foo/bar')
|
22 | })
|
23 |
|
24 | t.test('should match a default path', function (t) {
|
25 | t.plan(1)
|
26 | var r = wayfarer('/404')
|
27 | r.on('/404', function () {
|
28 | t.pass('default')
|
29 | })
|
30 | r('/nope')
|
31 | })
|
32 |
|
33 | t.test('should allow passing of extra values', function (t) {
|
34 | t.plan(2)
|
35 | var foo = {}
|
36 | var bar = {}
|
37 | var r = wayfarer()
|
38 | r.on('/foo', function (params, arg1, arg2) {
|
39 | t.equal(arg1, foo, 'arg1 was passed')
|
40 | t.equal(arg2, bar, 'arg2 was passed')
|
41 | })
|
42 | r('/foo', foo, bar)
|
43 | })
|
44 |
|
45 | t.test('.on() should catch type errors', function (t) {
|
46 | t.plan(2)
|
47 | var r = wayfarer()
|
48 | t.throws(r.on.bind(r, 123), /string/, 'string')
|
49 | t.throws(r.on.bind(r, '/hi', 123), /function/, 'function')
|
50 | })
|
51 |
|
52 | t.test('.emit() should match paths', function (t) {
|
53 | t.plan(2)
|
54 | var r = wayfarer()
|
55 | r.on('/foo/bar', function (param) {
|
56 | t.pass('bar called')
|
57 | })
|
58 | r.on('/foo/baz', function (param) {
|
59 | t.pass('baz called')
|
60 | })
|
61 | r('/foo/bar')
|
62 | r('/foo/baz')
|
63 | })
|
64 |
|
65 | t.test('.emit() should match partials', function (t) {
|
66 | t.plan(1)
|
67 | var r = wayfarer()
|
68 | r.on('/:user', function (param) {
|
69 | t.equal(param.user, 'tobi', 'param matched')
|
70 | })
|
71 | r('/tobi')
|
72 | })
|
73 |
|
74 | t.test('.emit() should match paths before partials', function (t) {
|
75 | t.plan(1)
|
76 | var r = wayfarer()
|
77 | r.on('/foo', function () {
|
78 | t.pass('called')
|
79 | })
|
80 | r.on('/:user', noop)
|
81 | r('/foo')
|
82 | })
|
83 |
|
84 | t.test('.emit() should allow path overriding', function (t) {
|
85 | t.plan(1)
|
86 | var r = wayfarer()
|
87 | r.on('/:user', noop)
|
88 | r.on('/:user', function () {
|
89 | t.pass('called')
|
90 | })
|
91 | r('/foo')
|
92 | })
|
93 |
|
94 | t.test('.emit() should match nested partials', function (t) {
|
95 | t.plan(2)
|
96 | var r = wayfarer()
|
97 | r.on('/:user/:name', function (param) {
|
98 | t.equal(param.user, 'tobi', 'param matched')
|
99 | t.equal(param.name, 'baz', 'param matched')
|
100 | })
|
101 | r('/tobi/baz')
|
102 | })
|
103 |
|
104 | t.test('.emit() should parse encoded params', function (t) {
|
105 | t.plan(1)
|
106 | var r = wayfarer()
|
107 | r.on('/:channel', function (param) {
|
108 | t.equal(param.channel, '#choo', 'param matched')
|
109 | })
|
110 | r('/%23choo')
|
111 | })
|
112 |
|
113 | t.test('.emit() should throw if no matches are found', function (t) {
|
114 | t.plan(1)
|
115 | var r1 = wayfarer()
|
116 | t.throws(r1.bind(r1, '/woops'), /route/, 'no matches found')
|
117 | })
|
118 |
|
119 | t.test('.emit() should return values', function (t) {
|
120 | t.plan(1)
|
121 | var r1 = wayfarer()
|
122 | r1.on('/foo', function () {
|
123 | return 'hello'
|
124 | })
|
125 | t.equal(r1('foo'), 'hello', 'returns value')
|
126 | })
|
127 |
|
128 | t.test('.emit() mount subrouters', function (t) {
|
129 | t.plan(5)
|
130 |
|
131 | var r4 = wayfarer()
|
132 | var r3 = wayfarer()
|
133 | r4.on('/kidlette', function () { t.pass('nested 2 levels') })
|
134 | r3.on('/mom', r4)
|
135 | r3('/mom/kidlette')
|
136 |
|
137 | var r1 = wayfarer()
|
138 | var r2 = wayfarer()
|
139 | r2.on('/', function () { t.pass('nested 1 level') })
|
140 | r1.on('/home', r2)
|
141 | r1('/home')
|
142 |
|
143 | var r5 = wayfarer()
|
144 | var r6 = wayfarer()
|
145 | r6.on('/child', function (param) {
|
146 | t.equal(typeof param, 'object', 'param is passed')
|
147 | t.equal(param.parent, 'hello', 'nested 2 levels with params')
|
148 | })
|
149 | r5.on('/:parent', r6)
|
150 | r5('/hello/child')
|
151 |
|
152 | var r7 = wayfarer()
|
153 | var r8 = wayfarer()
|
154 | var r9 = wayfarer()
|
155 | r9.on('/bar', function (param) { t.pass('called', 'nested 3 levels') })
|
156 | r8.on('/bin', r9)
|
157 | r7.on('/foo', r8)
|
158 | r7('/foo/bin/bar')
|
159 |
|
160 |
|
161 |
|
162 |
|
163 |
|
164 |
|
165 |
|
166 |
|
167 |
|
168 |
|
169 |
|
170 |
|
171 | })
|
172 |
|
173 | t.test('nested routes should call parent default route', function (t) {
|
174 | t.plan(4)
|
175 | var r1 = wayfarer('/404')
|
176 | var r2 = wayfarer()
|
177 | var r3 = wayfarer()
|
178 |
|
179 | r2.on('/bar', r3)
|
180 | r1.on('foo', r2)
|
181 | r1.on('/404', pass)
|
182 |
|
183 | r1('')
|
184 | r1('foo')
|
185 | r1('foo/bar')
|
186 | r1('foo/beep/boop')
|
187 |
|
188 | function pass (params) {
|
189 | t.pass('called')
|
190 | }
|
191 | })
|
192 |
|
193 | t.test('aliases', function (t) {
|
194 | t.plan(1)
|
195 | var r = wayfarer()
|
196 | t.equal(r, r.emit)
|
197 | })
|
198 |
|
199 | t.test('wildcards', function (t) {
|
200 | t.plan(3)
|
201 | var r = wayfarer()
|
202 |
|
203 | r.on('/bar/*', function (params) {
|
204 | t.equal(params.wildcard, 'foo/beep/boop')
|
205 | })
|
206 |
|
207 | r.on('/foo/:match/*', function (params) {
|
208 | t.equal(params.match, 'bar')
|
209 | t.equal(params.wildcard, 'beep/boop')
|
210 | })
|
211 |
|
212 | r('/bar/foo/beep/boop')
|
213 | r('/foo/bar/beep/boop')
|
214 | })
|
215 |
|
216 | t.test('safe decodeURIComponent', function (t) {
|
217 | t.plan(1)
|
218 | var r = wayfarer('/404')
|
219 | r.on('/test/:id', function (params) {
|
220 | t.fail('we should not be here')
|
221 | })
|
222 | r.on('/404', function () {
|
223 | t.pass('called')
|
224 | })
|
225 | r('/test/hel%"Flo')
|
226 | })
|
227 |
|
228 | t.test('safe decodeURIComponent - nested route', function (t) {
|
229 | t.plan(1)
|
230 | var r = wayfarer('/404')
|
231 | r.on('/test/hello/world/:id/blah', function (params) {
|
232 | t.fail('we should not be here')
|
233 | })
|
234 | r.on('/404', function () {
|
235 | t.pass('called')
|
236 | })
|
237 | r('/test/hello/world/hel%"Flo/blah')
|
238 | })
|
239 |
|
240 | t.test('safe decodeURIComponent - wildcard', function (t) {
|
241 | t.plan(1)
|
242 | var r = wayfarer('/404')
|
243 | r.on('/test/*', function (params) {
|
244 | t.fail('we should not be here')
|
245 | })
|
246 | r.on('/404', function () {
|
247 | t.pass('called')
|
248 | })
|
249 | r('/test/hel%"Flo')
|
250 | })
|
251 |
|
252 | t.test('should expose .router property', function (t) {
|
253 | t.plan(1)
|
254 | var r = wayfarer()
|
255 | r.on('/foo', function () {
|
256 | t.equal(this.route, '/foo', 'exposes route property')
|
257 | })
|
258 | r('/foo')
|
259 | })
|
260 | })
|