diff --git a/src/params.rs b/src/params.rs index 74ef3e3..239ebca 100644 --- a/src/params.rs +++ b/src/params.rs @@ -60,7 +60,7 @@ pub fn parse_params>(mut opts: Peekable) -> Resu let mut format = None; let mut context = None; let tabsize_re = Regex::new(r"^--tabsize=(?\d+)$").unwrap(); - let width_re = Regex::new(r"--width=(?P\d+)$").unwrap(); + let width_re = Regex::new(r"^--width=(?P\d+)$").unwrap(); while let Some(param) = opts.next() { let next_param = opts.peek(); if param == "--" { @@ -813,6 +813,56 @@ mod tests { .is_err()); } #[test] + fn width() { + assert_eq!( + Ok(Params { + executable: os("diff"), + from: os("foo"), + to: os("bar"), + width: 100, + ..Default::default() + }), + parse_params( + [os("diff"), os("--width=100"), os("foo"), os("bar")] + .iter() + .cloned() + .peekable() + ) + ); + } + #[test] + fn width_suffix_is_an_operand() { + assert_eq!( + Ok(Params { + executable: os("diff"), + from: os("xyz--width=5"), + to: os("foo"), + ..Default::default() + }), + parse_params( + [os("diff"), os("xyz--width=5"), os("foo")] + .iter() + .cloned() + .peekable() + ) + ); + } + #[cfg(unix)] + #[test] + fn width_non_utf8_is_not_an_option() { + use std::os::unix::ffi::OsStringExt; + // used to panic in into_string().unwrap() + let bad = OsString::from_vec(b"\xff--width=5".to_vec()); + let params = parse_params( + [os("diff"), bad.clone(), os("foo")] + .iter() + .cloned() + .peekable(), + ) + .unwrap(); + assert_eq!(params.from, bad); + } + #[test] fn double_dash() { assert_eq!( Ok(Params {