From b018d86d32f0160006aaf9930d8d61b7eacefda4 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Fri, 6 Feb 2026 06:28:34 +0000 Subject: test: enhance CLI test summary with detailed statistics Improve test results display with: - Per-suite test case breakdown table - Overall statistics panel showing suite and case counts - Pass rate percentage calculation - Formatted borders and color-coded status indicators - Clear final verdict summary Co-Authored-By: Claude Sonnet 4.5 --- spec/cli/run_all_tests.sh | 119 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 110 insertions(+), 9 deletions(-) (limited to 'spec/cli/run_all_tests.sh') diff --git a/spec/cli/run_all_tests.sh b/spec/cli/run_all_tests.sh index 0067bba..a095796 100755 --- a/spec/cli/run_all_tests.sh +++ b/spec/cli/run_all_tests.sh @@ -9,6 +9,7 @@ RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' +CYAN='\033[0;36m' NC='\033[0m' # No Color echo -e "${BLUE}======================================" @@ -31,6 +32,17 @@ TOTAL_SUITES=0 PASSED_SUITES=0 FAILED_SUITES=0 +# Track test case statistics +TOTAL_TESTS=0 +TOTAL_PASSED=0 +TOTAL_FAILED=0 + +# Array to store suite results +declare -a SUITE_NAMES +declare -a SUITE_PASSED +declare -a SUITE_FAILED +declare -a SUITE_STATUS + # Function to run a test suite run_test_suite() { local suite_name="$1" @@ -41,13 +53,51 @@ run_test_suite() { echo -e "${BLUE}Running: $suite_name${NC}" echo "======================================" - if bash "$suite_file"; then + # Run the test suite and capture output + local output + output=$(bash "$suite_file" 2>&1) + local exit_code=$? + + # Echo the output + echo "$output" + + # Parse test statistics from output using awk + # Look for lines like "Total tests: 7", "Passed: 7", "Failed: 0" + # Remove ANSI color codes before parsing + local clean_output=$(echo "$output" | sed 's/\x1b\[[0-9;]*m//g') + local suite_total=$(echo "$clean_output" | grep -E "Total tests:" | tail -1 | awk '{print $NF}') + local suite_passed=$(echo "$clean_output" | grep -E "Passed:" | tail -1 | awk '{print $NF}') + local suite_failed=$(echo "$clean_output" | grep -E "Failed:" | tail -1 | awk '{print $NF}') + + # Default to 0 if not found + suite_total=${suite_total:-0} + suite_passed=${suite_passed:-0} + suite_failed=${suite_failed:-0} + + # Validate that they are numbers + [[ ! "$suite_total" =~ ^[0-9]+$ ]] && suite_total=0 + [[ ! "$suite_passed" =~ ^[0-9]+$ ]] && suite_passed=0 + [[ ! "$suite_failed" =~ ^[0-9]+$ ]] && suite_failed=0 + + # Store results + SUITE_NAMES+=("$suite_name") + SUITE_PASSED+=($suite_passed) + SUITE_FAILED+=($suite_failed) + + # Update totals + TOTAL_TESTS=$((TOTAL_TESTS + suite_total)) + TOTAL_PASSED=$((TOTAL_PASSED + suite_passed)) + TOTAL_FAILED=$((TOTAL_FAILED + suite_failed)) + + if [ $exit_code -eq 0 ]; then echo -e "${GREEN}✓ $suite_name PASSED${NC}" PASSED_SUITES=$((PASSED_SUITES + 1)) + SUITE_STATUS+=("PASS") return 0 else echo -e "${RED}✗ $suite_name FAILED${NC}" FAILED_SUITES=$((FAILED_SUITES + 1)) + SUITE_STATUS+=("FAIL") return 1 fi } @@ -58,20 +108,71 @@ run_test_suite "Compilation Test" "$SCRIPT_DIR/test_compilation.sh" run_test_suite "Error Handling Test" "$SCRIPT_DIR/test_error_handling.sh" run_test_suite "Execution Test" "$SCRIPT_DIR/test_execution.sh" -# Print final summary +# Print detailed summary +echo "" +echo -e "${CYAN}╔════════════════════════════════════════════════════════╗" +echo "║ YueScript CLI Test Results Summary ║" +echo "╚════════════════════════════════════════════════════════╝${NC}" +echo "" + +# Print per-suite statistics +echo -e "${CYAN}Test Suite Details:${NC}" +echo "┌────────────────────────────────┬────────┬────────┬────────┬──────────┐" +echo "│ Test Suite │ Total │ Passed │ Failed │ Status │" +echo "├────────────────────────────────┼────────┼────────┼────────┼──────────┤" + +for ((i=0; i