@@ -1282,19 +1282,35 @@ def test_is_reserved(self):
1282
1282
self .assertIs (False , P ('' ).is_reserved ())
1283
1283
self .assertIs (False , P ('/' ).is_reserved ())
1284
1284
self .assertIs (False , P ('/foo/bar' ).is_reserved ())
1285
+ # UNC paths are never reserved.
1286
+ self .assertIs (False , P ('//my/share/nul/con/aux' ).is_reserved ())
1287
+ # Case-insenstive DOS-device names are reserved.
1288
+ self .assertIs (True , P ('nul' ).is_reserved ())
1289
+ self .assertIs (True , P ('aux' ).is_reserved ())
1290
+ self .assertIs (True , P ('prn' ).is_reserved ())
1285
1291
self .assertIs (True , P ('con' ).is_reserved ())
1286
- self .assertIs (True , P ('NUL' ).is_reserved ())
1292
+ self .assertIs (True , P ('conin$' ).is_reserved ())
1293
+ self .assertIs (True , P ('conout$' ).is_reserved ())
1294
+ # COM/LPT + 1-9 or + superscript 1-3 are reserved.
1295
+ self .assertIs (True , P ('COM1' ).is_reserved ())
1296
+ self .assertIs (True , P ('LPT9' ).is_reserved ())
1297
+ self .assertIs (True , P ('com\xb9 ' ).is_reserved ())
1298
+ self .assertIs (True , P ('com\xb2 ' ).is_reserved ())
1299
+ self .assertIs (True , P ('lpt\xb3 ' ).is_reserved ())
1300
+ # DOS-device name mataching ignores characters after a dot or
1301
+ # a colon and also ignores trailing spaces.
1287
1302
self .assertIs (True , P ('NUL.txt' ).is_reserved ())
1288
- self .assertIs (True , P ('com1' ).is_reserved ())
1289
- self .assertIs (True , P ('com9.bar' ).is_reserved ())
1303
+ self .assertIs (True , P ('PRN ' ).is_reserved ())
1304
+ self .assertIs (True , P ('AUX .txt' ).is_reserved ())
1305
+ self .assertIs (True , P ('COM1:bar' ).is_reserved ())
1306
+ self .assertIs (True , P ('LPT9 :bar' ).is_reserved ())
1307
+ # DOS-device names are only matched at the beginning
1308
+ # of a path component.
1290
1309
self .assertIs (False , P ('bar.com9' ).is_reserved ())
1291
- self .assertIs (True , P ('lpt1' ).is_reserved ())
1292
- self .assertIs (True , P ('lpt9.bar' ).is_reserved ())
1293
1310
self .assertIs (False , P ('bar.lpt9' ).is_reserved ())
1294
- # Only the last component matters.
1311
+ # Only the last path component matters.
1312
+ self .assertIs (True , P ('c:/baz/con/NUL' ).is_reserved ())
1295
1313
self .assertIs (False , P ('c:/NUL/con/baz' ).is_reserved ())
1296
- # UNC paths are never reserved.
1297
- self .assertIs (False , P ('//my/share/nul/con/aux' ).is_reserved ())
1298
1314
1299
1315
class PurePathTest (_BasePurePathTest , unittest .TestCase ):
1300
1316
cls = pathlib .PurePath
0 commit comments