aboutsummaryrefslogtreecommitdiff
path: root/tests/cli.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cli.rs')
-rw-r--r--tests/cli.rs52
1 files changed, 47 insertions, 5 deletions
diff --git a/tests/cli.rs b/tests/cli.rs
index 09e42e9..2d32e4d 100644
--- a/tests/cli.rs
+++ b/tests/cli.rs
@@ -1,24 +1,66 @@
use std::process::Command; // Run programs
use assert_cmd::prelude::*; // Add methods on commands
use predicates::prelude::*; // Used for writing assertions
+use assert_cmd::assert::Assert;
+#[cfg(unix)]
+use std::os::unix::process::ExitStatusExt;
+use std::process::ExitStatus;
+
+pub trait Success2 {
+ // Our own function with better reporting of errors
+ fn success2(self) -> Self;
+}
+
+#[cfg(unix)]
+fn get_signal(status: ExitStatus) -> Option<i32> {
+ status.signal()
+}
+
+#[cfg(not(unix))]
+fn get_signal(_status: ExitStatus) -> Option<i32> {
+ None
+}
+
+impl Success2 for Assert {
+ fn success2(self) -> Self {
+ if !self.get_output().status.success() {
+ let output = self.get_output();
+ let code = output.status.code();
+ println!("status: {}", output.status);
+ println!("stdout: {}", String::from_utf8_lossy(&output.stdout));
+ println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
+ if cfg!(unix) {
+ if code.is_none() {
+ let signal = get_signal(output.status).unwrap();
+ panic!("INTERRUPTED with signal: {}", signal);
+ }
+ }
+ let actual_code = code.unwrap();
+ println!("code: {}", actual_code);
+ panic!("Non zero exit code");
+ }
+ self
+ }
+}
#[test]
fn test_help() {
let mut cmd = Command::cargo_bin("fpm").unwrap();
cmd.arg("--help");
cmd.assert()
- .success()
+ .success2()
.stdout(
predicate::str::contains("--help Prints help information"));
}
+
#[test]
fn test_1() {
let mut build = Command::cargo_bin("fpm").unwrap();
build.arg("build")
.current_dir("tests/1");
build.assert()
- .success()
+ .success2()
.stdout(predicate::str::contains("Built target p1")
.and(predicate::str::contains("TEST1 OK").not()));
@@ -26,7 +68,7 @@ fn test_1() {
run.arg("run")
.current_dir("tests/1");
run.assert()
- .success()
+ .success2()
.stdout(predicate::str::contains("TEST1 OK"));
}
@@ -36,7 +78,7 @@ fn test_2() {
build.arg("build")
.current_dir("tests/2");
build.assert()
- .success()
+ .success2()
.stdout(predicate::str::contains("Built target p1")
.and(predicate::str::contains("TEST2 OK").not()));
@@ -44,6 +86,6 @@ fn test_2() {
run.arg("run")
.current_dir("tests/2");
run.assert()
- .success()
+ .success2()
.stdout(predicate::str::contains("TEST2 OK"));
}