diff --git a/Makefile b/Makefile index 8f8e68a9b..e382b534a 100644 --- a/Makefile +++ b/Makefile @@ -161,16 +161,21 @@ TEST_PROGS := \ cat \ cp \ env \ + dirname \ + echo \ factor \ + false \ fold \ mkdir \ mv \ nl \ paste \ + pwd \ seq \ sort \ test \ tr \ + true \ truncate \ unexpand diff --git a/test/dirname.rs b/test/dirname.rs new file mode 100644 index 000000000..f0309ce9e --- /dev/null +++ b/test/dirname.rs @@ -0,0 +1,28 @@ +use std::process::Command; +use std::str; + +static PROGNAME: &'static str = "./dirname"; + +#[test] +fn test_path_with_trailing_slashes() { + let dir = "/root/alpha/beta/gamma/delta/epsilon/omega//"; + let po = Command::new(PROGNAME) + .arg(dir) + .output() + .unwrap_or_else(|err| panic!("{}", err)); + + let out = str::from_utf8(&po.stdout[..]).unwrap().trim_right(); + assert_eq!(out, "/root/alpha/beta/gamma/delta/epsilon"); +} + +#[test] +fn test_path_without_trailing_slashes() { + let dir = "/root/alpha/beta/gamma/delta/epsilon/omega"; + let po = Command::new(PROGNAME) + .arg(dir) + .output() + .unwrap_or_else(|err| panic!("{}", err)); + + let out = str::from_utf8(&po.stdout[..]).unwrap().trim_right(); + assert_eq!(out, "/root/alpha/beta/gamma/delta/epsilon"); +} diff --git a/test/echo.rs b/test/echo.rs new file mode 100644 index 000000000..b107fd4c4 --- /dev/null +++ b/test/echo.rs @@ -0,0 +1,50 @@ +use std::process::Command; +use std::str; + +static PROGNAME: &'static str = "./echo"; + +#[test] +fn test_default() { + let po = Command::new(PROGNAME) + .output() + .unwrap_or_else(|err| panic!("{}", err)); + + let out = str::from_utf8(&po.stdout[..]).unwrap(); + assert_eq!(out, "\n"); +} + +#[test] +fn test_no_trailing_newline() { + let po = Command::new(PROGNAME) + .arg("-n") + .arg("hello_world") + .output() + .unwrap_or_else(|err| panic!("{}", err)); + + let out = str::from_utf8(&po.stdout[..]).unwrap(); + assert_eq!(out, "hello_world"); +} + +#[test] +fn test_enable_escapes() { + let po = Command::new(PROGNAME) + .arg("-e") + .arg("\\\\\\t\\r") + .output() + .unwrap_or_else(|err| panic!("{}", err)); + + let out = str::from_utf8(&po.stdout[..]).unwrap(); + assert_eq!(out, "\\\t\r\n"); +} + +#[test] +fn test_disable_escapes() { + let po = Command::new(PROGNAME) + .arg("-E") + .arg("\\b\\c\\e") + .output() + .unwrap_or_else(|err| panic!("{}", err)); + + let out = str::from_utf8(&po.stdout[..]).unwrap(); + assert_eq!(out, "\\b\\c\\e\n"); +} diff --git a/test/false.rs b/test/false.rs new file mode 100644 index 000000000..2cd6a327d --- /dev/null +++ b/test/false.rs @@ -0,0 +1,9 @@ +use std::process::Command; + +static PROGNAME: &'static str = "./false"; + +#[test] +fn test_exit_code() { + let exit_status = Command::new(PROGNAME).status().unwrap().success(); + assert_eq!(exit_status, false); +} diff --git a/test/pwd.rs b/test/pwd.rs new file mode 100644 index 000000000..0800b3ae4 --- /dev/null +++ b/test/pwd.rs @@ -0,0 +1,16 @@ +use std::env; +use std::process::Command; +use std::str; + +static PROGNAME: &'static str = "./pwd"; + +#[test] +fn test_default() { + let po = Command::new(PROGNAME) + .output() + .unwrap_or_else(|err| panic!("{}", err)); + + let out = str::from_utf8(&po.stdout[..]).unwrap().trim_right(); + let expected = env::current_dir().unwrap().into_os_string().into_string().unwrap(); + assert_eq!(out, expected); +} diff --git a/test/true.rs b/test/true.rs new file mode 100644 index 000000000..fba9fff36 --- /dev/null +++ b/test/true.rs @@ -0,0 +1,9 @@ +use std::process::Command; + +static PROGNAME: &'static str = "./true"; + +#[test] +fn test_exit_code() { + let exit_status = Command::new(PROGNAME).status().unwrap().success(); + assert_eq!(exit_status, true); +}