@@ -1248,19 +1248,35 @@ def test_is_reserved(self):
1248
1248
self .assertIs (False , P ('' ).is_reserved ())
1249
1249
self .assertIs (False , P ('/' ).is_reserved ())
1250
1250
self .assertIs (False , P ('/foo/bar' ).is_reserved ())
1251
+ # UNC paths are never reserved.
1252
+ self .assertIs (False , P ('//my/share/nul/con/aux' ).is_reserved ())
1253
+ # Case-insenstive DOS-device names are reserved.
1254
+ self .assertIs (True , P ('nul' ).is_reserved ())
1255
+ self .assertIs (True , P ('aux' ).is_reserved ())
1256
+ self .assertIs (True , P ('prn' ).is_reserved ())
1251
1257
self .assertIs (True , P ('con' ).is_reserved ())
1252
- self .assertIs (True , P ('NUL' ).is_reserved ())
1258
+ self .assertIs (True , P ('conin$' ).is_reserved ())
1259
+ self .assertIs (True , P ('conout$' ).is_reserved ())
1260
+ # COM/LPT + 1-9 or + superscript 1-3 are reserved.
1261
+ self .assertIs (True , P ('COM1' ).is_reserved ())
1262
+ self .assertIs (True , P ('LPT9' ).is_reserved ())
1263
+ self .assertIs (True , P ('com\xb9 ' ).is_reserved ())
1264
+ self .assertIs (True , P ('com\xb2 ' ).is_reserved ())
1265
+ self .assertIs (True , P ('lpt\xb3 ' ).is_reserved ())
1266
+ # DOS-device name mataching ignores characters after a dot or
1267
+ # a colon and also ignores trailing spaces.
1253
1268
self .assertIs (True , P ('NUL.txt' ).is_reserved ())
1254
- self .assertIs (True , P ('com1' ).is_reserved ())
1255
- self .assertIs (True , P ('com9.bar' ).is_reserved ())
1269
+ self .assertIs (True , P ('PRN ' ).is_reserved ())
1270
+ self .assertIs (True , P ('AUX .txt' ).is_reserved ())
1271
+ self .assertIs (True , P ('COM1:bar' ).is_reserved ())
1272
+ self .assertIs (True , P ('LPT9 :bar' ).is_reserved ())
1273
+ # DOS-device names are only matched at the beginning
1274
+ # of a path component.
1256
1275
self .assertIs (False , P ('bar.com9' ).is_reserved ())
1257
- self .assertIs (True , P ('lpt1' ).is_reserved ())
1258
- self .assertIs (True , P ('lpt9.bar' ).is_reserved ())
1259
1276
self .assertIs (False , P ('bar.lpt9' ).is_reserved ())
1260
- # Only the last component matters.
1277
+ # Only the last path component matters.
1278
+ self .assertIs (True , P ('c:/baz/con/NUL' ).is_reserved ())
1261
1279
self .assertIs (False , P ('c:/NUL/con/baz' ).is_reserved ())
1262
- # UNC paths are never reserved.
1263
- self .assertIs (False , P ('//my/share/nul/con/aux' ).is_reserved ())
1264
1280
1265
1281
class PurePathTest (_BasePurePathTest , unittest .TestCase ):
1266
1282
cls = pathlib .PurePath
0 commit comments