diff --git a/src/uu/more/src/more.rs b/src/uu/more/src/more.rs index 981b5f502..59e7d0faa 100644 --- a/src/uu/more/src/more.rs +++ b/src/uu/more/src/more.rs @@ -41,7 +41,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 { let matches = App::new(executable!()) .version(VERSION) - .usage(&usage[..]) + .usage(usage.as_str()) .about(ABOUT) .arg( Arg::with_name(options::FILE) @@ -52,10 +52,18 @@ pub fn uumain(args: impl uucore::Args) -> i32 { // FixME: fail without panic for now; but `more` should work with no arguments (ie, for piped input) if let None | Some("-") = matches.value_of(options::FILE) { - println!("{}: incorrect usage", executable!()); + show_usage_error!("Reading from stdin isn't supported yet."); return 1; } + if let Some(x) = matches.value_of(options::FILE) { + let path = std::path::Path::new(x); + if path.is_dir() { + show_usage_error!("'{}' is a directory.", x); + return 1; + } + } + more(matches); 0 diff --git a/tests/by-util/test_more.rs b/tests/by-util/test_more.rs index 3b7cfa9a8..736fb6956 100644 --- a/tests/by-util/test_more.rs +++ b/tests/by-util/test_more.rs @@ -6,3 +6,14 @@ fn test_more_no_arg() { let result = ucmd.run(); assert!(!result.success); } + +#[test] +fn test_more_dir_arg() { + let (_, mut ucmd) = at_and_ucmd!(); + ucmd.arg("."); + let result = ucmd.run(); + assert!(!result.success); + const EXPECTED_ERROR_MESSAGE: &str = + "more: '.' is a directory.\nTry 'more --help' for more information."; + assert_eq!(result.stderr.trim(), EXPECTED_ERROR_MESSAGE); +}