@@ -9,6 +9,11 @@ if [ $# -lt 1 ]; then
99 exit 1
1010fi
1111
12+ # near the top
13+ ARTIFACTS_DIR=" ${ARTIFACTS_DIR:- ${GITHUB_WORKSPACE:- $REPO_ROOT } / artifacts} "
14+ mkdir -p " $ARTIFACTS_DIR "
15+ TEST_LOG=" $ARTIFACTS_DIR /connectedAndroidTest.log"
16+
1217GRADLE_PROJECT_DIR=" $1 "
1318
1419SCRIPT_DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd) "
@@ -102,11 +107,77 @@ if [ ! -x "$GRADLE_PROJECT_DIR/gradlew" ]; then
102107 chmod +x " $GRADLE_PROJECT_DIR /gradlew"
103108fi
104109
105- ra_log " Running instrumentation tests from $GRADLE_PROJECT_DIR "
106- ORIGINAL_JAVA_HOME=" ${JAVA_HOME:- } " ; export JAVA_HOME=" $JAVA17_HOME "
110+ set -o pipefail
111+
112+ ra_log " Running instrumentation tests (stdout -> $TEST_LOG ; stderr -> terminal)"
113+ status=0
107114(
108115 cd " $GRADLE_PROJECT_DIR "
109- ./gradlew --no-daemon connectedDebugAndroidTest
116+ # stdout goes to tee+file, stderr remains on the terminal
117+ ./gradlew --no-daemon --console=plain connectedDebugAndroidTest | tee " $TEST_LOG "
118+ ) || status=$?
119+
120+ # Show the log now (helpful for review even on success)
121+ echo
122+ ra_log " ==== Begin connectedAndroidTest.log (tail -n 200) ===="
123+ tail -n 200 " $TEST_LOG " || true
124+ ra_log " ==== End connectedAndroidTest.log ===="
125+ echo
126+
127+ # --- Harvest stdout from connected tests (AGP old & new layouts) ---
128+ RESULTS_ROOT=" $GRADLE_PROJECT_DIR /app/build/outputs/androidTest-results/connected"
129+ ARTIFACTS_DIR=" ${ARTIFACTS_DIR:- ${GITHUB_WORKSPACE:- $REPO_ROOT } / artifacts} "
130+ mkdir -p " $ARTIFACTS_DIR "
131+
132+ # Debug: show what exists
133+ ra_log " Listing connected test outputs under: $RESULTS_ROOT "
134+ find " $RESULTS_ROOT " -maxdepth 4 -printf ' %y %p\n' 2> /dev/null | sed ' s/^/[run-android-instrumentation-tests] /' || true
135+
136+ # Gather candidate XMLs (new: test-result.xml; old: TEST-*.xml)
137+ mapfile -t CANDIDATES < <(
138+ find " $RESULTS_ROOT " -type f \( -name ' test-result.xml' -o -name ' TEST-*.xml' \) -printf ' %T@ %p\n' 2> /dev/null \
139+ | sort -nr \
140+ | awk ' { $1=""; sub(/^ /,""); print }'
110141)
111- export JAVA_HOME=" $ORIGINAL_JAVA_HOME "
142+
143+ if [ " ${# CANDIDATES[@]} " -eq 0 ]; then
144+ ra_log " No connected test XML files found under $RESULTS_ROOT "
145+ else
146+ ra_log " Found ${# CANDIDATES[@]} test result file(s). Will scan for screenshot markers."
147+ fi
148+
149+ # Try each candidate until one yields a non-empty PNG
150+ SCREENSHOT_PATH=" $ARTIFACTS_DIR /emulator-screenshot.png"
151+ : > " $SCREENSHOT_PATH "
152+
153+ extract_from_xml () {
154+ local xml=" $1 " out=" $2 "
155+ # Pull lines strictly between our markers, regardless of XML tag nesting or CDATA
156+ awk '
157+ /<<CN1_SCREENSHOT_BEGIN>>/ {on=1; next}
158+ /<<CN1_SCREENSHOT_END>>/ {on=0}
159+ on { gsub(/\r/,""); printf "%s", $0 } # collapse to a single line for decoder robustness
160+ ' " $xml " | base64 -d > " $out " 2> /dev/null
161+ }
162+
163+ EXTRACTED=0
164+ for xml in " ${CANDIDATES[@]} " ; do
165+ ra_log " Scanning: $xml "
166+ if extract_from_xml " $xml " " $SCREENSHOT_PATH " && [ -s " $SCREENSHOT_PATH " ]; then
167+ ra_log " Screenshot saved: $( ls -lh " $SCREENSHOT_PATH " | awk ' {print $5, $9}' ) "
168+ EXTRACTED=1
169+ break
170+ fi
171+ done
172+
173+ if [ " $EXTRACTED " -ne 1 ]; then
174+ ra_log " No markers found in XML. Dumping any marker snippets for debugging:"
175+ for xml in " ${CANDIDATES[@]} " ; do
176+ ra_log " ---- ${xml} (BEGIN..END) ----"
177+ sed -n ' /<<CN1_SCREENSHOT_BEGIN>>/,/<<CN1_SCREENSHOT_END>>/p' " $xml " || true
178+ done
179+ fi
180+
181+ ra_log " Latest connected test report: ${NEWEST_XML:- <none>} "
182+
112183ra_log " Instrumentation tests completed successfully"
0 commit comments