Skip to content

Commit 3f6841c

Browse files
authored
chore: Allow running tests from anywhere and support EXTRA_MODULES (#2725)
* Allow running tests from anywhere in the workspace * Trigger test workflow if run-test.sh changes
1 parent 2f172f6 commit 3f6841c

File tree

2 files changed

+43
-15
lines changed

2 files changed

+43
-15
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ on:
44
push:
55
paths:
66
- ".github/workflows/test.yml"
7+
- "app/run-test.sh"
78
- "app/tests/**"
89
- "app/src/**"
910
- "app/include/**"
1011
pull_request:
1112
paths:
1213
- ".github/workflows/test.yml"
14+
- "app/run-test.sh"
1315
- "app/tests/**"
1416
- "app/src/**"
1517
- "app/include/**"

app/run-test.sh

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,52 +3,78 @@
33
# Copyright (c) 2020 The ZMK Contributors
44
# SPDX-License-Identifier: MIT
55

6+
##
7+
# Optional environment variables, paths can be absolute or relative to $(pwd):
8+
# ZMK_SRC_DIR: Path to zmk/app (default is ./)
9+
# ZMK_BUILD_DIR: Path to build directory (default is $ZMK_SRC_DIR/build)
10+
# ZMK_EXTRA_MODULES: Path to at most one module (in addition to any in west.yml)
11+
# ZMK_TESTS_VERBOSE: Be more verbose
12+
# ZMK_TESTS_AUTO_ACCEPT: Replace snapshot files with new key events
13+
# J: Number of parallel jobs (default is 4)
14+
615
if [ -z "$1" ]; then
716
echo "Usage: ./run-test.sh <path to testcase>"
817
exit 1
918
fi
1019

1120
path="$1"
1221
if [ $path = "all" ]; then
13-
path="tests"
22+
path="${ZMK_SRC_DIR-.}/tests"
1423
fi
1524

25+
ZMK_BUILD_DIR=${ZMK_BUILD_DIR:-${ZMK_SRC_DIR:-.}/build}
26+
mkdir -p ${ZMK_BUILD_DIR}/tests
27+
1628
testcases=$(find $path -name native_posix_64.keymap -exec dirname \{\} \;)
1729
num_cases=$(echo "$testcases" | wc -l)
1830
if [ $num_cases -gt 1 ] || [ "$testcases" != "$path" ]; then
19-
echo "" > ./build/tests/pass-fail.log
20-
echo "$testcases" | xargs -L 1 -P ${J:-4} ./run-test.sh
31+
echo "" >${ZMK_BUILD_DIR}/tests/pass-fail.log
32+
echo "$testcases" | xargs -L 1 -P ${J:-4} ${0}
2133
err=$?
22-
sort -k2 ./build/tests/pass-fail.log
34+
sort -k2 ${ZMK_BUILD_DIR}/tests/pass-fail.log
2335
exit $err
2436
fi
2537

26-
testcase="$path"
38+
testcase=$(realpath $path | sed -n -e "s|.*/tests/||p")
2739
echo "Running $testcase:"
2840

29-
west build -d build/$testcase -b native_posix_64 -- -DCONFIG_ASSERT=y -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1
41+
build_cmd="west build ${ZMK_SRC_DIR:+-s $ZMK_SRC_DIR} -d ${ZMK_BUILD_DIR}/tests/$testcase \
42+
-b native_posix_64 -p -- -DCONFIG_ASSERT=y -DZMK_CONFIG="$(realpath $path)" \
43+
${ZMK_EXTRA_MODULES:+-DZMK_EXTRA_MODULES="$(realpath ${ZMK_EXTRA_MODULES})"}"
44+
45+
if [ -z ${ZMK_TESTS_VERBOSE} ]; then
46+
$build_cmd >/dev/null 2>&1
47+
else
48+
echo "ZMK_SRC_DIR: ${ZMK_SRC_DIR:-.}"
49+
echo "ZMK_BUILD_DIR: $ZMK_BUILD_DIR"
50+
$build_cmd
51+
fi
52+
3053
if [ $? -gt 0 ]; then
31-
echo "FAILED: $testcase did not build" | tee -a ./build/tests/pass-fail.log
54+
echo "FAILED: $testcase did not build" | tee -a ${ZMK_BUILD_DIR}/tests/pass-fail.log
3255
exit 1
3356
fi
3457

35-
./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log
36-
diff -auZ $testcase/keycode_events.snapshot build/$testcase/keycode_events.log
58+
${ZMK_BUILD_DIR}/tests/$testcase/zephyr/zmk.exe |
59+
sed -e "s/.*> //" |
60+
tee ${ZMK_BUILD_DIR}/tests/$testcase/keycode_events_full.log |
61+
sed -n -f $path/events.patterns >${ZMK_BUILD_DIR}/tests/$testcase/keycode_events.log
62+
63+
diff -auZ $path/keycode_events.snapshot ${ZMK_BUILD_DIR}/tests/$testcase/keycode_events.log
3764
if [ $? -gt 0 ]; then
38-
if [ -f $testcase/pending ]; then
39-
echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log
65+
if [ -f $path/pending ]; then
66+
echo "PENDING: $testcase" | tee -a ${ZMK_BUILD_DIR}/tests/pass-fail.log
4067
exit 0
4168
fi
4269

43-
4470
if [ -n "${ZMK_TESTS_AUTO_ACCEPT}" ]; then
4571
echo "Auto-accepting failure for $testcase"
46-
cp build/$testcase/keycode_events.log $testcase/keycode_events.snapshot
72+
cp ${ZMK_BUILD_DIR}/tests/$testcase/keycode_events.log $path/keycode_events.snapshot
4773
else
48-
echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log
74+
echo "FAILED: $testcase" | tee -a ${ZMK_BUILD_DIR}/tests/pass-fail.log
4975
exit 1
5076
fi
5177
fi
5278

53-
echo "PASS: $testcase" | tee -a ./build/tests/pass-fail.log
79+
echo "PASS: $testcase" | tee -a ${ZMK_BUILD_DIR}/tests/pass-fail.log
5480
exit 0

0 commit comments

Comments
 (0)