summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlyn <819880950@qq.com>2019-03-20 21:05:45 +0100
committerlyn <819880950@qq.com>2019-03-20 21:05:45 +0100
commitf43cb124f6163216218fe397d78b00e2d3bda84c (patch)
tree06a6c5c4c7af2839c9f15ac5e1ddfde4e28e817b
parent11875aed6e6940231b711470c9a8d731a7ba6aa1 (diff)
add tests
-rw-r--r--Cargo.toml7
-rw-r--r--src/util.rs7
-rw-r--r--tests/fixture/compNoExercise.rs2
-rw-r--r--tests/fixture/compSuccess.rs2
-rw-r--r--tests/fixture/info.toml7
-rw-r--r--tests/fixture/testSuccess.rs4
-rw-r--r--tests/integration_tests.rs61
7 files changed, 90 insertions, 0 deletions
diff --git a/Cargo.toml b/Cargo.toml
index d742f0e..868376a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,3 +11,10 @@ console = "0.6.2"
syntect = "3.0.2"
notify = "4.0.0"
toml = "0.4.10"
+
+[[bin]]
+name = "rustlings"
+path = "src/main.rs"
+
+[dev-dependencies]
+assert_cmd = "0.11.0"
diff --git a/src/util.rs b/src/util.rs
index 37a2028..4a96ee9 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -3,3 +3,10 @@ use std::fs::remove_file;
pub fn clean() {
let _ignored = remove_file("temp");
}
+
+#[test]
+fn test_clean() {
+ std::fs::File::create("temp").unwrap();
+ clean();
+ assert!(!std::path::Path::new("temp").exists());
+}
diff --git a/tests/fixture/compNoExercise.rs b/tests/fixture/compNoExercise.rs
new file mode 100644
index 0000000..f79c691
--- /dev/null
+++ b/tests/fixture/compNoExercise.rs
@@ -0,0 +1,2 @@
+fn main() {
+}
diff --git a/tests/fixture/compSuccess.rs b/tests/fixture/compSuccess.rs
new file mode 100644
index 0000000..f79c691
--- /dev/null
+++ b/tests/fixture/compSuccess.rs
@@ -0,0 +1,2 @@
+fn main() {
+}
diff --git a/tests/fixture/info.toml b/tests/fixture/info.toml
new file mode 100644
index 0000000..e255db9
--- /dev/null
+++ b/tests/fixture/info.toml
@@ -0,0 +1,7 @@
+[[exercises]]
+path = "compSuccess.rs"
+mode = "compile"
+
+[[exercises]]
+path = "testSuccess.rs"
+mode = "test" \ No newline at end of file
diff --git a/tests/fixture/testSuccess.rs b/tests/fixture/testSuccess.rs
new file mode 100644
index 0000000..589057c
--- /dev/null
+++ b/tests/fixture/testSuccess.rs
@@ -0,0 +1,4 @@
+#[test]
+fn passing() {
+ assert!(true);
+}
diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs
new file mode 100644
index 0000000..bd5d92e
--- /dev/null
+++ b/tests/integration_tests.rs
@@ -0,0 +1,61 @@
+use std::process::Command;
+use assert_cmd::prelude::*;
+
+#[test]
+fn runs_without_arguments() {
+ let mut cmd = Command::cargo_bin("rustlings").unwrap();
+ cmd.assert().success();
+}
+
+#[test]
+fn fails_when_in_wrong_dir() {
+ Command::cargo_bin("rustlings").unwrap()
+ .current_dir("tests/")
+ .assert()
+ .failure();
+}
+
+#[test]
+fn verify_all_success() {
+ Command::cargo_bin("rustlings").unwrap()
+ .arg("v")
+ .current_dir("tests/fixture/")
+ .assert()
+ .success();
+}
+
+#[test]
+fn run_single_compile_success() {
+ Command::cargo_bin("rustlings").unwrap()
+ .args(&["r", "compSuccess.rs"])
+ .current_dir("tests/fixture/")
+ .assert()
+ .success();
+}
+
+#[test]
+fn run_single_test_success() {
+ Command::cargo_bin("rustlings").unwrap()
+ .args(&["r", "testSuccess.rs"])
+ .current_dir("tests/fixture/")
+ .assert()
+ .success();
+}
+
+#[test]
+fn run_single_test_no_filename() {
+ Command::cargo_bin("rustlings").unwrap()
+ .arg("r")
+ .current_dir("tests/fixture/")
+ .assert()
+ .failure();
+}
+
+#[test]
+fn run_single_test_no_exercise() {
+ Command::cargo_bin("rustlings").unwrap()
+ .args(&["r", "compNoExercise.rs"])
+ .current_dir("tests/fixture/")
+ .assert()
+ .failure();
+}