From f43cb124f6163216218fe397d78b00e2d3bda84c Mon Sep 17 00:00:00 2001 From: lyn <819880950@qq.com> Date: Wed, 20 Mar 2019 21:05:45 +0100 Subject: [PATCH] add tests --- Cargo.toml | 7 ++++ src/util.rs | 7 ++++ tests/fixture/compNoExercise.rs | 2 ++ tests/fixture/compSuccess.rs | 2 ++ tests/fixture/info.toml | 7 ++++ tests/fixture/testSuccess.rs | 4 +++ tests/integration_tests.rs | 61 +++++++++++++++++++++++++++++++++ 7 files changed, 90 insertions(+) create mode 100644 tests/fixture/compNoExercise.rs create mode 100644 tests/fixture/compSuccess.rs create mode 100644 tests/fixture/info.toml create mode 100644 tests/fixture/testSuccess.rs create mode 100644 tests/integration_tests.rs 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(); +}