From df985c9b639bab3edd687170fd279724b8f05d69 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 24 Aug 2025 16:52:40 +0000 Subject: Add comprehensive unit tests and CI test script Co-authored-by: HsiangNianian <44714368+HsiangNianian@users.noreply.github.com> --- scripts/test.sh | 30 +++++++++++++++++++++++++ src/main.rs | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100755 scripts/test.sh diff --git a/scripts/test.sh b/scripts/test.sh new file mode 100755 index 0000000..b671a94 --- /dev/null +++ b/scripts/test.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Simple test script for soon CLI tool + +set -e + +echo "🧪 Running Soon CLI Tests..." + +# Test 1: Build succeeds +echo "1. Testing build..." +cargo build --quiet + +# Test 2: Unit tests pass +echo "2. Running unit tests..." +cargo test --quiet + +# Test 3: Basic CLI functionality +echo "3. Testing CLI help..." +./target/debug/soon --help > /dev/null + +echo "4. Testing version command..." +./target/debug/soon version > /dev/null + +echo "5. Testing which command..." +./target/debug/soon which > /dev/null + +# Test 4: Release build +echo "6. Testing release build..." +cargo build --release --quiet + +echo "✅ All tests passed!" \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 245810f..443a2ab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -567,3 +567,71 @@ fn main() { } } +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_main_cmd_extraction() { + assert_eq!(main_cmd("git status"), "git"); + assert_eq!(main_cmd("ls -la"), "ls"); + assert_eq!(main_cmd(""), ""); + assert_eq!(main_cmd("single"), "single"); + assert_eq!(main_cmd(" spaced command "), "spaced"); + } + + #[test] + fn test_is_ignored_command() { + assert_eq!(is_ignored_command("soon"), true); + assert_eq!(is_ignored_command("cd"), true); + assert_eq!(is_ignored_command("ls"), true); + assert_eq!(is_ignored_command("pwd"), true); + assert_eq!(is_ignored_command("exit"), true); + assert_eq!(is_ignored_command("clear"), true); + assert_eq!(is_ignored_command("git"), false); + assert_eq!(is_ignored_command("cargo"), false); + } + + #[test] + fn test_detect_shell() { + // This test will depend on the actual environment + let shell = detect_shell(); + assert!(shell == "bash" || shell == "zsh" || shell == "fish" || shell == "unknown"); + } + + #[test] + fn test_history_path() { + let bash_path = history_path("bash"); + assert!(bash_path.is_some()); + assert!(bash_path.unwrap().ends_with(".bash_history")); + + let zsh_path = history_path("zsh"); + assert!(zsh_path.is_some()); + assert!(zsh_path.unwrap().ends_with(".zsh_history")); + + let fish_path = history_path("fish"); + assert!(fish_path.is_some()); + assert!(fish_path.unwrap().ends_with("fish_history")); + + let unknown_path = history_path("unknown"); + assert!(unknown_path.is_some()); + // Unknown shell returns empty PathBuf + } + + #[test] + fn test_get_cache_path() { + let cache_path = get_cache_path(); + assert!(cache_path.ends_with(".soon_cache")); + } + + #[test] + fn test_history_item_creation() { + let item = HistoryItem { + cmd: "test command".to_string(), + path: Some("/home/user".to_string()), + }; + assert_eq!(item.cmd, "test command"); + assert_eq!(item.path, Some("/home/user".to_string())); + } +} + -- cgit v1.2.3-70-g09d2