@@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest'
2
2
import { normalizeRoutePath } from '../src/index.js'
3
3
4
4
const testCases = [
5
- // index
5
+ // absolute index
6
6
[ '/' , '/' ] ,
7
7
[ '/README.md' , '/' ] ,
8
8
[ '/readme.md' , '/' ] ,
@@ -15,55 +15,168 @@ const testCases = [
15
15
[ '/foo/index.md' , '/foo/' ] ,
16
16
[ '/foo/index.html' , '/foo/' ] ,
17
17
[ '/foo/index' , '/foo/' ] ,
18
- [ '' , '' ] ,
19
18
[ 'README.md' , 'index.html' ] ,
20
19
[ 'readme.md' , 'index.html' ] ,
21
20
[ 'index.md' , 'index.html' ] ,
22
21
[ 'index.html' , 'index.html' ] ,
23
22
[ 'index' , 'index.html' ] ,
24
- [ 'foo/' , 'foo/' ] ,
25
- [ 'foo/README.md' , 'foo/' ] ,
26
- [ 'foo/readme.md' , 'foo/' ] ,
27
- [ 'foo/index.md' , 'foo/' ] ,
28
- [ 'foo/index.html' , 'foo/' ] ,
29
- [ 'foo/index' , 'foo/' ] ,
30
23
31
- // non-index
24
+ // absolute non-index
32
25
[ '/foo' , '/foo.html' ] ,
33
26
[ '/foo.md' , '/foo.html' ] ,
34
27
[ '/foo.html' , '/foo.html' ] ,
35
28
[ '/foo/bar' , '/foo/bar.html' ] ,
36
29
[ '/foo/bar.md' , '/foo/bar.html' ] ,
37
30
[ '/foo/bar.html' , '/foo/bar.html' ] ,
31
+
32
+ // relative index without current
33
+ [ 'foo/' , 'foo/' ] ,
34
+ [ 'foo/README.md' , 'foo/' ] ,
35
+ [ 'foo/readme.md' , 'foo/' ] ,
36
+ [ 'foo/index.md' , 'foo/' ] ,
37
+ [ 'foo/index.html' , 'foo/' ] ,
38
+ [ 'foo/index' , 'foo/' ] ,
39
+
40
+ // relative non index without current
38
41
[ 'foo' , 'foo.html' ] ,
39
42
[ 'foo.md' , 'foo.html' ] ,
40
43
[ 'foo.html' , 'foo.html' ] ,
41
44
[ 'foo/bar' , 'foo/bar.html' ] ,
42
45
[ 'foo/bar.md' , 'foo/bar.html' ] ,
43
46
[ 'foo/bar.html' , 'foo/bar.html' ] ,
44
47
45
- // hash and query
46
- [ '/foo#bar' , '/foo.html#bar' ] ,
47
- [ '/foo.md#bar' , '/foo.html#bar' ] ,
48
- [ '/foo.html#bar' , '/foo.html#bar' ] ,
49
- [ '/foo?bar=baz' , '/foo.html?bar=baz' ] ,
50
- [ '/foo.md?bar=baz' , '/foo.html?bar=baz' ] ,
51
- [ '/foo.html?bar=baz' , '/foo.html?bar=baz' ] ,
52
- [ '/foo?bar=baz#qux' , '/foo.html?bar=baz#qux' ] ,
53
- [ '/foo.md?bar=baz#qux' , '/foo.html?bar=baz#qux' ] ,
54
- [ '/foo.html?bar=baz#qux' , '/foo.html?bar=baz#qux' ] ,
55
- [ 'foo#bar' , 'foo.html#bar' ] ,
56
- [ 'foo.md#bar' , 'foo.html#bar' ] ,
57
- [ 'foo.html#bar' , 'foo.html#bar' ] ,
58
- [ 'foo?bar=baz' , 'foo.html?bar=baz' ] ,
59
- [ 'foo.md?bar=baz' , 'foo.html?bar=baz' ] ,
60
- [ 'foo.html?bar=baz' , 'foo.html?bar=baz' ] ,
61
- [ 'foo?bar=baz#qux' , 'foo.html?bar=baz#qux' ] ,
62
- [ 'foo.md?bar=baz#qux' , 'foo.html?bar=baz#qux' ] ,
63
- [ 'foo.html?bar=baz#qux' , 'foo.html?bar=baz#qux' ] ,
64
- [ '#bar' , '#bar' ] ,
65
- [ '?bar=baz' , '?bar=baz' ] ,
66
- [ '?bar=baz#qux' , '?bar=baz#qux' ] ,
48
+ // relative non index with current
49
+ [ 'foo' , '/foo.html' , '/' ] ,
50
+ [ 'foo' , '/foo.html' , '/a.html' ] ,
51
+ [ 'foo' , '/foo.html' , '/index.html' ] ,
52
+ [ 'foo' , '/a/foo.html' , '/a/' ] ,
53
+ [ 'foo' , '/a/foo.html' , '/a/index.html' ] ,
54
+ [ 'foo' , '/a/foo.html' , '/a/b.html' ] ,
55
+ [ 'foo.md' , '/foo.html' , '/' ] ,
56
+ [ 'foo.md' , '/foo.html' , '/a.html' ] ,
57
+ [ 'foo.md' , '/foo.html' , '/index.html' ] ,
58
+ [ 'foo.md' , '/a/foo.html' , '/a/' ] ,
59
+ [ 'foo.md' , '/a/foo.html' , '/a/index.html' ] ,
60
+ [ 'foo.md' , '/a/foo.html' , '/a/b.html' ] ,
61
+ [ 'foo.html' , '/foo.html' , '/' ] ,
62
+ [ 'foo.html' , '/foo.html' , '/a.html' ] ,
63
+ [ 'foo.html' , '/foo.html' , '/index.html' ] ,
64
+ [ 'foo.html' , '/a/foo.html' , '/a/' ] ,
65
+ [ 'foo.html' , '/a/foo.html' , '/a/index.html' ] ,
66
+ [ 'foo.html' , '/a/foo.html' , '/a/b.html' ] ,
67
+ [ 'foo/bar' , '/foo/bar.html' , '/' ] ,
68
+ [ 'foo/bar' , '/foo/bar.html' , '/a.html' ] ,
69
+ [ 'foo/bar' , '/foo/bar.html' , '/index.html' ] ,
70
+ [ 'foo/bar' , '/a/foo/bar.html' , '/a/' ] ,
71
+ [ 'foo/bar' , '/a/foo/bar.html' , '/a/index.html' ] ,
72
+ [ 'foo/bar' , '/a/foo/bar.html' , '/a/b.html' ] ,
73
+ [ 'foo/bar.md' , '/foo/bar.html' , '/' ] ,
74
+ [ 'foo/bar.md' , '/foo/bar.html' , '/a.html' ] ,
75
+ [ 'foo/bar.md' , '/foo/bar.html' , '/index.html' ] ,
76
+ [ 'foo/bar.md' , '/a/foo/bar.html' , '/a/' ] ,
77
+ [ 'foo/bar.md' , '/a/foo/bar.html' , '/a/index.html' ] ,
78
+ [ 'foo/bar.md' , '/a/foo/bar.html' , '/a/b.html' ] ,
79
+ [ 'foo/bar.html' , '/foo/bar.html' , '/' ] ,
80
+ [ 'foo/bar.html' , '/foo/bar.html' , '/a.html' ] ,
81
+ [ 'foo/bar.html' , '/foo/bar.html' , '/index.html' ] ,
82
+ [ 'foo/bar.html' , '/a/foo/bar.html' , '/a/' ] ,
83
+ [ 'foo/bar.html' , '/a/foo/bar.html' , '/a/index.html' ] ,
84
+ [ 'foo/bar.html' , '/a/foo/bar.html' , '/a/b.html' ] ,
85
+ [ './foo' , '/foo.html' , '/' ] ,
86
+ [ './foo' , '/foo.html' , '/a.html' ] ,
87
+ [ './foo' , '/foo.html' , '/index.html' ] ,
88
+ [ './foo' , '/a/foo.html' , '/a/' ] ,
89
+ [ './foo' , '/a/foo.html' , '/a/index.html' ] ,
90
+ [ './foo' , '/a/foo.html' , '/a/b.html' ] ,
91
+ [ './foo.md' , '/foo.html' , '/' ] ,
92
+ [ './foo.md' , '/foo.html' , '/a.html' ] ,
93
+ [ './foo.md' , '/foo.html' , '/index.html' ] ,
94
+ [ './foo.md' , '/a/foo.html' , '/a/' ] ,
95
+ [ './foo.md' , '/a/foo.html' , '/a/index.html' ] ,
96
+ [ './foo.md' , '/a/foo.html' , '/a/b.html' ] ,
97
+ [ './foo.html' , '/foo.html' , '/' ] ,
98
+ [ './foo.html' , '/foo.html' , '/a.html' ] ,
99
+ [ './foo.html' , '/foo.html' , '/index.html' ] ,
100
+ [ './foo.html' , '/a/foo.html' , '/a/' ] ,
101
+ [ './foo.html' , '/a/foo.html' , '/a/index.html' ] ,
102
+ [ './foo.html' , '/a/foo.html' , '/a/b.html' ] ,
103
+ [ './foo/bar' , '/foo/bar.html' , '/' ] ,
104
+ [ './foo/bar' , '/foo/bar.html' , '/a.html' ] ,
105
+ [ './foo/bar' , '/foo/bar.html' , '/index.html' ] ,
106
+ [ './foo/bar' , '/a/foo/bar.html' , '/a/' ] ,
107
+ [ './foo/bar' , '/a/foo/bar.html' , '/a/index.html' ] ,
108
+ [ './foo/bar' , '/a/foo/bar.html' , '/a/b.html' ] ,
109
+ [ './foo/bar.md' , '/foo/bar.html' , '/' ] ,
110
+ [ './foo/bar.md' , '/foo/bar.html' , '/a.html' ] ,
111
+ [ './foo/bar.md' , '/foo/bar.html' , '/index.html' ] ,
112
+ [ './foo/bar.md' , '/a/foo/bar.html' , '/a/' ] ,
113
+ [ './foo/bar.md' , '/a/foo/bar.html' , '/a/index.html' ] ,
114
+ [ './foo/bar.md' , '/a/foo/bar.html' , '/a/b.html' ] ,
115
+ [ './foo/bar.html' , '/foo/bar.html' , '/' ] ,
116
+ [ './foo/bar.html' , '/foo/bar.html' , '/a.html' ] ,
117
+ [ './foo/bar.html' , '/foo/bar.html' , '/index.html' ] ,
118
+ [ './foo/bar.html' , '/a/foo/bar.html' , '/a/' ] ,
119
+ [ './foo/bar.html' , '/a/foo/bar.html' , '/a/index.html' ] ,
120
+ [ './foo/bar.html' , '/a/foo/bar.html' , '/a/b.html' ] ,
121
+ [ '../foo' , '/foo.html' , '/a/' ] ,
122
+ [ '../foo' , '/foo.html' , '/a/index.html' ] ,
123
+ [ '../foo' , '/foo.html' , '/a/b.html' ] ,
124
+ [ '../foo.md' , '/foo.html' , '/a/' ] ,
125
+ [ '../foo.md' , '/foo.html' , '/a/index.html' ] ,
126
+ [ '../foo.md' , '/foo.html' , '/a/b.html' ] ,
127
+ [ '../foo.html' , '/foo.html' , '/a/' ] ,
128
+ [ '../foo.html' , '/foo.html' , '/a/index.html' ] ,
129
+ [ '../foo.html' , '/foo.html' , '/a/b.html' ] ,
130
+ [ '../foo/bar' , '/foo/bar.html' , '/a/' ] ,
131
+ [ '../foo/bar' , '/foo/bar.html' , '/a/index.html' ] ,
132
+ [ '../foo/bar' , '/foo/bar.html' , '/a/b.html' ] ,
133
+ [ '../foo/bar.md' , '/foo/bar.html' , '/a/' ] ,
134
+ [ '../foo/bar.md' , '/foo/bar.html' , '/a/index.html' ] ,
135
+ [ '../foo/bar.md' , '/foo/bar.html' , '/a/b.html' ] ,
136
+ [ '../foo/bar.html' , '/foo/bar.html' , '/a/' ] ,
137
+ [ '../foo/bar.html' , '/foo/bar.html' , '/a/index.html' ] ,
138
+ [ '../foo/bar.html' , '/foo/bar.html' , '/a/b.html' ] ,
139
+
140
+ // absolute non index with current
141
+ [ '/foo' , '/foo.html' , '/' ] ,
142
+ [ '/foo' , '/foo.html' , '/a.html' ] ,
143
+ [ '/foo' , '/foo.html' , '/index.html' ] ,
144
+ [ '/foo' , '/foo.html' , '/a/' ] ,
145
+ [ '/foo' , '/foo.html' , '/a/index.html' ] ,
146
+ [ '/foo' , '/foo.html' , '/a/b.html' ] ,
147
+ [ '/foo.md' , '/foo.html' , '/' ] ,
148
+ [ '/foo.md' , '/foo.html' , '/a.html' ] ,
149
+ [ '/foo.md' , '/foo.html' , '/index.html' ] ,
150
+ [ '/foo.md' , '/foo.html' , '/a/' ] ,
151
+ [ '/foo.md' , '/foo.html' , '/a/index.html' ] ,
152
+ [ '/foo.md' , '/foo.html' , '/a/b.html' ] ,
153
+ [ '/foo.html' , '/foo.html' , '/' ] ,
154
+ [ '/foo.html' , '/foo.html' , '/a.html' ] ,
155
+ [ '/foo.html' , '/foo.html' , '/index.html' ] ,
156
+ [ '/foo.html' , '/foo.html' , '/a/' ] ,
157
+ [ '/foo.html' , '/foo.html' , '/a/index.html' ] ,
158
+ [ '/foo.html' , '/foo.html' , '/a/b.html' ] ,
159
+ [ '/foo/bar' , '/foo/bar.html' , '/' ] ,
160
+ [ '/foo/bar' , '/foo/bar.html' , '/a.html' ] ,
161
+ [ '/foo/bar' , '/foo/bar.html' , '/index.html' ] ,
162
+ [ '/foo/bar' , '/foo/bar.html' , '/a/' ] ,
163
+ [ '/foo/bar' , '/foo/bar.html' , '/a/index.html' ] ,
164
+ [ '/foo/bar' , '/foo/bar.html' , '/a/b.html' ] ,
165
+ [ '/foo/bar.md' , '/foo/bar.html' , '/' ] ,
166
+ [ '/foo/bar.md' , '/foo/bar.html' , '/a.html' ] ,
167
+ [ '/foo/bar.md' , '/foo/bar.html' , '/index.html' ] ,
168
+ [ '/foo/bar.md' , '/foo/bar.html' , '/a/' ] ,
169
+ [ '/foo/bar.md' , '/foo/bar.html' , '/a/index.html' ] ,
170
+ [ '/foo/bar.md' , '/foo/bar.html' , '/a/b.html' ] ,
171
+ [ '/foo/bar.html' , '/foo/bar.html' , '/' ] ,
172
+ [ '/foo/bar.html' , '/foo/bar.html' , '/a.html' ] ,
173
+ [ '/foo/bar.html' , '/foo/bar.html' , '/index.html' ] ,
174
+ [ '/foo/bar.html' , '/foo/bar.html' , '/a/' ] ,
175
+ [ '/foo/bar.html' , '/foo/bar.html' , '/a/index.html' ] ,
176
+ [ '/foo/bar.html' , '/foo/bar.html' , '/a/b.html' ] ,
177
+
178
+ // only hash and query
179
+ [ '' , '' ] ,
67
180
68
181
// unexpected corner cases
69
182
[ '.md' , '.html' ] ,
@@ -72,39 +185,52 @@ const testCases = [
72
185
[ '/foo/.md' , '/foo/.html' ] ,
73
186
]
74
187
75
- describe ( 'should normalize clean paths correctly' , ( ) =>
76
- testCases . forEach ( ( [ path , expected ] ) =>
77
- it ( `"${ path } " -> "${ expected } "` , ( ) => {
78
- expect ( normalizeRoutePath ( path ) ) . toBe ( expected )
188
+ describe ( 'should normalize clean paths correctly' , ( ) => {
189
+ testCases . forEach ( ( [ path , expected , current ] ) =>
190
+ it ( `${ current ? `" ${ current } "-` : '' } "${ path } " -> "${ expected } "` , ( ) => {
191
+ expect ( normalizeRoutePath ( path , current ) ) . toBe ( expected )
79
192
} ) ,
80
- ) )
193
+ )
194
+ } )
81
195
82
- describe ( 'should normalize paths with query correctly' , ( ) =>
196
+ describe ( 'should normalize paths with query correctly' , ( ) => {
83
197
testCases
84
- . map ( ( [ path , expected ] ) => [ `${ path } ?foo=bar` , `${ expected } ?foo=bar` ] )
85
- . forEach ( ( [ path , expected ] ) =>
86
- it ( `"${ path } " -> "${ expected } "` , ( ) => {
87
- expect ( normalizeRoutePath ( path ) ) . toBe ( expected )
198
+ . map ( ( [ path , expected , current ] ) => [
199
+ `${ path } ?foo=bar` ,
200
+ `${ expected } ?foo=bar` ,
201
+ current ,
202
+ ] )
203
+ . forEach ( ( [ path , expected , current ] ) =>
204
+ it ( `${ current ? `"${ current } "-` : '' } "${ path } " -> "${ expected } "` , ( ) => {
205
+ expect ( normalizeRoutePath ( path , current ) ) . toBe ( expected )
88
206
} ) ,
89
- ) )
207
+ )
208
+ } )
90
209
91
- describe ( 'should normalize paths with hash correctly' , ( ) =>
210
+ describe ( 'should normalize paths with hash correctly' , ( ) => {
92
211
testCases
93
- . map ( ( [ path , expected ] ) => [ `${ path } #foobar` , `${ expected } #foobar` ] )
94
- . forEach ( ( [ path , expected ] ) =>
95
- it ( `"${ path } " -> "${ expected } "` , ( ) => {
96
- expect ( normalizeRoutePath ( path ) ) . toBe ( expected )
212
+ . map ( ( [ path , expected , current ] ) => [
213
+ `${ path } #foobar` ,
214
+ `${ expected } #foobar` ,
215
+ current ,
216
+ ] )
217
+ . forEach ( ( [ path , expected , current ] ) =>
218
+ it ( `${ current ? `"${ current } "-` : '' } "${ path } " -> "${ expected } "` , ( ) => {
219
+ expect ( normalizeRoutePath ( path , current ) ) . toBe ( expected )
97
220
} ) ,
98
- ) )
221
+ )
222
+ } )
99
223
100
- describe ( 'should normalize paths with query and hash correctly' , ( ) =>
224
+ describe ( 'should normalize paths with query and hash correctly' , ( ) => {
101
225
testCases
102
- . map ( ( [ path , expected ] ) => [
226
+ . map ( ( [ path , expected , current ] ) => [
103
227
`${ path } ?foo=1&bar=2#foobar` ,
104
228
`${ expected } ?foo=1&bar=2#foobar` ,
229
+ current ,
105
230
] )
106
- . forEach ( ( [ path , expected ] ) =>
107
- it ( `"${ path } " -> "${ expected } "` , ( ) => {
108
- expect ( normalizeRoutePath ( path ) ) . toBe ( expected )
231
+ . forEach ( ( [ path , expected , current ] ) =>
232
+ it ( `${ current ? `" ${ current } "-` : '' } "${ path } " -> "${ expected } "` , ( ) => {
233
+ expect ( normalizeRoutePath ( path , current ) ) . toBe ( expected )
109
234
} ) ,
110
- ) )
235
+ )
236
+ } )
0 commit comments