From 8239fbd12befad1126e677fa083ce73947d74d8c Mon Sep 17 00:00:00 2001 From: Matan Kushner Date: Thu, 6 Jun 2019 13:18:00 +0100 Subject: Refactor integration tests (#71) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create subcommands to be able to print modules independently - `starship prompt` will print the full prompt - `starship module ` will print a specific module e.g. `starship module python` - Added `--path` flag to print the prompt or modules without being in a specific directory - Added `--status` flag to provide the status of the last command, instead of requiring it as an argument - Refactored integration tests to be end-to-end tests, since there was no way in integration tests to set the environment variables for a specific command, which was required for the `username` module - Moved e2e tests to `tests/testsuite` to allow for a single binary to be built - Tests will build/run faster - No more false positives for unused functions - Added tests for `username` - Removed codecov + tarpaulin 😢 --- src/main.rs | 67 +++++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 13 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 1f69d4ed9..4707cd816 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,36 +1,77 @@ #[macro_use] extern crate clap; -extern crate ansi_term; -extern crate battery; -extern crate dirs; -extern crate git2; -extern crate pretty_env_logger; - mod context; mod module; mod modules; mod print; mod segment; -use clap::{App, Arg}; +use clap::{App, Arg, SubCommand}; fn main() { pretty_env_logger::init(); - let args = App::new("Starship") + let matches = App::new("Starship") .about("The cross-shell prompt for astronauts. ✨🚀") // pull the version number from Cargo.toml .version(crate_version!()) // pull the authors from Cargo.toml .author(crate_authors!()) .after_help("https://github.com/matchai/starship") - .arg( - Arg::with_name("status_code") - .help("The status code of the previously run command") - .required(true), + .subcommand( + SubCommand::with_name("prompt") + .about("Prints the full starship prompt") + .arg( + Arg::with_name("status_code") + .short("s") + .long("status") + .value_name("STATUS_CODE") + .help("The status code of the previously run command") + .takes_value(true), + ) + .arg( + Arg::with_name("path") + .short("p") + .long("path") + .value_name("PATH") + .help("The path that the prompt should render for ($PWD by default)") + .takes_value(true), + ), + ) + .subcommand( + SubCommand::with_name("module") + .about("Prints a specific prompt module") + .arg( + Arg::with_name("name") + .help("The name of the module to be printed") + .required(true), + ) + .arg( + Arg::with_name("status_code") + .short("s") + .long("status") + .value_name("STATUS_CODE") + .help("The status code of the previously run command") + .takes_value(true), + ) + .arg( + Arg::with_name("path") + .short("p") + .long("path") + .value_name("PATH") + .help("The path the prompt should render for ($PWD by default)") + .takes_value(true), + ), ) .get_matches(); - print::prompt(args); + match matches.subcommand() { + ("prompt", Some(sub_m)) => print::prompt(sub_m.clone()), + ("module", Some(sub_m)) => { + let module_name = sub_m.value_of("name").expect("Module name missing."); + print::module(module_name, sub_m.clone()); + } + _ => {} + } } -- cgit v1.2.3