Skip to content

Commit

Permalink
nl: show error if --number-width is zero
Browse files Browse the repository at this point in the history
Co-authored-by: Sylvestre Ledru <[email protected]>
  • Loading branch information
cakebaker and sylvestre committed Jul 11, 2023
1 parent 8e8b825 commit 826adc6
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 12 deletions.
15 changes: 5 additions & 10 deletions src/uu/nl/src/helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,17 +94,12 @@ pub fn parse_options(settings: &mut crate::Settings, opts: &clap::ArgMatches) ->
}
}
}
match opts.get_one::<String>(options::NUMBER_WIDTH) {
match opts.get_one::<usize>(options::NUMBER_WIDTH) {
None => {}
Some(val) => {
let conv: Option<usize> = val.parse().ok();
match conv {
None => {
errs.push(String::from("Illegal value for -w"));
}
Some(num) => settings.number_width = num,
}
}
Some(num) if *num > 0 => settings.number_width = *num,
Some(_) => errs.push(String::from(
"Invalid line number field width: ‘0’: Numerical result out of range",
)),
}
match opts.get_one::<String>(options::STARTING_LINE_NUMBER) {
None => {}
Expand Down
3 changes: 2 additions & 1 deletion src/uu/nl/src/nl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,8 @@ pub fn uu_app() -> Command {
.short('w')
.long(options::NUMBER_WIDTH)
.help("use NUMBER columns for line numbers")
.value_name("NUMBER"),
.value_name("NUMBER")
.value_parser(clap::value_parser!(usize)),
)
}

Expand Down
36 changes: 35 additions & 1 deletion tests/by-util/test_nl.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// spell-checker:ignore ninvalid
// spell-checker:ignore ninvalid winvalid
use crate::common::util::TestScenario;

#[test]
Expand Down Expand Up @@ -122,3 +122,37 @@ fn test_invalid_number_format() {
.stderr_contains("invalid value 'invalid'");
}
}

#[test]
fn test_number_width() {
for width in 1..10 {
for arg in [format!("-w{width}"), format!("--number-width={width}")] {
let spaces = " ".repeat(width - 1);
new_ucmd!()
.arg(arg)
.pipe_in("test")
.succeeds()
.stdout_is(format!("{spaces}1\ttest\n"));
}
}
}

#[test]
fn test_number_width_zero() {
for arg in ["-w0", "--number-width=0"] {
new_ucmd!()
.arg(arg)
.fails()
.stderr_contains("Invalid line number field width: ‘0’: Numerical result out of range");
}
}

#[test]
fn test_invalid_number_width() {
for arg in ["-winvalid", "--number-width=invalid"] {
new_ucmd!()
.arg(arg)
.fails()
.stderr_contains("invalid value 'invalid'");
}
}

0 comments on commit 826adc6

Please sign in to comment.