@@ -207,4 +207,108 @@ mod tests {
207
207
Err ( Error :: IsAbsolute )
208
208
) ) ;
209
209
}
210
+
211
+ #[ cfg( not( windows) ) ]
212
+ #[ test]
213
+ fn dots_in_paths_return_err ( ) {
214
+ let path_str: & str = "./heads" ;
215
+ let path_bstr: & BStr = path_str. into ( ) ;
216
+ let path_u8: & [ u8 ; 7 ] = b"./heads" ;
217
+ let path_bstring: BString = "./heads" . into ( ) ;
218
+
219
+ assert ! ( matches!(
220
+ TryInto :: <& RelativePath >:: try_into( path_str) ,
221
+ Err ( Error :: ContainsInvalidComponent ( _) )
222
+ ) ) ;
223
+ assert ! ( matches!(
224
+ TryInto :: <& RelativePath >:: try_into( path_bstr) ,
225
+ Err ( Error :: ContainsInvalidComponent ( _) )
226
+ ) ) ;
227
+ assert ! ( matches!(
228
+ TryInto :: <& RelativePath >:: try_into( path_u8) ,
229
+ Err ( Error :: ContainsInvalidComponent ( _) )
230
+ ) ) ;
231
+ assert ! ( matches!(
232
+ TryInto :: <& RelativePath >:: try_into( & path_bstring) ,
233
+ Err ( Error :: ContainsInvalidComponent ( _) )
234
+ ) ) ;
235
+ }
236
+
237
+ #[ cfg( windows) ]
238
+ #[ test]
239
+ fn dots_in_paths_return_err ( ) {
240
+ let path_str: & str = r".\heads" ;
241
+ let path_bstr: & BStr = path_str. into ( ) ;
242
+ let path_u8: & [ u8 ; 7 ] = b".\\ heads" ;
243
+ let path_bstring: BString = r".\heads" . into ( ) ;
244
+
245
+ assert ! ( matches!(
246
+ TryInto :: <& RelativePath >:: try_into( path_str) ,
247
+ Err ( Error :: ContainsInvalidComponent ( _) )
248
+ ) ) ;
249
+ assert ! ( matches!(
250
+ TryInto :: <& RelativePath >:: try_into( path_bstr) ,
251
+ Err ( Error :: ContainsInvalidComponent ( _) )
252
+ ) ) ;
253
+ assert ! ( matches!(
254
+ TryInto :: <& RelativePath >:: try_into( path_u8) ,
255
+ Err ( Error :: ContainsInvalidComponent ( _) )
256
+ ) ) ;
257
+ assert ! ( matches!(
258
+ TryInto :: <& RelativePath >:: try_into( & path_bstring) ,
259
+ Err ( Error :: ContainsInvalidComponent ( _) )
260
+ ) ) ;
261
+ }
262
+
263
+ #[ cfg( not( windows) ) ]
264
+ #[ test]
265
+ fn double_dots_in_paths_return_err ( ) {
266
+ let path_str: & str = "../heads" ;
267
+ let path_bstr: & BStr = path_str. into ( ) ;
268
+ let path_u8: & [ u8 ; 8 ] = b"../heads" ;
269
+ let path_bstring: BString = "../heads" . into ( ) ;
270
+
271
+ assert ! ( matches!(
272
+ TryInto :: <& RelativePath >:: try_into( path_str) ,
273
+ Err ( Error :: ContainsInvalidComponent ( _) )
274
+ ) ) ;
275
+ assert ! ( matches!(
276
+ TryInto :: <& RelativePath >:: try_into( path_bstr) ,
277
+ Err ( Error :: ContainsInvalidComponent ( _) )
278
+ ) ) ;
279
+ assert ! ( matches!(
280
+ TryInto :: <& RelativePath >:: try_into( path_u8) ,
281
+ Err ( Error :: ContainsInvalidComponent ( _) )
282
+ ) ) ;
283
+ assert ! ( matches!(
284
+ TryInto :: <& RelativePath >:: try_into( & path_bstring) ,
285
+ Err ( Error :: ContainsInvalidComponent ( _) )
286
+ ) ) ;
287
+ }
288
+
289
+ #[ cfg( windows) ]
290
+ #[ test]
291
+ fn dots_in_paths_return_err ( ) {
292
+ let path_str: & str = r"..\heads" ;
293
+ let path_bstr: & BStr = path_str. into ( ) ;
294
+ let path_u8: & [ u8 ; 8 ] = b"..\\ heads" ;
295
+ let path_bstring: BString = r"..\heads" . into ( ) ;
296
+
297
+ assert ! ( matches!(
298
+ TryInto :: <& RelativePath >:: try_into( path_str) ,
299
+ Err ( Error :: ContainsInvalidComponent ( _) )
300
+ ) ) ;
301
+ assert ! ( matches!(
302
+ TryInto :: <& RelativePath >:: try_into( path_bstr) ,
303
+ Err ( Error :: ContainsInvalidComponent ( _) )
304
+ ) ) ;
305
+ assert ! ( matches!(
306
+ TryInto :: <& RelativePath >:: try_into( path_u8) ,
307
+ Err ( Error :: ContainsInvalidComponent ( _) )
308
+ ) ) ;
309
+ assert ! ( matches!(
310
+ TryInto :: <& RelativePath >:: try_into( & path_bstring) ,
311
+ Err ( Error :: ContainsInvalidComponent ( _) )
312
+ ) ) ;
313
+ }
210
314
}
0 commit comments