2fb20b0682
Rename bash-helper.sh -> super-man.sh and update all docs/tests to the super-man name and alias. In interactive mode, pressing Esc in the flag browser now returns directly to the home menu, removing the intermediary "Press Enter to search another command" prompt. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
322 lines
8.3 KiB
Bash
Executable File
322 lines
8.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Comprehensive test suite for all Super Man operating modes
|
|
# Tests all non-interactive modes with performance analysis
|
|
|
|
# Get script directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
|
|
# Source test framework
|
|
source "$SCRIPT_DIR/test-framework.sh"
|
|
|
|
# Set script path
|
|
SCRIPT_PATH="$PROJECT_DIR/super-man.sh"
|
|
|
|
# Verify script exists
|
|
if [ ! -f "$SCRIPT_PATH" ]; then
|
|
echo -e "${RED}Error: super-man.sh not found at $SCRIPT_PATH${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Initialize
|
|
print_header
|
|
init_perf_log
|
|
|
|
echo "Testing script: $SCRIPT_PATH"
|
|
echo "Test logs: $TEST_LOG_DIR"
|
|
echo ""
|
|
|
|
# ============================================================================
|
|
# TEST SUITE: HELP & INFORMATIONAL MODES
|
|
# ============================================================================
|
|
print_section "Help & Informational Modes"
|
|
|
|
run_test_with_output_check \
|
|
"Help display (--help)" \
|
|
"$SCRIPT_PATH --help" \
|
|
"Super Man"
|
|
|
|
run_test_with_output_check \
|
|
"Help display (-h)" \
|
|
"$SCRIPT_PATH -h" \
|
|
"QUICK START"
|
|
|
|
run_test_with_output_check \
|
|
"List all commands (--list)" \
|
|
"$SCRIPT_PATH --list" \
|
|
"Available commands"
|
|
|
|
run_test_with_output_check \
|
|
"List all commands (-l)" \
|
|
"$SCRIPT_PATH -l" \
|
|
"commands"
|
|
|
|
# ============================================================================
|
|
# TEST SUITE: NATURAL LANGUAGE QUERY MODES
|
|
# ============================================================================
|
|
print_section "Natural Language Query Modes"
|
|
|
|
# Ask mode tests
|
|
run_test_with_output_check \
|
|
"Ask mode - find large files" \
|
|
"$SCRIPT_PATH ask 'find large files'" \
|
|
"find"
|
|
|
|
run_test_with_output_check \
|
|
"Ask mode - compress folder" \
|
|
"$SCRIPT_PATH ask 'compress folder'" \
|
|
"tar"
|
|
|
|
run_test_with_output_check \
|
|
"Ask mode - disk usage" \
|
|
"$SCRIPT_PATH ask 'disk usage'" \
|
|
"du"
|
|
|
|
run_test_with_output_check \
|
|
"Ask mode - search text" \
|
|
"$SCRIPT_PATH ask 'search text'" \
|
|
"grep"
|
|
|
|
run_test_with_output_check \
|
|
"Ask mode - symlink" \
|
|
"$SCRIPT_PATH ask 'symlink'" \
|
|
"ln -s"
|
|
|
|
# Task mode tests (alias for ask)
|
|
run_test_with_output_check \
|
|
"Task mode - find files" \
|
|
"$SCRIPT_PATH task 'find files'" \
|
|
"find"
|
|
|
|
run_test_with_output_check \
|
|
"Task mode - network" \
|
|
"$SCRIPT_PATH task 'network'" \
|
|
"ping\|curl\|wget"
|
|
|
|
# ============================================================================
|
|
# TEST SUITE: CATEGORY BROWSING
|
|
# ============================================================================
|
|
print_section "Category Browsing"
|
|
|
|
run_test_with_output_check \
|
|
"Category - files" \
|
|
"$SCRIPT_PATH category files" \
|
|
"File Operations"
|
|
|
|
run_test_with_output_check \
|
|
"Category - text" \
|
|
"$SCRIPT_PATH category text" \
|
|
"Text Processing"
|
|
|
|
run_test_with_output_check \
|
|
"Category - network" \
|
|
"$SCRIPT_PATH category network" \
|
|
"Network Operations"
|
|
|
|
run_test_with_output_check \
|
|
"Category - system" \
|
|
"$SCRIPT_PATH category system" \
|
|
"System Monitoring"
|
|
|
|
run_test_with_output_check \
|
|
"Category - list all (no argument)" \
|
|
"$SCRIPT_PATH category" \
|
|
"Available categories"
|
|
|
|
run_test \
|
|
"Category - invalid category" \
|
|
"$SCRIPT_PATH category invalid_category" \
|
|
1
|
|
|
|
# ============================================================================
|
|
# TEST SUITE: COMMAND EXPLANATION
|
|
# ============================================================================
|
|
print_section "Command Explanation"
|
|
|
|
run_test_with_output_check \
|
|
"Explain - tar command" \
|
|
"$SCRIPT_PATH explain 'tar -czf archive.tar.gz folder/'" \
|
|
"tar"
|
|
|
|
run_test_with_output_check \
|
|
"Explain - find command" \
|
|
"$SCRIPT_PATH explain 'find . -name \"*.txt\"'" \
|
|
"find"
|
|
|
|
run_test_with_output_check \
|
|
"Explain - grep command" \
|
|
"$SCRIPT_PATH explain 'grep -r \"pattern\" .'" \
|
|
"grep"
|
|
|
|
run_test_with_output_check \
|
|
"Explain - simple command" \
|
|
"$SCRIPT_PATH explain 'ls -la'" \
|
|
"ls"
|
|
|
|
# ============================================================================
|
|
# TEST SUITE: DIRECT FLAG LOOKUP
|
|
# ============================================================================
|
|
print_section "Direct Flag Lookup"
|
|
|
|
run_test_with_output_check \
|
|
"Direct lookup - ls size" \
|
|
"$SCRIPT_PATH ls size" \
|
|
"size\|SIZE"
|
|
|
|
run_test_with_output_check \
|
|
"Direct lookup - grep -v" \
|
|
"$SCRIPT_PATH grep -v" \
|
|
"invert"
|
|
|
|
run_test_with_output_check \
|
|
"Direct lookup - tar extract" \
|
|
"$SCRIPT_PATH tar extract" \
|
|
"extract"
|
|
|
|
run_test_with_output_check \
|
|
"Direct lookup - find name" \
|
|
"$SCRIPT_PATH find name" \
|
|
"name"
|
|
|
|
run_test_with_output_check \
|
|
"Direct lookup - df human" \
|
|
"$SCRIPT_PATH df human" \
|
|
"human"
|
|
|
|
# Test without filter
|
|
run_test_with_output_check \
|
|
"Direct lookup - ls (no filter)" \
|
|
"$SCRIPT_PATH ls" \
|
|
"ls"
|
|
|
|
# ============================================================================
|
|
# TEST SUITE: AI MODE (if Ollama available)
|
|
# ============================================================================
|
|
print_section "AI Mode"
|
|
|
|
# Check if Ollama is available
|
|
if command -v ollama &> /dev/null; then
|
|
# Check if NL2SH model is available
|
|
if ollama list | grep -q "westenfelder/NL2SH"; then
|
|
run_test_with_output_check \
|
|
"AI mode - find python files" \
|
|
"$SCRIPT_PATH ai 'find all python files'" \
|
|
"find" \
|
|
30
|
|
|
|
run_test_with_output_check \
|
|
"AI mode - compress logs" \
|
|
"$SCRIPT_PATH ai 'compress all log files'" \
|
|
"tar\|gzip\|zip" \
|
|
30
|
|
|
|
run_test_with_output_check \
|
|
"AI mode - disk usage" \
|
|
"$SCRIPT_PATH ai 'show disk usage by directory'" \
|
|
"du\|df" \
|
|
30
|
|
else
|
|
skip_test "AI mode tests" "NL2SH model not installed"
|
|
fi
|
|
else
|
|
skip_test "AI mode tests" "Ollama not available"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# TEST SUITE: ERROR HANDLING
|
|
# ============================================================================
|
|
print_section "Error Handling"
|
|
|
|
run_test \
|
|
"Invalid mode" \
|
|
"$SCRIPT_PATH invalid_mode 'test'" \
|
|
1
|
|
|
|
run_test_with_output_check \
|
|
"Empty query to ask mode" \
|
|
"$SCRIPT_PATH ask ''" \
|
|
"Error\|Usage"
|
|
|
|
run_test_with_output_check \
|
|
"Empty query to explain mode" \
|
|
"$SCRIPT_PATH explain ''" \
|
|
"Error\|Usage"
|
|
|
|
# ============================================================================
|
|
# TEST SUITE: EDGE CASES
|
|
# ============================================================================
|
|
print_section "Edge Cases"
|
|
|
|
run_test_with_output_check \
|
|
"Query with special characters" \
|
|
"$SCRIPT_PATH ask 'find *.txt files'" \
|
|
"find"
|
|
|
|
run_test_with_output_check \
|
|
"Very long query" \
|
|
"$SCRIPT_PATH ask 'find all files larger than 100MB that were modified in the last week and contain specific text patterns'" \
|
|
"find"
|
|
|
|
run_test_with_output_check \
|
|
"Query with quotes" \
|
|
"$SCRIPT_PATH ask \"search for 'pattern' in files\"" \
|
|
"grep"
|
|
|
|
run_test_with_output_check \
|
|
"Multiple word filter" \
|
|
"$SCRIPT_PATH ls sort by" \
|
|
"sort"
|
|
|
|
# ============================================================================
|
|
# PERFORMANCE BENCHMARKS
|
|
# ============================================================================
|
|
print_section "Performance Benchmarks"
|
|
|
|
echo -e "\n${MAGENTA}${BOLD}Running performance benchmarks (10 iterations each)${NC}\n"
|
|
|
|
run_benchmark \
|
|
"Ask mode - find large files" \
|
|
"$SCRIPT_PATH ask 'find large files'" \
|
|
10
|
|
|
|
run_benchmark \
|
|
"Category - files" \
|
|
"$SCRIPT_PATH category files" \
|
|
10
|
|
|
|
run_benchmark \
|
|
"Explain - tar command" \
|
|
"$SCRIPT_PATH explain 'tar -czf'" \
|
|
10
|
|
|
|
run_benchmark \
|
|
"Direct lookup - ls size" \
|
|
"$SCRIPT_PATH ls size" \
|
|
10
|
|
|
|
run_benchmark \
|
|
"Help display" \
|
|
"$SCRIPT_PATH --help" \
|
|
10
|
|
|
|
run_benchmark \
|
|
"List commands" \
|
|
"$SCRIPT_PATH --list" \
|
|
10
|
|
|
|
# ============================================================================
|
|
# GENERATE REPORTS
|
|
# ============================================================================
|
|
|
|
# Print summary
|
|
print_summary
|
|
|
|
# Save summary exit code
|
|
EXIT_CODE=$?
|
|
|
|
echo -e "${CYAN}Test execution complete!${NC}"
|
|
echo -e "${CYAN}View detailed logs in: $TEST_LOG_DIR${NC}"
|
|
echo -e "${CYAN}View performance data in: $PERF_LOG_DIR${NC}"
|
|
|
|
exit $EXIT_CODE
|