diff --git a/Cargo.lock b/Cargo.lock index 7cd9eac..3a4e2d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -95,6 +95,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + [[package]] name = "bitflags" version = "1.3.2" @@ -110,6 +116,12 @@ dependencies = [ "libc", ] +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + [[package]] name = "clap" version = "4.4.6" @@ -223,6 +235,107 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "futures" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-executor" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" + +[[package]] +name = "futures-macro" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + +[[package]] +name = "futures-task" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" + +[[package]] +name = "futures-timer" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" + +[[package]] +name = "futures-util" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + [[package]] name = "hashbrown" version = "0.14.1" @@ -317,6 +430,7 @@ dependencies = [ "pacdef_macros", "path-absolutize", "regex", + "rstest", "rust-apt", "serde", "serde_derive", @@ -353,6 +467,18 @@ dependencies = [ "once_cell", ] +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkg-config" version = "0.3.27" @@ -424,6 +550,41 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +[[package]] +name = "relative-path" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c707298afce11da2efef2f600116fa93ffa7a032b5d7b628aa17711ec81383ca" + +[[package]] +name = "rstest" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199" +dependencies = [ + "futures", + "futures-timer", + "rstest_macros", + "rustc_version", +] + +[[package]] +name = "rstest_macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d428f8247852f894ee1be110b375111b586d4fa431f6c46e64ba5a0dcccbe605" +dependencies = [ + "cfg-if", + "glob", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version", + "syn", + "unicode-ident", +] + [[package]] name = "rust-apt" version = "0.5.1" @@ -436,6 +597,15 @@ dependencies = [ "termsize", ] +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + [[package]] name = "ryu" version = "1.0.15" @@ -457,6 +627,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + [[package]] name = "serde" version = "1.0.189" @@ -501,6 +677,15 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "strsim" version = "0.10.0" diff --git a/bacon.toml b/bacon.toml index 130bc09..cfbc38a 100644 --- a/bacon.toml +++ b/bacon.toml @@ -41,6 +41,8 @@ command = [ "test", "--color", "always", + "--package", + "pacdef_core", "--", "--color", "always", # see https://github.com/Canop/bacon/issues/124 diff --git a/crates/pacdef_core/Cargo.toml b/crates/pacdef_core/Cargo.toml index 12d4002..a2de30b 100644 --- a/crates/pacdef_core/Cargo.toml +++ b/crates/pacdef_core/Cargo.toml @@ -31,6 +31,9 @@ rust-apt = { version = "0.5", optional = true } libc = { version = "0.2", optional = true } # for debian +[dev-dependencies] +rstest = "0.18" + [features] default = [] arch = ["dep:alpm"] diff --git a/crates/pacdef_core/src/args/datastructure.rs b/crates/pacdef_core/src/args/datastructure.rs index 854e917..1b6eb8e 100644 --- a/crates/pacdef_core/src/args/datastructure.rs +++ b/crates/pacdef_core/src/args/datastructure.rs @@ -1,11 +1,11 @@ -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub enum Arguments { Group(GroupAction), Package(PackageAction), Version, } -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub enum GroupAction { Edit(Groups), Export(Groups, OutputDir, Force), @@ -16,13 +16,13 @@ pub enum GroupAction { Show(Groups), } -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub struct Files(pub Vec); -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub struct Groups(pub Vec); -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub enum PackageAction { Clean(Noconfirm), Review, @@ -31,17 +31,17 @@ pub enum PackageAction { Unmanaged, } -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub struct Regex(pub String); -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub struct Edit(pub bool); -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub struct Noconfirm(pub bool); -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub struct Force(pub bool); -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub struct OutputDir(pub Option); diff --git a/crates/pacdef_core/src/args/mod.rs b/crates/pacdef_core/src/args/mod.rs index 638b586..a1e2848 100644 --- a/crates/pacdef_core/src/args/mod.rs +++ b/crates/pacdef_core/src/args/mod.rs @@ -1,6 +1,8 @@ mod cli; mod datastructure; mod parsing; +#[cfg(test)] +mod tests; pub use datastructure::*; diff --git a/crates/pacdef_core/src/args/tests.rs b/crates/pacdef_core/src/args/tests.rs new file mode 100644 index 0000000..da641c9 --- /dev/null +++ b/crates/pacdef_core/src/args/tests.rs @@ -0,0 +1,27 @@ +use super::cli::build_cli; +use super::datastructure::*; +use super::parsing::parse; + +use rstest::rstest; + +#[rstest] +#[case(vec!["pacdef", "group", "list"], + Arguments::Group(GroupAction::List))] +#[case(vec!["pacdef", "g", "l"], + Arguments::Group(GroupAction::List))] +#[case(vec!["pacdef", "version"], + Arguments::Version)] +#[case(vec!["pacdef", "group", "export", "-o", "/tmp", "--force", "base"], + Arguments::Group(GroupAction::Export(Groups(vec!["base".to_string()]), OutputDir(Some("/tmp".to_string())), Force(true))))] +#[case(vec!["pacdef", "package", "sync"], + Arguments::Package(PackageAction::Sync(Noconfirm(false))))] +#[case(vec!["pacdef", "package", "sync", "--noconfirm"], + Arguments::Package(PackageAction::Sync(Noconfirm(true))))] +#[case(vec!["pacdef", "p", "se", "myregex"], + Arguments::Package(PackageAction::Search(Regex("myregex".to_string()))))] +fn arg_parsing(#[case] input: Vec<&str>, #[case] expected: Arguments) { + let args = build_cli().get_matches_from(input); + let parsed = parse(args); + + assert_eq!(parsed, expected); +}