Merge pull request #2 from alexwlchan/test-cli
- ID
0065bc6- date
2024-08-20 00:06:42+00:00- author
Alex Chan <alex@alexwlchan.net>- parents
10196ad,a964682- message
Merge pull request #2 from alexwlchan/test-cli Add some tests for the Clap-provided CLI flags- changed files
4 files, 182 additions, 2 deletions
Changed files
Cargo.lock (32005) → Cargo.lock (35077)
diff --git a/Cargo.lock b/Cargo.lock
index e146d93..ec54321 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -9,6 +9,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
name = "aligned-vec"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -93,6 +102,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
[[package]]
+name = "assert_cmd"
+version = "2.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc1835b7f27878de8525dc71410b5a31cdcc5f230aed5ba5df968e09c201b23d"
+dependencies = [
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "libc",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
name = "autocfg"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -140,6 +165,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3dcde5f311c85b8ca30c2e4198d4326bc342c76541590106f5fa4a50946ea499"
[[package]]
+name = "bstr"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c"
+dependencies = [
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
name = "built"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -261,8 +297,10 @@ dependencies = [
name = "create_thumbnail"
version = "0.1.0"
dependencies = [
+ "assert_cmd",
"clap",
"image",
+ "regex",
]
[[package]]
@@ -297,6 +335,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
name = "either"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -677,6 +727,33 @@ dependencies = [
]
[[package]]
+name = "predicates"
+version = "3.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
name = "proc-macro2"
version = "1.0.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -828,6 +905,35 @@ dependencies = [
]
[[package]]
+name = "regex"
+version = "1.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
+
+[[package]]
name = "rgb"
version = "0.8.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -944,6 +1050,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
name = "thiserror"
version = "1.0.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1038,6 +1150,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
Cargo.toml (152) → Cargo.toml (191)
diff --git a/Cargo.toml b/Cargo.toml
index ed90e3a..b5ced55 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -4,5 +4,7 @@ version = "0.1.0"
edition = "2021"
[dependencies]
+assert_cmd = "2.0.14"
clap = { version = "4", features = ["derive"] }
image = "0.25.1"
+regex = "1.10.5"
README.md (595) → README.md (580)
diff --git a/README.md b/README.md
index 98a99ae..0783c93 100644
--- a/README.md
+++ b/README.md
@@ -3,8 +3,6 @@ create-thumbnail PATH [--width=WIDTH | --height=HEIGHT] --out-dir=OUT_DIR
focusing on a small piece of code makes it better
* CLI:
- -> version
- -> help
-> width + height
-> neither of width/height
-> width only
@@ -16,6 +14,7 @@ focusing on a small piece of code makes it better
-> PNG
-> JPEG
-> TIF
+ -> WebP
-> small file
* errors:
src/main.rs (2427) → src/main.rs (3826)
diff --git a/src/main.rs b/src/main.rs
index 74d793c..b295e45 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,3 +1,5 @@
+#![deny(warnings)]
+
use std::io;
use std::path::PathBuf;
use std::process::Command;
@@ -92,3 +94,59 @@ fn main() {
create_thumbnail(&cli.path, &cli.out_dir, cli.height, cli.width).unwrap();
}
+
+#[cfg(test)]
+mod test_cli {
+ use std::str;
+
+ use assert_cmd::assert::OutputAssertExt;
+ use assert_cmd::Command;
+ use regex::Regex;
+
+ #[test]
+ fn it_prints_the_version() {
+ let output = get_success(&["--version"]);
+
+ let re = Regex::new(r"^create_thumbnail [0-9]+\.[0-9]+\.[0-9]+\n$").unwrap();
+
+ assert!(re.is_match(&output.stdout));
+
+ assert_eq!(output.exit_code, 0);
+ assert_eq!(output.stderr, "");
+ }
+
+ #[test]
+ fn it_prints_the_help() {
+ let output = get_success(&["--help"]);
+
+ let re = Regex::new(r"create_thumbnail --out-dir").unwrap();
+
+ assert!(re.is_match(&output.stdout));
+
+ assert_eq!(output.exit_code, 0);
+ assert_eq!(output.stderr, "");
+ }
+
+ struct DcOutput {
+ exit_code: i32,
+ stdout: String,
+ stderr: String,
+ }
+
+ fn get_success(args: &[&str]) -> DcOutput {
+ let mut cmd = Command::cargo_bin("create_thumbnail").unwrap();
+ let output = cmd
+ .args(args)
+ .unwrap()
+ .assert()
+ .success()
+ .get_output()
+ .to_owned();
+
+ DcOutput {
+ exit_code: output.status.code().unwrap(),
+ stdout: str::from_utf8(&output.stdout).unwrap().to_owned(),
+ stderr: str::from_utf8(&output.stderr).unwrap().to_owned(),
+ }
+ }
+}