166 lines
4.2 KiB
Bash
166 lines
4.2 KiB
Bash
#!/usr/bin/env bash
|
|
# Main test runner for OpenCode plugin test suite
|
|
# Runs all tests and reports results
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
echo "========================================"
|
|
echo " OpenCode Plugin Test Suite"
|
|
echo "========================================"
|
|
echo ""
|
|
echo "Repository: $(cd ../.. && pwd)"
|
|
echo "Test time: $(date)"
|
|
echo ""
|
|
|
|
# Parse command line arguments
|
|
RUN_INTEGRATION=false
|
|
VERBOSE=false
|
|
SPECIFIC_TEST=""
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--integration|-i)
|
|
RUN_INTEGRATION=true
|
|
shift
|
|
;;
|
|
--verbose|-v)
|
|
VERBOSE=true
|
|
shift
|
|
;;
|
|
--test|-t)
|
|
SPECIFIC_TEST="$2"
|
|
shift 2
|
|
;;
|
|
--help|-h)
|
|
echo "Usage: $0 [options]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --integration, -i Run integration tests (requires OpenCode)"
|
|
echo " --verbose, -v Show verbose output"
|
|
echo " --test, -t NAME Run only the specified test"
|
|
echo " --help, -h Show this help"
|
|
echo ""
|
|
echo "Tests:"
|
|
echo " test-plugin-loading.sh Verify plugin installation and structure"
|
|
echo " test-skills-core.sh Test skills-core.js library functions"
|
|
echo " test-tools.sh Test use_skill and find_skills tools (integration)"
|
|
echo " test-priority.sh Test skill priority resolution (integration)"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo "Use --help for usage information"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# List of tests to run (no external dependencies)
|
|
tests=(
|
|
"test-plugin-loading.sh"
|
|
"test-skills-core.sh"
|
|
)
|
|
|
|
# Integration tests (require OpenCode)
|
|
integration_tests=(
|
|
"test-tools.sh"
|
|
"test-priority.sh"
|
|
)
|
|
|
|
# Add integration tests if requested
|
|
if [ "$RUN_INTEGRATION" = true ]; then
|
|
tests+=("${integration_tests[@]}")
|
|
fi
|
|
|
|
# Filter to specific test if requested
|
|
if [ -n "$SPECIFIC_TEST" ]; then
|
|
tests=("$SPECIFIC_TEST")
|
|
fi
|
|
|
|
# Track results
|
|
passed=0
|
|
failed=0
|
|
skipped=0
|
|
|
|
# Run each test
|
|
for test in "${tests[@]}"; do
|
|
echo "----------------------------------------"
|
|
echo "Running: $test"
|
|
echo "----------------------------------------"
|
|
|
|
test_path="$SCRIPT_DIR/$test"
|
|
|
|
if [ ! -f "$test_path" ]; then
|
|
echo " [SKIP] Test file not found: $test"
|
|
skipped=$((skipped + 1))
|
|
continue
|
|
fi
|
|
|
|
if [ ! -x "$test_path" ]; then
|
|
echo " Making $test executable..."
|
|
chmod +x "$test_path"
|
|
fi
|
|
|
|
start_time=$(date +%s)
|
|
|
|
if [ "$VERBOSE" = true ]; then
|
|
if bash "$test_path"; then
|
|
end_time=$(date +%s)
|
|
duration=$((end_time - start_time))
|
|
echo ""
|
|
echo " [PASS] $test (${duration}s)"
|
|
passed=$((passed + 1))
|
|
else
|
|
end_time=$(date +%s)
|
|
duration=$((end_time - start_time))
|
|
echo ""
|
|
echo " [FAIL] $test (${duration}s)"
|
|
failed=$((failed + 1))
|
|
fi
|
|
else
|
|
# Capture output for non-verbose mode
|
|
if output=$(bash "$test_path" 2>&1); then
|
|
end_time=$(date +%s)
|
|
duration=$((end_time - start_time))
|
|
echo " [PASS] (${duration}s)"
|
|
passed=$((passed + 1))
|
|
else
|
|
end_time=$(date +%s)
|
|
duration=$((end_time - start_time))
|
|
echo " [FAIL] (${duration}s)"
|
|
echo ""
|
|
echo " Output:"
|
|
echo "$output" | sed 's/^/ /'
|
|
failed=$((failed + 1))
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
done
|
|
|
|
# Print summary
|
|
echo "========================================"
|
|
echo " Test Results Summary"
|
|
echo "========================================"
|
|
echo ""
|
|
echo " Passed: $passed"
|
|
echo " Failed: $failed"
|
|
echo " Skipped: $skipped"
|
|
echo ""
|
|
|
|
if [ "$RUN_INTEGRATION" = false ] && [ ${#integration_tests[@]} -gt 0 ]; then
|
|
echo "Note: Integration tests were not run."
|
|
echo "Use --integration flag to run tests that require OpenCode."
|
|
echo ""
|
|
fi
|
|
|
|
if [ $failed -gt 0 ]; then
|
|
echo "STATUS: FAILED"
|
|
exit 1
|
|
else
|
|
echo "STATUS: PASSED"
|
|
exit 0
|
|
fi
|