@@ -114,6 +114,7 @@ const windowsTestCases = [
114
114
// Extended UNC path
115
115
{ path : '\\\\?\\UNC\\server\\share\\folder\\file.txt' , expected : 'file://server/share/folder/file.txt' } ,
116
116
] ;
117
+ const alphabet = String . fromCharCode ( ...Array . from ( { length : 26 } , ( _ , i ) => 'a' . charCodeAt ( ) + i ) ) ;
117
118
const posixTestCases = [
118
119
// Lowercase ascii alpha
119
120
{ path : '/foo' , expected : 'file:///foo' } ,
@@ -159,6 +160,31 @@ const posixTestCases = [
159
160
{ path : '/🚀' , expected : 'file:///%F0%9F%9A%80' } ,
160
161
// "unsafe" chars
161
162
{ path : '/foo\r\n\t<>"#%{}|^[\\~]`?bar' , expected : 'file:///foo%0D%0A%09%3C%3E%22%23%25%7B%7D%7C%5E%5B%5C%7E%5D%60%3Fbar' } ,
163
+ // All of the 16-bit UTF-16 chars
164
+ {
165
+ path : `/${ Array . from ( { length : 0x7FFF } , ( _ , i ) => String . fromCharCode ( i ) ) . join ( '' ) } ` ,
166
+ expected : `file:///${
167
+ Array . from ( { length : 0x21 } , ( _ , i ) => `%${ i . toString ( 16 ) . toUpperCase ( ) . padStart ( 2 , '0' ) } ` ) . join ( '' )
168
+ } !%22%23$%25&'()*+,-./0123456789:;%3C=%3E%3F@${
169
+ alphabet . toUpperCase ( )
170
+ } %5B%5C%5D%5E_%60${ alphabet } %7B%7C%7D%7E%7F${
171
+ Array . from ( { length : 0x800 - 0x80 } , ( _ , i ) => `%${
172
+ ( Math . floor ( ( i - 0x80 ) / 0x40 ) + 0xC4 ) . toString ( 16 ) . toUpperCase ( )
173
+ } %${
174
+ ( ( i % 0x40 ) + 0x80 ) . toString ( 16 ) . toUpperCase ( )
175
+ } `) . join ( '' )
176
+ } ${
177
+ Array . from ( { length : 0x7FFF - 0x800 } , ( _ , i ) => i + 0x800 ) . map ( ( i ) => `%E${
178
+ ( i >> 12 ) . toString ( 16 ) . toUpperCase ( )
179
+ } %${
180
+ ( ( ( i >> 6 ) % 0x40 ) + 0x80 ) . toString ( 16 ) . toUpperCase ( )
181
+ } %${
182
+ ( ( i % 0x40 ) + 0x80 ) . toString ( 16 ) . toUpperCase ( )
183
+ } `) . join ( '' )
184
+ } `
185
+ } ,
186
+ // Trying with some pair of 16-bit surrogate pseudo-characters
187
+ { path : `/${ String . fromCodePoint ( 0x1F303 ) } ` , expected : 'file:///%F0%9F%8C%83' } ,
162
188
] ;
163
189
164
190
for ( const { path, expected } of windowsTestCases ) {
0 commit comments