@@ -49,106 +49,116 @@ assert.throws(() => url.fileURLToPath('https://a/b/c'), {
49
49
}
50
50
}
51
51
52
- {
53
- let testCases ;
54
- if ( isWindows ) {
55
- testCases = [
56
- // Lowercase ascii alpha
57
- { path : 'C:\\foo' , fileURL : 'file:///C:/foo' } ,
58
- // Uppercase ascii alpha
59
- { path : 'C:\\FOO' , fileURL : 'file:///C:/FOO' } ,
60
- // dir
61
- { path : 'C:\\dir\\foo' , fileURL : 'file:///C:/dir/foo' } ,
62
- // trailing separator
63
- { path : 'C:\\dir\\' , fileURL : 'file:///C:/dir/' } ,
64
- // dot
65
- { path : 'C:\\foo.mjs' , fileURL : 'file:///C:/foo.mjs' } ,
66
- // space
67
- { path : 'C:\\foo bar' , fileURL : 'file:///C:/foo%20bar' } ,
68
- // question mark
69
- { path : 'C:\\foo?bar' , fileURL : 'file:///C:/foo%3Fbar' } ,
70
- // number sign
71
- { path : 'C:\\foo#bar' , fileURL : 'file:///C:/foo%23bar' } ,
72
- // ampersand
73
- { path : 'C:\\foo&bar' , fileURL : 'file:///C:/foo&bar' } ,
74
- // equals
75
- { path : 'C:\\foo=bar' , fileURL : 'file:///C:/foo=bar' } ,
76
- // colon
77
- { path : 'C:\\foo:bar' , fileURL : 'file:///C:/foo:bar' } ,
78
- // semicolon
79
- { path : 'C:\\foo;bar' , fileURL : 'file:///C:/foo;bar' } ,
80
- // percent
81
- { path : 'C:\\foo%bar' , fileURL : 'file:///C:/foo%25bar' } ,
82
- // backslash
83
- { path : 'C:\\foo\\bar' , fileURL : 'file:///C:/foo/bar' } ,
84
- // backspace
85
- { path : 'C:\\foo\bbar' , fileURL : 'file:///C:/foo%08bar' } ,
86
- // tab
87
- { path : 'C:\\foo\tbar' , fileURL : 'file:///C:/foo%09bar' } ,
88
- // newline
89
- { path : 'C:\\foo\nbar' , fileURL : 'file:///C:/foo%0Abar' } ,
90
- // carriage return
91
- { path : 'C:\\foo\rbar' , fileURL : 'file:///C:/foo%0Dbar' } ,
92
- // latin1
93
- { path : 'C:\\fóóbàr' , fileURL : 'file:///C:/f%C3%B3%C3%B3b%C3%A0r' } ,
94
- // Euro sign (BMP code point)
95
- { path : 'C:\\€' , fileURL : 'file:///C:/%E2%82%AC' } ,
96
- // Rocket emoji (non-BMP code point)
97
- { path : 'C:\\🚀' , fileURL : 'file:///C:/%F0%9F%9A%80' } ,
98
- // UNC path (see https://docs.microsoft.com/en-us/archive/blogs/ie/file-uris-in-windows)
99
- { path : '\\\\nas\\My Docs\\File.doc' , fileURL : 'file://nas/My%20Docs/File.doc' } ,
100
- ] ;
101
- } else {
102
- testCases = [
103
- // Lowercase ascii alpha
104
- { path : '/foo' , fileURL : 'file:///foo' } ,
105
- // Uppercase ascii alpha
106
- { path : '/FOO' , fileURL : 'file:///FOO' } ,
107
- // dir
108
- { path : '/dir/foo' , fileURL : 'file:///dir/foo' } ,
109
- // trailing separator
110
- { path : '/dir/' , fileURL : 'file:///dir/' } ,
111
- // dot
112
- { path : '/foo.mjs' , fileURL : 'file:///foo.mjs' } ,
113
- // space
114
- { path : '/foo bar' , fileURL : 'file:///foo%20bar' } ,
115
- // question mark
116
- { path : '/foo?bar' , fileURL : 'file:///foo%3Fbar' } ,
117
- // number sign
118
- { path : '/foo#bar' , fileURL : 'file:///foo%23bar' } ,
119
- // ampersand
120
- { path : '/foo&bar' , fileURL : 'file:///foo&bar' } ,
121
- // equals
122
- { path : '/foo=bar' , fileURL : 'file:///foo=bar' } ,
123
- // colon
124
- { path : '/foo:bar' , fileURL : 'file:///foo:bar' } ,
125
- // semicolon
126
- { path : '/foo;bar' , fileURL : 'file:///foo;bar' } ,
127
- // percent
128
- { path : '/foo%bar' , fileURL : 'file:///foo%25bar' } ,
129
- // backslash
130
- { path : '/foo\\bar' , fileURL : 'file:///foo%5Cbar' } ,
131
- // backspace
132
- { path : '/foo\bbar' , fileURL : 'file:///foo%08bar' } ,
133
- // tab
134
- { path : '/foo\tbar' , fileURL : 'file:///foo%09bar' } ,
135
- // newline
136
- { path : '/foo\nbar' , fileURL : 'file:///foo%0Abar' } ,
137
- // carriage return
138
- { path : '/foo\rbar' , fileURL : 'file:///foo%0Dbar' } ,
139
- // latin1
140
- { path : '/fóóbàr' , fileURL : 'file:///f%C3%B3%C3%B3b%C3%A0r' } ,
141
- // Euro sign (BMP code point)
142
- { path : '/€' , fileURL : 'file:///%E2%82%AC' } ,
143
- // Rocket emoji (non-BMP code point)
144
- { path : '/🚀' , fileURL : 'file:///%F0%9F%9A%80' } ,
145
- ] ;
146
- }
52
+ const windowsTestCases = [
53
+ // Lowercase ascii alpha
54
+ { path : 'C:\\foo' , fileURL : 'file:///C:/foo' } ,
55
+ // Uppercase ascii alpha
56
+ { path : 'C:\\FOO' , fileURL : 'file:///C:/FOO' } ,
57
+ // dir
58
+ { path : 'C:\\dir\\foo' , fileURL : 'file:///C:/dir/foo' } ,
59
+ // trailing separator
60
+ { path : 'C:\\dir\\' , fileURL : 'file:///C:/dir/' } ,
61
+ // dot
62
+ { path : 'C:\\foo.mjs' , fileURL : 'file:///C:/foo.mjs' } ,
63
+ // space
64
+ { path : 'C:\\foo bar' , fileURL : 'file:///C:/foo%20bar' } ,
65
+ // question mark
66
+ { path : 'C:\\foo?bar' , fileURL : 'file:///C:/foo%3Fbar' } ,
67
+ // number sign
68
+ { path : 'C:\\foo#bar' , fileURL : 'file:///C:/foo%23bar' } ,
69
+ // ampersand
70
+ { path : 'C:\\foo&bar' , fileURL : 'file:///C:/foo&bar' } ,
71
+ // equals
72
+ { path : 'C:\\foo=bar' , fileURL : 'file:///C:/foo=bar' } ,
73
+ // colon
74
+ { path : 'C:\\foo:bar' , fileURL : 'file:///C:/foo:bar' } ,
75
+ // semicolon
76
+ { path : 'C:\\foo;bar' , fileURL : 'file:///C:/foo;bar' } ,
77
+ // percent
78
+ { path : 'C:\\foo%bar' , fileURL : 'file:///C:/foo%25bar' } ,
79
+ // backslash
80
+ { path : 'C:\\foo\\bar' , fileURL : 'file:///C:/foo/bar' } ,
81
+ // backspace
82
+ { path : 'C:\\foo\bbar' , fileURL : 'file:///C:/foo%08bar' } ,
83
+ // tab
84
+ { path : 'C:\\foo\tbar' , fileURL : 'file:///C:/foo%09bar' } ,
85
+ // newline
86
+ { path : 'C:\\foo\nbar' , fileURL : 'file:///C:/foo%0Abar' } ,
87
+ // carriage return
88
+ { path : 'C:\\foo\rbar' , fileURL : 'file:///C:/foo%0Dbar' } ,
89
+ // latin1
90
+ { path : 'C:\\fóóbàr' , fileURL : 'file:///C:/f%C3%B3%C3%B3b%C3%A0r' } ,
91
+ // Euro sign (BMP code point)
92
+ { path : 'C:\\€' , fileURL : 'file:///C:/%E2%82%AC' } ,
93
+ // Rocket emoji (non-BMP code point)
94
+ { path : 'C:\\🚀' , fileURL : 'file:///C:/%F0%9F%9A%80' } ,
95
+ // UNC path (see https://docs.microsoft.com/en-us/archive/blogs/ie/file-uris-in-windows)
96
+ { path : '\\\\nas\\My Docs\\File.doc' , fileURL : 'file://nas/My%20Docs/File.doc' } ,
97
+ ] ;
98
+ const posixTestCases = [
99
+ // Lowercase ascii alpha
100
+ { path : '/foo' , fileURL : 'file:///foo' } ,
101
+ // Uppercase ascii alpha
102
+ { path : '/FOO' , fileURL : 'file:///FOO' } ,
103
+ // dir
104
+ { path : '/dir/foo' , fileURL : 'file:///dir/foo' } ,
105
+ // trailing separator
106
+ { path : '/dir/' , fileURL : 'file:///dir/' } ,
107
+ // dot
108
+ { path : '/foo.mjs' , fileURL : 'file:///foo.mjs' } ,
109
+ // space
110
+ { path : '/foo bar' , fileURL : 'file:///foo%20bar' } ,
111
+ // question mark
112
+ { path : '/foo?bar' , fileURL : 'file:///foo%3Fbar' } ,
113
+ // number sign
114
+ { path : '/foo#bar' , fileURL : 'file:///foo%23bar' } ,
115
+ // ampersand
116
+ { path : '/foo&bar' , fileURL : 'file:///foo&bar' } ,
117
+ // equals
118
+ { path : '/foo=bar' , fileURL : 'file:///foo=bar' } ,
119
+ // colon
120
+ { path : '/foo:bar' , fileURL : 'file:///foo:bar' } ,
121
+ // semicolon
122
+ { path : '/foo;bar' , fileURL : 'file:///foo;bar' } ,
123
+ // percent
124
+ { path : '/foo%bar' , fileURL : 'file:///foo%25bar' } ,
125
+ // backslash
126
+ { path : '/foo\\bar' , fileURL : 'file:///foo%5Cbar' } ,
127
+ // backspace
128
+ { path : '/foo\bbar' , fileURL : 'file:///foo%08bar' } ,
129
+ // tab
130
+ { path : '/foo\tbar' , fileURL : 'file:///foo%09bar' } ,
131
+ // newline
132
+ { path : '/foo\nbar' , fileURL : 'file:///foo%0Abar' } ,
133
+ // carriage return
134
+ { path : '/foo\rbar' , fileURL : 'file:///foo%0Dbar' } ,
135
+ // latin1
136
+ { path : '/fóóbàr' , fileURL : 'file:///f%C3%B3%C3%B3b%C3%A0r' } ,
137
+ // Euro sign (BMP code point)
138
+ { path : '/€' , fileURL : 'file:///%E2%82%AC' } ,
139
+ // Rocket emoji (non-BMP code point)
140
+ { path : '/🚀' , fileURL : 'file:///%F0%9F%9A%80' } ,
141
+ ] ;
147
142
148
- for ( const { path, fileURL } of testCases ) {
149
- const fromString = url . fileURLToPath ( fileURL ) ;
150
- assert . strictEqual ( fromString , path ) ;
151
- const fromURL = url . fileURLToPath ( new URL ( fileURL ) ) ;
152
- assert . strictEqual ( fromURL , path ) ;
153
- }
143
+ for ( const { path, fileURL } of windowsTestCases ) {
144
+ const fromString = url . fileURLToPath ( fileURL , { windows : true } ) ;
145
+ assert . strictEqual ( fromString , path ) ;
146
+ const fromURL = url . fileURLToPath ( new URL ( fileURL ) ) ;
147
+ assert . strictEqual ( fromURL , path ) ;
148
+ }
149
+
150
+ for ( const { path, fileURL } of posixTestCases ) {
151
+ const fromString = url . fileURLToPath ( fileURL , { windows : false } ) ;
152
+ assert . strictEqual ( fromString , path ) ;
153
+ const fromURL = url . fileURLToPath ( new URL ( fileURL ) ) ;
154
+ assert . strictEqual ( fromURL , path ) ;
155
+ }
156
+
157
+ const defaultTestCases = isWindows ? windowsTestCases : posixTestCases ;
158
+
159
+ for ( const { path, fileURL } of defaultTestCases ) {
160
+ const fromString = url . fileURLToPath ( fileURL ) ;
161
+ assert . strictEqual ( fromString , path ) ;
162
+ const fromURL = url . fileURLToPath ( new URL ( fileURL ) ) ;
163
+ assert . strictEqual ( fromURL , path ) ;
154
164
}
0 commit comments