From 26c525823b6f23ef5eb0f38819e6f57116a79425 Mon Sep 17 00:00:00 2001 From: Dom Slee Date: Fri, 10 Mar 2023 23:20:30 +1100 Subject: [PATCH] Feature/improved testing (#1) * update README * simplify tests --- README.md | 7 +++-- media/demo.gif | Bin 0 -> 84865 bytes tests/test_command_names.rs | 6 ---- tests/test_complete.rs | 6 ---- tests/test_init.rs | 6 ---- tests/test_testenv.rs | 36 +++++++++++++++++++++++ tests/testenv/mod.rs | 57 ++++++++++++++++++------------------ 7 files changed, 70 insertions(+), 48 deletions(-) create mode 100644 media/demo.gif create mode 100644 tests/test_testenv.rs diff --git a/README.md b/README.md index 06fb99b..c743ef3 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,10 @@ Blazing fast tab completion for powershell. +![demo](media/demo.gif) + Features: -* Fast startup and execution using `nu-engine` +* Fast startup and execution using [nushell/nu-engine](https://crates.io/crates/nu-engine) * Extendable using `.nu` files, with built in support for commmon tasks like `git` and `npm run` By default, [completions.nu](./resource/completions.nu) is used. An alternative `.nu` file can be specified in the `TABCOMPLETE_FILE` environment variable. @@ -27,6 +29,7 @@ Invoke-Expression (&tabcomplete init | Get-Content) [crates.io]: https://crates.io/crates/starship ## Built in completions +The completions packaged with the binary in [completions.nu](./resource/completions.nu) are: * [git completions](https://github.com/nushell/nu_scripts/blob/main/custom-completions/git/git-completions.nu). These are also combined with [git auto generated completions](https://github.com/nushell/nu_scripts/blob/main/custom-completions/auto-generate/completions/git.nu) * [npm completions](https://github.com/nushell/nu_scripts/blob/main/custom-completions/npm/npm-completions.nu) * [cargo completions](https://github.com/nushell/nu_scripts/blob/main/custom-completions/cargo/cargo-completions.nu) @@ -39,7 +42,7 @@ Benchmark | Results `benchmark/complete` - tab completion (100 branches) | tabcomplete: 71ms, posh-git: 172ms (2.42x faster) ## Aliases / Function support -Functions are supported. For example, this would add completion for `gco `, as if it was `git checkout `: +Functions are supported. For example, the completion of `gco` in the demo is: ```pwsh function gco() { git checkout $args } ``` diff --git a/media/demo.gif b/media/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..dd44deecb82e566a4f6bfe86c5366c003b5b0680 GIT binary patch literal 84865 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 z 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 literal 0 HcmV?d00001 diff --git a/tests/test_command_names.rs b/tests/test_command_names.rs index cc5178b..7541146 100644 --- a/tests/test_command_names.rs +++ b/tests/test_command_names.rs @@ -8,12 +8,6 @@ use rstest_reuse::{self, *}; mod testenv; pub use testenv::*; -#[template] -#[rstest] -#[case("pwsh")] -#[cfg_attr(windows, case("powershell"))] -pub fn shell_to_use(#[case] shell: &str) {} - #[apply(shell_to_use)] fn test_command_names(shell: &str) { let testenv = TestEnv::new(shell); diff --git a/tests/test_complete.rs b/tests/test_complete.rs index adcc3af..4f27b54 100644 --- a/tests/test_complete.rs +++ b/tests/test_complete.rs @@ -8,12 +8,6 @@ use rstest_reuse::{self, *}; mod testenv; pub use testenv::*; -#[template] -#[rstest] -#[case("pwsh")] -#[cfg_attr(windows, case("powershell"))] -pub fn shell_to_use(#[case] shell: &str) {} - #[apply(shell_to_use)] fn test_checkout_branches(shell: &str) { let testenv = TestEnv::new(shell); diff --git a/tests/test_init.rs b/tests/test_init.rs index 39941ef..71e3672 100644 --- a/tests/test_init.rs +++ b/tests/test_init.rs @@ -5,12 +5,6 @@ use rstest_reuse::{self, *}; use std::io::BufRead; pub use testenv::*; -#[template] -#[rstest] -#[case("pwsh")] -#[cfg_attr(windows, case("powershell"))] -pub fn shell_to_use(#[case] shell: &str) {} - #[apply(shell_to_use)] fn test_init(shell: &str) { let testenv = TestEnv::new(shell); diff --git a/tests/test_testenv.rs b/tests/test_testenv.rs new file mode 100644 index 0000000..05a5fbd --- /dev/null +++ b/tests/test_testenv.rs @@ -0,0 +1,36 @@ +mod testenv; +use std::{fs, io::BufRead, path::PathBuf}; + +use itertools::Itertools; +pub use testenv::*; + +#[test] +pub fn test_path_is_set() { + let testenv = TestEnv::new("pwsh"); + let res = testenv.run_with_profile("(gcm tabcomplete).Path").unwrap(); + let lines = res.stdout.lines().map(|x| x.unwrap()).collect_vec(); + + let bin_invoked_path = fs::canonicalize(&lines[0]).expect("invoked path"); + let binding = PathBuf::from(file!()); + let project_path = binding + .as_path() + .parent() + .expect("tests directory") + .parent() + .expect("rootdirectory"); + let expected_bin_path = project_path.join("target").join("debug").join(format!( + "tabcomplete{}", + if cfg!(windows) { ".exe" } else { "" } + )); + + let expected_bin = fs::canonicalize(expected_bin_path).expect("bin path should exist"); + assert_eq!(expected_bin, bin_invoked_path); +} + +#[test] +pub fn test_git_is_defined() { + let testenv = TestEnv::new("pwsh"); + testenv + .run_with_profile("git -h") + .expect("git should be defined"); +} diff --git a/tests/testenv/mod.rs b/tests/testenv/mod.rs index 009d398..641a076 100644 --- a/tests/testenv/mod.rs +++ b/tests/testenv/mod.rs @@ -1,13 +1,24 @@ +#![allow(unused_macros)] // FIXME use posh_tabcomplete::TABCOMPLETE_FILE; -use regex::Regex; +use rstest_reuse::*; use std::{ - env, fs, + env, + ffi::OsString, + fs, io::{self, Write}, path::PathBuf, process::{Command, Output}, }; use tempfile::TempDir; +const PATH: &str = "PATH"; + +#[template] +#[rstest] +#[case("pwsh")] +#[cfg_attr(windows, case("powershell"))] +pub fn shell_to_use(#[case] shell: &str) {} + pub struct TestEnv { pub shell: String, pub temp_dir: TempDir, @@ -71,11 +82,15 @@ impl TestEnv { let file_contents = format!(". {}\n{command}", self.profile_path.to_str().unwrap()); let file_path = root.join("file.ps1"); fs::File::create(&file_path)?.write_all(file_contents.as_bytes())?; + let target_dir = debug_target_dir(); + let paths_var = prepend_to_path_var(&target_dir); + println!("target_dir {target_dir:?}"); let output = Command::new(&self.shell) .arg("-NoProfile") .arg("-File") .arg(file_path.to_str().unwrap()) + .env(PATH, paths_var) .current_dir(root) .output() .expect("failed to execute"); @@ -87,6 +102,17 @@ impl TestEnv { } } +fn prepend_to_path_var(path: &PathBuf) -> OsString { + let current_path = env::var_os(PATH).expect("PATH must be defined"); + let split_paths = env::split_paths(¤t_path); + let mut new_paths = vec![path.clone()]; + for existing_path in split_paths { + new_paths.push(existing_path); + } + + env::join_paths(&new_paths).expect("can join") +} + fn create_working_dir(profile_prefix_data: Vec<&str>) -> Result<(TempDir, PathBuf), io::Error> { let temp_dir = tempfile::Builder::new() .prefix("tabcomplete-tests") @@ -95,22 +121,9 @@ fn create_working_dir(profile_prefix_data: Vec<&str>) -> Result<(TempDir, PathBu let profile_path = { let root = temp_dir.path(); println!("root: {root:?}"); - let exe = find_exe(); - let output = Command::new(&exe) - .arg("init") - .output() - .expect("failed to execute"); let mut init_str = profile_prefix_data.join("\n\n"); init_str.push('\n'); - init_str.push_str(&String::from_utf8(output.stdout).expect("parsed as utf8")); - let re1 = Regex::new(r"tabcomplete complete").unwrap(); - init_str = re1 - .replace(&init_str, format!("{exe:?} complete")) - .to_string(); - let re2 = Regex::new(r"tabcomplete nu\-commands").unwrap(); - init_str = re2 - .replace(&init_str, format!("{exe:?} nu-commands")) - .to_string(); + init_str.push_str("Invoke-Expression (&tabcomplete init | Out-String)"); let profile_path = root.join("tabcompleteProfile.ps1"); fs::File::create(&profile_path)?.write_all(init_str.as_bytes())?; @@ -140,18 +153,6 @@ fn create_working_dir(profile_prefix_data: Vec<&str>) -> Result<(TempDir, PathBu Ok((temp_dir, profile_path)) } -fn find_exe() -> PathBuf { - let root = debug_target_dir(); - - let exe_name = if cfg!(windows) { - "tabcomplete.exe" - } else { - "tabcomplete" - }; - - root.join(exe_name) -} - fn debug_target_dir() -> PathBuf { // Tests exe is in target/debug/deps, tabcomplete.exe is in `target` let target_dir = env::current_exe()