1
1
import qs from '../../lib/qs'
2
2
import * as Path from '../../lib/path'
3
3
import 'chai/chai.js'
4
- import { patternCompiler } from '../../lib/patternCompiler.js'
4
+ import { patternCompiler as defaultPatternCompiler } from '../../lib/patternCompiler.js'
5
+ import { patternCompiler as pathToRegexPatternCompiler } from './pathToRegexPatternCompiler.js'
5
6
6
7
const { assert } = window . chai
7
8
const { describe, it } = window
8
9
9
- describe ( 'Path' , ( ) => {
10
- it ( 'Path.extractParamNames' , ( ) => {
11
- assert . deepEqual ( Path . extractParamNames ( 'a/b/c' , patternCompiler ) , [ ] )
12
- assert . deepEqual ( Path . extractParamNames ( '/comments/:a/:b/edit' , patternCompiler ) , [ 'a' , 'b' ] )
13
- assert . deepEqual ( Path . extractParamNames ( '/files/:path*.jpg' , patternCompiler ) , [ 'path' ] )
14
- } )
10
+ function testExtractParamNames ( patternCompiler ) {
11
+ assert . deepEqual ( Path . extractParamNames ( 'a/b/c' , patternCompiler ) , [ ] )
12
+ assert . deepEqual ( Path . extractParamNames ( '/comments/:a/:b/edit' , patternCompiler ) , [ 'a' , 'b' ] )
13
+ assert . deepEqual ( Path . extractParamNames ( '/files/:path*.jpg' , patternCompiler ) , [ 'path' ] )
14
+ }
15
+
16
+ function testExtractParams ( patternCompiler , edgeCases ) {
17
+ assert . deepEqual ( Path . extractParams ( '/a/b/c' , '/a/b/c' , patternCompiler ) , { } )
18
+ assert . deepEqual ( Path . extractParams ( '/a/b/c' , '/d/e/f' , patternCompiler ) , null )
15
19
16
- it ( 'Path.extractParams' , ( ) => {
17
- assert . deepEqual ( Path . extractParams ( 'a/b/c' , 'a/b/c' , patternCompiler ) , { } )
18
- assert . deepEqual ( Path . extractParams ( 'a/b/c' , 'd/e/f' , patternCompiler ) , null )
20
+ assert . deepEqual ( Path . extractParams ( '/comments/:id?/edit' , '/comments/123/edit' , patternCompiler ) , { id : '123' } )
21
+ assert . deepEqual ( Path . extractParams ( '/comments/:id?/edit' , '/comments/the%2Fid/edit' , patternCompiler ) , { id : 'the/id' } )
22
+ assert . deepEqual ( Path . extractParams ( '/comments/:id?/edit' , '/comments//edit' , patternCompiler ) , null )
23
+ assert . deepEqual ( Path . extractParams ( '/comments/:id?/edit' , '/users/123' , patternCompiler ) , null )
19
24
20
- assert . deepEqual ( Path . extractParams ( 'comments/:id.:ext/edit' , 'comments/abc.js/edit' , patternCompiler ) , { id : 'abc' , ext : 'js' } )
25
+ assert . deepEqual ( Path . extractParams ( '/one, two' , '/one, two' , patternCompiler ) , { } )
26
+ assert . deepEqual ( Path . extractParams ( '/one, two' , '/one two' , patternCompiler ) , null )
21
27
22
- assert . deepEqual ( Path . extractParams ( 'comments/:id?/edit' , 'comments/123/edit' , patternCompiler ) , { id : '123' } )
23
- assert . deepEqual ( Path . extractParams ( 'comments/:id?/edit' , 'comments/the%2Fid/edit' , patternCompiler ) , { id : 'the/id' } )
24
- assert . deepEqual ( Path . extractParams ( 'comments/:id?/edit' , 'comments//edit' , patternCompiler ) , null )
25
- assert . deepEqual ( Path . extractParams ( 'comments/:id?/edit' , 'users/123' , patternCompiler ) , null )
28
+ assert . deepEqual ( Path . extractParams ( '/comments/:id/edit now' , '/comments/abc/edit now' , patternCompiler ) , { id : 'abc' } )
29
+ assert . deepEqual ( Path . extractParams ( '/comments/:id/edit now' , '/users/123' , patternCompiler ) , null )
26
30
27
- assert . deepEqual ( Path . extractParams ( 'one, two ' , 'one, two ' , patternCompiler ) , { } )
28
- assert . deepEqual ( Path . extractParams ( 'one, two ' , 'one two ' , patternCompiler ) , null )
31
+ assert . deepEqual ( Path . extractParams ( '/files/:path* ' , '/files/my/photo.jpg ' , patternCompiler ) , { path : 'my/photo.jpg' } )
32
+ assert . deepEqual ( Path . extractParams ( '/files/:path* ' , '/files/my/photo.jpg.zip ' , patternCompiler ) , { path : 'my/photo.jpg.zip' } )
29
33
30
- assert . deepEqual ( Path . extractParams ( '/comments/:id/edit now' , '/comments/abc/edit now' , patternCompiler ) , { id : 'abc' } )
31
- assert . deepEqual ( Path . extractParams ( '/comments/:id/edit now' , '/users/123' , patternCompiler ) , null )
34
+ assert . deepEqual ( Path . extractParams ( '/archive/:name?' , '/archive' , patternCompiler ) , { name : undefined } )
35
+ assert . deepEqual ( Path . extractParams ( '/archive/:name?' , '/archive/' , patternCompiler ) , { name : undefined } )
36
+ assert . deepEqual ( Path . extractParams ( '/archive/:name?' , '/archive/foo' , patternCompiler ) , { name : 'foo' } )
37
+ assert . deepEqual ( Path . extractParams ( '/archive/:name?' , '/archivefoo' , patternCompiler ) , null )
38
+ assert . deepEqual ( Path . extractParams ( '/archive/:name?' , '/archiv' , patternCompiler ) , null )
32
39
33
- assert . deepEqual ( Path . extractParams ( '/files/:path*' , '/files/my/photo.jpg' , patternCompiler ) , { path : 'my/photo.jpg' } )
34
- assert . deepEqual ( Path . extractParams ( '/files/:path*' , '/files/my/photo.jpg.zip' , patternCompiler ) , { path : 'my/photo.jpg.zip' } )
40
+ assert . deepEqual ( Path . extractParams ( '/:query/with/:domain' , '/foo/with/foo.app' , patternCompiler ) , { query : 'foo' , domain : 'foo.app' } )
41
+ assert . deepEqual ( Path . extractParams ( '/:query/with/:domain' , '/foo.ap/with/foo' , patternCompiler ) , { query : 'foo.ap' , domain : 'foo' } )
42
+ assert . deepEqual ( Path . extractParams ( '/:query/with/:domain' , '/foo.ap/with/foo.app' , patternCompiler ) , { query : 'foo.ap' , domain : 'foo.app' } )
43
+ assert . deepEqual ( Path . extractParams ( '/:query/with/:domain' , '/foo.ap' , patternCompiler ) , null )
44
+
45
+ if ( edgeCases ) {
46
+ assert . deepEqual ( Path . extractParams ( '/comments/:id.:ext/edit' , '/comments/abc.js/edit' , patternCompiler ) , { id : 'abc' , ext : 'js' } )
35
47
assert . deepEqual ( Path . extractParams ( '/files/:path*.jpg' , '/files/my%2Fphoto.jpg' , patternCompiler ) , { path : 'my/photo' } )
36
48
assert . deepEqual ( Path . extractParams ( '/files/:path*' , '/files' , patternCompiler ) , { path : undefined } )
37
49
assert . deepEqual ( Path . extractParams ( '/files/:path*' , '/files/' , patternCompiler ) , { path : undefined } )
@@ -51,22 +63,37 @@ describe('Path', () => {
51
63
assert . deepEqual ( Path . extractParams ( '/files/:path+' , '/files/' , patternCompiler ) , null )
52
64
assert . deepEqual ( Path . extractParams ( '/files/:path+.jpg' , '/files/my/photo.png' , patternCompiler ) , null )
53
65
54
- assert . deepEqual ( Path . extractParams ( '/archive/:name?' , '/archive' , patternCompiler ) , { name : undefined } )
55
- assert . deepEqual ( Path . extractParams ( '/archive/:name?' , '/archive/' , patternCompiler ) , { name : undefined } )
56
- assert . deepEqual ( Path . extractParams ( '/archive/:name?' , '/archive/foo' , patternCompiler ) , { name : 'foo' } )
57
- assert . deepEqual ( Path . extractParams ( '/archive/:name?' , '/archivefoo' , patternCompiler ) , null )
58
- assert . deepEqual ( Path . extractParams ( '/archive/:name?' , '/archiv' , patternCompiler ) , null )
59
-
60
- assert . deepEqual ( Path . extractParams ( '/:query/with/:domain' , '/foo/with/foo.app' , patternCompiler ) , { query : 'foo' , domain : 'foo.app' } )
61
- assert . deepEqual ( Path . extractParams ( '/:query/with/:domain' , '/foo.ap/with/foo' , patternCompiler ) , { query : 'foo.ap' , domain : 'foo' } )
62
- assert . deepEqual ( Path . extractParams ( '/:query/with/:domain' , '/foo.ap/with/foo.app' , patternCompiler ) , { query : 'foo.ap' , domain : 'foo.app' } )
63
- assert . deepEqual ( Path . extractParams ( '/:query/with/:domain' , '/foo.ap' , patternCompiler ) , null )
64
-
65
66
// advanced use case of making params in the middle of the url optional
66
67
assert . deepEqual ( Path . extractParams ( '/comments/:id(.*/?edit)' , '/comments/123/edit' , patternCompiler ) , { id : '123/edit' } )
67
68
assert . deepEqual ( Path . extractParams ( '/comments/:id(.*/?edit)' , '/comments/edit' , patternCompiler ) , { id : 'edit' } )
68
69
assert . deepEqual ( Path . extractParams ( '/comments/:id(.*/?edit)' , '/comments/editor' , patternCompiler ) , null )
69
70
assert . deepEqual ( Path . extractParams ( '/comments/:id(.*/?edit)' , '/comments/123' , patternCompiler ) , null )
71
+ }
72
+ }
73
+
74
+ describe ( 'Path' , ( ) => {
75
+ describe ( 'Path.extractParamNames' , ( ) => {
76
+ it ( 'with default patternCompiler' , ( ) => {
77
+ Path . clearPatternCompilerCache ( )
78
+ testExtractParamNames ( defaultPatternCompiler , false )
79
+ } )
80
+
81
+ it ( 'with pathToRegex patternCompiler' , ( ) => {
82
+ Path . clearPatternCompilerCache ( )
83
+ testExtractParamNames ( pathToRegexPatternCompiler , true )
84
+ } )
85
+ } )
86
+
87
+ describe ( 'Path.extractParams' , ( ) => {
88
+ it ( 'with default patternCompiler' , ( ) => {
89
+ Path . clearPatternCompilerCache ( )
90
+ testExtractParams ( defaultPatternCompiler , false )
91
+ } )
92
+
93
+ it ( 'with pathToRegex patternCompiler' , ( ) => {
94
+ Path . clearPatternCompilerCache ( )
95
+ testExtractParams ( pathToRegexPatternCompiler , true )
96
+ } )
70
97
} )
71
98
72
99
it ( 'Path.injectParams' , ( ) => {
0 commit comments