Skip to content

Commit f02d1bf

Browse files
committed
Add tests for dots in paths
1 parent 3aee169 commit f02d1bf

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

gix-path/src/relative_path.rs

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 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

Comments
 (0)