@@ -640,13 +640,29 @@ def test_relative_to_common(self):
640
640
self .assertEqual (p .relative_to ('a/' ), P ('b' ))
641
641
self .assertEqual (p .relative_to (P ('a/b' )), P ())
642
642
self .assertEqual (p .relative_to ('a/b' ), P ())
643
+ self .assertEqual (p .relative_to (P (), walk_up = True ), P ('a/b' ))
644
+ self .assertEqual (p .relative_to ('' , walk_up = True ), P ('a/b' ))
645
+ self .assertEqual (p .relative_to (P ('a' ), walk_up = True ), P ('b' ))
646
+ self .assertEqual (p .relative_to ('a' , walk_up = True ), P ('b' ))
647
+ self .assertEqual (p .relative_to ('a/' , walk_up = True ), P ('b' ))
648
+ self .assertEqual (p .relative_to (P ('a/b' ), walk_up = True ), P ())
649
+ self .assertEqual (p .relative_to ('a/b' , walk_up = True ), P ())
650
+ self .assertEqual (p .relative_to (P ('a/c' ), walk_up = True ), P ('../b' ))
651
+ self .assertEqual (p .relative_to ('a/c' , walk_up = True ), P ('../b' ))
652
+ self .assertEqual (p .relative_to (P ('a/b/c' ), walk_up = True ), P ('..' ))
653
+ self .assertEqual (p .relative_to ('a/b/c' , walk_up = True ), P ('..' ))
654
+ self .assertEqual (p .relative_to (P ('c' ), walk_up = True ), P ('../a/b' ))
655
+ self .assertEqual (p .relative_to ('c' , walk_up = True ), P ('../a/b' ))
643
656
# With several args.
644
657
self .assertEqual (p .relative_to ('a' , 'b' ), P ())
658
+ self .assertEqual (p .relative_to ('a' , 'b' , walk_up = True ), P ())
645
659
# Unrelated paths.
646
660
self .assertRaises (ValueError , p .relative_to , P ('c' ))
647
661
self .assertRaises (ValueError , p .relative_to , P ('a/b/c' ))
648
662
self .assertRaises (ValueError , p .relative_to , P ('a/c' ))
649
663
self .assertRaises (ValueError , p .relative_to , P ('/a' ))
664
+ self .assertRaises (ValueError , p .relative_to , P ('/' ), walk_up = True )
665
+ self .assertRaises (ValueError , p .relative_to , P ('/a' ), walk_up = True )
650
666
p = P ('/a/b' )
651
667
self .assertEqual (p .relative_to (P ('/' )), P ('a/b' ))
652
668
self .assertEqual (p .relative_to ('/' ), P ('a/b' ))
@@ -655,13 +671,28 @@ def test_relative_to_common(self):
655
671
self .assertEqual (p .relative_to ('/a/' ), P ('b' ))
656
672
self .assertEqual (p .relative_to (P ('/a/b' )), P ())
657
673
self .assertEqual (p .relative_to ('/a/b' ), P ())
674
+ self .assertEqual (p .relative_to (P ('/' ), walk_up = True ), P ('a/b' ))
675
+ self .assertEqual (p .relative_to ('/' , walk_up = True ), P ('a/b' ))
676
+ self .assertEqual (p .relative_to (P ('/a' ), walk_up = True ), P ('b' ))
677
+ self .assertEqual (p .relative_to ('/a' , walk_up = True ), P ('b' ))
678
+ self .assertEqual (p .relative_to ('/a/' , walk_up = True ), P ('b' ))
679
+ self .assertEqual (p .relative_to (P ('/a/b' ), walk_up = True ), P ())
680
+ self .assertEqual (p .relative_to ('/a/b' , walk_up = True ), P ())
681
+ self .assertEqual (p .relative_to (P ('/a/c' ), walk_up = True ), P ('../b' ))
682
+ self .assertEqual (p .relative_to ('/a/c' , walk_up = True ), P ('../b' ))
683
+ self .assertEqual (p .relative_to (P ('/a/b/c' ), walk_up = True ), P ('..' ))
684
+ self .assertEqual (p .relative_to ('/a/b/c' , walk_up = True ), P ('..' ))
685
+ self .assertEqual (p .relative_to (P ('/c' ), walk_up = True ), P ('../a/b' ))
686
+ self .assertEqual (p .relative_to ('/c' , walk_up = True ), P ('../a/b' ))
658
687
# Unrelated paths.
659
688
self .assertRaises (ValueError , p .relative_to , P ('/c' ))
660
689
self .assertRaises (ValueError , p .relative_to , P ('/a/b/c' ))
661
690
self .assertRaises (ValueError , p .relative_to , P ('/a/c' ))
662
691
self .assertRaises (ValueError , p .relative_to , P ())
663
692
self .assertRaises (ValueError , p .relative_to , '' )
664
693
self .assertRaises (ValueError , p .relative_to , P ('a' ))
694
+ self .assertRaises (ValueError , p .relative_to , P ('' ), walk_up = True )
695
+ self .assertRaises (ValueError , p .relative_to , P ('a' ), walk_up = True )
665
696
666
697
def test_is_relative_to_common (self ):
667
698
P = self .cls
@@ -1124,6 +1155,16 @@ def test_relative_to(self):
1124
1155
self .assertEqual (p .relative_to ('c:foO/' ), P ('Bar' ))
1125
1156
self .assertEqual (p .relative_to (P ('c:foO/baR' )), P ())
1126
1157
self .assertEqual (p .relative_to ('c:foO/baR' ), P ())
1158
+ self .assertEqual (p .relative_to (P ('c:' ), walk_up = True ), P ('Foo/Bar' ))
1159
+ self .assertEqual (p .relative_to ('c:' , walk_up = True ), P ('Foo/Bar' ))
1160
+ self .assertEqual (p .relative_to (P ('c:foO' ), walk_up = True ), P ('Bar' ))
1161
+ self .assertEqual (p .relative_to ('c:foO' , walk_up = True ), P ('Bar' ))
1162
+ self .assertEqual (p .relative_to ('c:foO/' , walk_up = True ), P ('Bar' ))
1163
+ self .assertEqual (p .relative_to (P ('c:foO/baR' ), walk_up = True ), P ())
1164
+ self .assertEqual (p .relative_to ('c:foO/baR' , walk_up = True ), P ())
1165
+ self .assertEqual (p .relative_to (P ('C:Foo/Bar/Baz' ), walk_up = True ), P ('..' ))
1166
+ self .assertEqual (p .relative_to (P ('C:Foo/Baz' ), walk_up = True ), P ('../Bar' ))
1167
+ self .assertEqual (p .relative_to (P ('C:Baz/Bar' ), walk_up = True ), P ('../../Foo/Bar' ))
1127
1168
# Unrelated paths.
1128
1169
self .assertRaises (ValueError , p .relative_to , P ())
1129
1170
self .assertRaises (ValueError , p .relative_to , '' )
@@ -1134,6 +1175,13 @@ def test_relative_to(self):
1134
1175
self .assertRaises (ValueError , p .relative_to , P ('C:/Foo' ))
1135
1176
self .assertRaises (ValueError , p .relative_to , P ('C:Foo/Bar/Baz' ))
1136
1177
self .assertRaises (ValueError , p .relative_to , P ('C:Foo/Baz' ))
1178
+ self .assertRaises (ValueError , p .relative_to , P (), walk_up = True )
1179
+ self .assertRaises (ValueError , p .relative_to , '' , walk_up = True )
1180
+ self .assertRaises (ValueError , p .relative_to , P ('d:' ), walk_up = True )
1181
+ self .assertRaises (ValueError , p .relative_to , P ('/' ), walk_up = True )
1182
+ self .assertRaises (ValueError , p .relative_to , P ('Foo' ), walk_up = True )
1183
+ self .assertRaises (ValueError , p .relative_to , P ('/Foo' ), walk_up = True )
1184
+ self .assertRaises (ValueError , p .relative_to , P ('C:/Foo' ), walk_up = True )
1137
1185
p = P ('C:/Foo/Bar' )
1138
1186
self .assertEqual (p .relative_to (P ('c:' )), P ('/Foo/Bar' ))
1139
1187
self .assertEqual (p .relative_to ('c:' ), P ('/Foo/Bar' ))
@@ -1146,6 +1194,20 @@ def test_relative_to(self):
1146
1194
self .assertEqual (p .relative_to ('c:/foO/' ), P ('Bar' ))
1147
1195
self .assertEqual (p .relative_to (P ('c:/foO/baR' )), P ())
1148
1196
self .assertEqual (p .relative_to ('c:/foO/baR' ), P ())
1197
+ self .assertEqual (p .relative_to (P ('c:' ), walk_up = True ), P ('/Foo/Bar' ))
1198
+ self .assertEqual (p .relative_to ('c:' , walk_up = True ), P ('/Foo/Bar' ))
1199
+ self .assertEqual (str (p .relative_to (P ('c:' ), walk_up = True )), '\\ Foo\\ Bar' )
1200
+ self .assertEqual (str (p .relative_to ('c:' , walk_up = True )), '\\ Foo\\ Bar' )
1201
+ self .assertEqual (p .relative_to (P ('c:/' ), walk_up = True ), P ('Foo/Bar' ))
1202
+ self .assertEqual (p .relative_to ('c:/' , walk_up = True ), P ('Foo/Bar' ))
1203
+ self .assertEqual (p .relative_to (P ('c:/foO' ), walk_up = True ), P ('Bar' ))
1204
+ self .assertEqual (p .relative_to ('c:/foO' , walk_up = True ), P ('Bar' ))
1205
+ self .assertEqual (p .relative_to ('c:/foO/' , walk_up = True ), P ('Bar' ))
1206
+ self .assertEqual (p .relative_to (P ('c:/foO/baR' ), walk_up = True ), P ())
1207
+ self .assertEqual (p .relative_to ('c:/foO/baR' , walk_up = True ), P ())
1208
+ self .assertEqual (p .relative_to ('C:/Baz' , walk_up = True ), P ('../Foo/Bar' ))
1209
+ self .assertEqual (p .relative_to ('C:/Foo/Bar/Baz' , walk_up = True ), P ('..' ))
1210
+ self .assertEqual (p .relative_to ('C:/Foo/Baz' , walk_up = True ), P ('../Bar' ))
1149
1211
# Unrelated paths.
1150
1212
self .assertRaises (ValueError , p .relative_to , P ('C:/Baz' ))
1151
1213
self .assertRaises (ValueError , p .relative_to , P ('C:/Foo/Bar/Baz' ))
@@ -1156,6 +1218,12 @@ def test_relative_to(self):
1156
1218
self .assertRaises (ValueError , p .relative_to , P ('/' ))
1157
1219
self .assertRaises (ValueError , p .relative_to , P ('/Foo' ))
1158
1220
self .assertRaises (ValueError , p .relative_to , P ('//C/Foo' ))
1221
+ self .assertRaises (ValueError , p .relative_to , P ('C:Foo' ), walk_up = True )
1222
+ self .assertRaises (ValueError , p .relative_to , P ('d:' ), walk_up = True )
1223
+ self .assertRaises (ValueError , p .relative_to , P ('d:/' ), walk_up = True )
1224
+ self .assertRaises (ValueError , p .relative_to , P ('/' ), walk_up = True )
1225
+ self .assertRaises (ValueError , p .relative_to , P ('/Foo' ), walk_up = True )
1226
+ self .assertRaises (ValueError , p .relative_to , P ('//C/Foo' ), walk_up = True )
1159
1227
# UNC paths.
1160
1228
p = P ('//Server/Share/Foo/Bar' )
1161
1229
self .assertEqual (p .relative_to (P ('//sErver/sHare' )), P ('Foo/Bar' ))
@@ -1166,11 +1234,25 @@ def test_relative_to(self):
1166
1234
self .assertEqual (p .relative_to ('//sErver/sHare/Foo/' ), P ('Bar' ))
1167
1235
self .assertEqual (p .relative_to (P ('//sErver/sHare/Foo/Bar' )), P ())
1168
1236
self .assertEqual (p .relative_to ('//sErver/sHare/Foo/Bar' ), P ())
1237
+ self .assertEqual (p .relative_to (P ('//sErver/sHare' ), walk_up = True ), P ('Foo/Bar' ))
1238
+ self .assertEqual (p .relative_to ('//sErver/sHare' , walk_up = True ), P ('Foo/Bar' ))
1239
+ self .assertEqual (p .relative_to ('//sErver/sHare/' , walk_up = True ), P ('Foo/Bar' ))
1240
+ self .assertEqual (p .relative_to (P ('//sErver/sHare/Foo' ), walk_up = True ), P ('Bar' ))
1241
+ self .assertEqual (p .relative_to ('//sErver/sHare/Foo' , walk_up = True ), P ('Bar' ))
1242
+ self .assertEqual (p .relative_to ('//sErver/sHare/Foo/' , walk_up = True ), P ('Bar' ))
1243
+ self .assertEqual (p .relative_to (P ('//sErver/sHare/Foo/Bar' ), walk_up = True ), P ())
1244
+ self .assertEqual (p .relative_to ('//sErver/sHare/Foo/Bar' , walk_up = True ), P ())
1245
+ self .assertEqual (p .relative_to (P ('//sErver/sHare/bar' ), walk_up = True ), P ('../Foo/Bar' ))
1246
+ self .assertEqual (p .relative_to ('//sErver/sHare/bar' , walk_up = True ), P ('../Foo/Bar' ))
1169
1247
# Unrelated paths.
1170
1248
self .assertRaises (ValueError , p .relative_to , P ('/Server/Share/Foo' ))
1171
1249
self .assertRaises (ValueError , p .relative_to , P ('c:/Server/Share/Foo' ))
1172
1250
self .assertRaises (ValueError , p .relative_to , P ('//z/Share/Foo' ))
1173
1251
self .assertRaises (ValueError , p .relative_to , P ('//Server/z/Foo' ))
1252
+ self .assertRaises (ValueError , p .relative_to , P ('/Server/Share/Foo' ), walk_up = True )
1253
+ self .assertRaises (ValueError , p .relative_to , P ('c:/Server/Share/Foo' ), walk_up = True )
1254
+ self .assertRaises (ValueError , p .relative_to , P ('//z/Share/Foo' ), walk_up = True )
1255
+ self .assertRaises (ValueError , p .relative_to , P ('//Server/z/Foo' ), walk_up = True )
1174
1256
1175
1257
def test_is_relative_to (self ):
1176
1258
P = self .cls
0 commit comments