aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/html/Makefile.am1
-rwxr-xr-xtest/html/driver.sh15
-rw-r--r--test/html/leakfilter.awk14
3 files changed, 27 insertions, 3 deletions
diff --git a/test/html/Makefile.am b/test/html/Makefile.am
index 29fb39f3..648d96c9 100644
--- a/test/html/Makefile.am
+++ b/test/html/Makefile.am
@@ -7,6 +7,7 @@ LOG_COMPILER = $(srcdir)/driver.sh
EXTRA_DIST = \
driver.sh \
+ leakfilter.awk \
manual \
render
diff --git a/test/html/driver.sh b/test/html/driver.sh
index e4fbc739..de753196 100755
--- a/test/html/driver.sh
+++ b/test/html/driver.sh
@@ -2,7 +2,7 @@
#
# File: driver.sh
#
-# Copyright (C) 2023-2024 Rodrigo Arias Mallo <rodarima@gmail.com>
+# Copyright (C) 2023-2025 Rodrigo Arias Mallo <rodarima@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -13,6 +13,10 @@ set -e
set -x
DILLOBIN=${DILLOBIN:-$TOP_BUILDDIR/src/dillo}
+LEAKFILTER=${LEAKFILTER:-$TOP_SRCDIR/test/html/leakfilter.awk}
+
+# Clean asan options if set
+unset ASAN_OPTIONS
if [ ! -e $DILLOBIN ]; then
echo missing dillo binary, set DILLOBIN with the path to dillo
@@ -28,7 +32,7 @@ function render_page() {
htmlfile="$1"
outpic="$2"
- "$DILLOBIN" -f "$htmlfile" &
+ "$DILLOBIN" -f "$htmlfile" 2> dillo.err &
dillopid=$!
# TODO: We need a better system to determine when the page loaded
@@ -53,7 +57,12 @@ function render_page() {
fi
xwd -id "$winid" -silent | ${magick_bin} xwd:- png:${outpic}
- kill "$dillopid"
+ # Exit cleanly
+ kill -USR2 "$dillopid"
+
+ # Dillo may fail due to leaks, but we will check them manually
+ wait "$dillopid" || true
+ awk -f "$LEAKFILTER" < dillo.err
}
function test_file() {
diff --git a/test/html/leakfilter.awk b/test/html/leakfilter.awk
new file mode 100644
index 00000000..381ed0a7
--- /dev/null
+++ b/test/html/leakfilter.awk
@@ -0,0 +1,14 @@
+# Detect beginning of leak message
+/^Direct leak/ { msg=msg "\n" $0; inleak=1; next }
+
+# Ignore anything coming from libfontconfig.so
+inleak && /libfontconfig.so/ { inleak=0; msg="" }
+
+# Store leak line
+inleak && /^ +#/ { msg=msg "\n" $0; next }
+
+# End of the leak lines, print and finish
+inleak { inleak=0; print msg; msg=""; nleaks++ }
+
+# At exit count filtered leaks and fail accordingly
+END { printf "\n==== Total leaks after filter: %d ====\n\n", nleaks; if (nleaks > 0) { exit 1 } }