1+ #! /bin/bash
2+
3+ # Script to generate a markdown summary from Kuick TRX test results
4+ # Usage: ./GenerateSummary.sh
5+ # Input: TestResults/Kuick.trx or TestResults/Kuick.trx.backup
6+ # Output: TestResults/KUICK.md
7+
8+ set -e
9+
10+ TRX_FILE=" TestResults/Kuick.trx"
11+ BACKUP_TRX_FILE=" TestResults/Kuick.trx.backup"
12+ XML_FILE=" TestResults/Kuick.xml"
13+ OUTPUT_FILE=" TestResults/KUICK.md"
14+
15+ # Check for TRX file, fall back to backup, then XML if neither TRX exists
16+ if [ -f " $TRX_FILE " ]; then
17+ SOURCE_FILE=" $TRX_FILE "
18+ elif [ -f " $BACKUP_TRX_FILE " ]; then
19+ SOURCE_FILE=" $BACKUP_TRX_FILE "
20+ elif [ -f " $XML_FILE " ]; then
21+ SOURCE_FILE=" $XML_FILE "
22+ else
23+ echo " Error: No test results file found at $TRX_FILE , $BACKUP_TRX_FILE , or $XML_FILE "
24+ echo " Please run ./GenerateKuick-trx.sh first"
25+ exit 1
26+ fi
27+
28+ echo " Generating markdown summary from $SOURCE_FILE ..."
29+
30+ # Create output directory if it doesn't exist
31+ mkdir -p TestResults
32+
33+ # Parse TRX file and generate markdown
34+ cat > " $OUTPUT_FILE " << 'EOF '
35+ # Kuick Test Results Summary
36+
37+ ## Overall Statistics
38+
39+ EOF
40+
41+ # Extract overall statistics
42+ TOTAL_TESTS=$( grep -o ' total="[0-9]*"' " $SOURCE_FILE " | head -1 | sed ' s/total="//;s/"//' )
43+ EXECUTED_TESTS=$( grep -o ' executed="[0-9]*"' " $SOURCE_FILE " | head -1 | sed ' s/executed="//;s/"//' )
44+ PASSED_TESTS=$( grep -o ' passed="[0-9]*"' " $SOURCE_FILE " | head -1 | sed ' s/passed="//;s/"//' )
45+ FAILED_TESTS=$( grep -o ' failed="[0-9]*"' " $SOURCE_FILE " | head -1 | sed ' s/failed="//;s/"//' )
46+
47+ echo " | Metric | Count | Status |" >> " $OUTPUT_FILE "
48+ echo " |--------|-------|--------|" >> " $OUTPUT_FILE "
49+ echo " | Total Tests | $TOTAL_TESTS | ℹ️ |" >> " $OUTPUT_FILE "
50+ echo " | Executed | $EXECUTED_TESTS | ▶️ |" >> " $OUTPUT_FILE "
51+ echo " | Passed | $PASSED_TESTS | ✅ |" >> " $OUTPUT_FILE "
52+ echo " | Failed | $FAILED_TESTS | ❌ |" >> " $OUTPUT_FILE "
53+ echo " " >> " $OUTPUT_FILE "
54+
55+ # Add test class breakdown
56+ echo " ## Test Method Breakdown" >> " $OUTPUT_FILE "
57+ echo " " >> " $OUTPUT_FILE "
58+ echo " | Status | Details | Test Method |" >> " $OUTPUT_FILE "
59+ echo " |--------|---------|-------------|" >> " $OUTPUT_FILE "
60+
61+ # Create temporary files for processing
62+ TEMP_CLASSES=$( mktemp)
63+ TEMP_SORTED=$( mktemp)
64+
65+ # Extract test results and group by class
66+ grep -o ' <UnitTestResult.*testName="[^"]*".*outcome="[^"]*"' " $SOURCE_FILE " | while IFS= read -r line; do
67+ TEST_NAME=$( echo " $line " | sed ' s/.*testName="//;s/".*$//' | sed ' s/"/"/g;s/&/\&/g;s/</</g;s/>/>/g' )
68+ OUTCOME=$( echo " $line " | sed ' s/.*outcome="//;s/".*$//' )
69+
70+ # Extract method name (everything before the first parenthesis)
71+ METHOD_NAME=$( echo " $TEST_NAME " | sed ' s/(.*//' )
72+
73+ echo " $METHOD_NAME |$OUTCOME "
74+ done > " $TEMP_CLASSES "
75+
76+ # Sort by class name and count occurrences
77+ sort " $TEMP_CLASSES " | uniq -c | sort -k3 > " $TEMP_SORTED "
78+
79+ # Process sorted results
80+ while read count class_outcome; do
81+ METHOD=$( echo " $class_outcome " | cut -d' |' -f1)
82+ OUTCOME=$( echo " $class_outcome " | cut -d' |' -f2)
83+
84+ if [ " $OUTCOME " = " Passed" ]; then
85+ EMOJI=" ✅"
86+ STATUS=" $count passed"
87+ else
88+ EMOJI=" ❌"
89+ STATUS=" $count failed"
90+ fi
91+
92+ echo " | $EMOJI | $STATUS | \` $METHOD \` |" >> " $OUTPUT_FILE "
93+ done < " $TEMP_SORTED "
94+
95+ # Clean up temporary files
96+ rm -f " $TEMP_CLASSES " " $TEMP_SORTED "
97+
98+ # Add detailed test results
99+ echo " ## Detailed Test Results" >> " $OUTPUT_FILE "
100+ echo " " >> " $OUTPUT_FILE "
101+ echo " | Status | Error Details | Test Name |" >> " $OUTPUT_FILE "
102+ echo " |--------|---------------|-----------|" >> " $OUTPUT_FILE "
103+
104+ # Create temporary file for test results
105+ TEMP_TESTS=$( mktemp)
106+
107+ # Extract all test results with details
108+ grep -o ' <UnitTestResult.*testName="[^"]*".*outcome="[^"]*"' " $SOURCE_FILE " | while IFS= read -r line; do
109+ TEST_NAME=$( echo " $line " | sed ' s/.*testName="//;s/".*$//' | sed ' s/"/"/g;s/&/\&/g;s/</</g;s/>/>/g' )
110+ OUTCOME=$( echo " $line " | sed ' s/.*outcome="//;s/".*$//' )
111+
112+ # Clean up test name (remove class prefix and parameters)
113+ CLEAN_NAME=$( echo " $TEST_NAME " | sed ' s/.*\.\([^.]*\)(\(.*\))/\1(\2)/' )
114+
115+ if [ " $OUTCOME " = " Passed" ]; then
116+ EMOJI=" ✅"
117+ ERROR_DETAILS=" N/A"
118+ else
119+ EMOJI=" ❌"
120+ ERROR_DETAILS=" Test failed - see full TRX for details"
121+ fi
122+
123+ echo " $CLEAN_NAME |$EMOJI |$ERROR_DETAILS "
124+ done > " $TEMP_TESTS "
125+
126+ # Sort by test name and output to markdown
127+ sort " $TEMP_TESTS " | while IFS=' |' read -r clean_name emoji error_details; do
128+ echo " | $emoji | $error_details | \` $clean_name \` |" >> " $OUTPUT_FILE "
129+ done
130+
131+ # Clean up temporary file
132+ rm -f " $TEMP_TESTS "
133+
134+ echo " " >> " $OUTPUT_FILE "
135+ echo " ---" >> " $OUTPUT_FILE "
136+ echo " *Generated on $( date) *" >> " $OUTPUT_FILE "
137+ echo " " >> " $OUTPUT_FILE "
138+ echo " 📁 **Full results**: [Kuick.xml](./Kuick.xml)" >> " $OUTPUT_FILE "
139+
140+ echo " ✅ Markdown summary generated at $OUTPUT_FILE "
0 commit comments