@@ -340,13 +340,39 @@ final class URLTests : XCTestCase {
340
340
341
341
#if os(Windows)
342
342
func testURLWindowsDriveLetterPath( ) throws {
343
- let url = URL ( filePath: " C: \\ test \\ path " , directoryHint: . notDirectory)
343
+ var url = URL ( filePath: # "C:\test\path"# , directoryHint: . notDirectory)
344
344
// .absoluteString and .path() use the RFC 8089 URL path
345
345
XCTAssertEqual ( url. absoluteString, " file:///C:/test/path " )
346
346
XCTAssertEqual ( url. path ( ) , " /C:/test/path " )
347
347
// .path and .fileSystemPath strip the leading slash
348
348
XCTAssertEqual ( url. path, " C:/test/path " )
349
349
XCTAssertEqual ( url. fileSystemPath, " C:/test/path " )
350
+
351
+ url = URL ( filePath: #"C:\"# , directoryHint: . isDirectory)
352
+ XCTAssertEqual ( url. absoluteString, " file:///C:/ " )
353
+ XCTAssertEqual ( url. path ( ) , " /C:/ " )
354
+ XCTAssertEqual ( url. path, " C:/ " )
355
+ XCTAssertEqual ( url. fileSystemPath, " C:/ " )
356
+
357
+ url = URL ( filePath: #"C:\\\"# , directoryHint: . isDirectory)
358
+ XCTAssertEqual ( url. absoluteString, " file:///C:/// " )
359
+ XCTAssertEqual ( url. path ( ) , " /C:/// " )
360
+ XCTAssertEqual ( url. path, " C:/ " )
361
+ XCTAssertEqual ( url. fileSystemPath, " C:/ " )
362
+
363
+ url = URL ( filePath: #"\C:\"# , directoryHint: . isDirectory)
364
+ XCTAssertEqual ( url. absoluteString, " file:///C:/ " )
365
+ XCTAssertEqual ( url. path ( ) , " /C:/ " )
366
+ XCTAssertEqual ( url. path, " C:/ " )
367
+ XCTAssertEqual ( url. fileSystemPath, " C:/ " )
368
+
369
+ let base = URL ( filePath: #"\d:\path\"# , directoryHint: . isDirectory)
370
+ url = URL ( filePath: #"%43:\fake\letter"# , directoryHint: . notDirectory, relativeTo: base)
371
+ // ":" is encoded to "%3A" in the first path segment so it's not mistaken as the scheme separator
372
+ XCTAssertEqual ( url. relativeString, " %2543%3A/fake/letter " )
373
+ XCTAssertEqual ( url. path ( ) , " /d:/path/%2543%3A/fake/letter " )
374
+ XCTAssertEqual ( url. path, " d:/path/%43:/fake/letter " )
375
+ XCTAssertEqual ( url. fileSystemPath, " d:/path/%43:/fake/letter " )
350
376
}
351
377
#endif
352
378
0 commit comments