@@ -207,4 +207,108 @@ mod tests {
207207 Err ( Error :: IsAbsolute )
208208 ) ) ;
209209 }
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 double_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+ }
210314}
0 commit comments