Initial import of Dillo
This commit is contained in:
107
test/html/driver.sh
Executable file
107
test/html/driver.sh
Executable file
@ -0,0 +1,107 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# File: driver.sh
|
||||
#
|
||||
# Copyright (C) 2023-2024 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
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
DILLOBIN=${DILLOBIN:-$TOP_BUILDDIR/src/dillo}
|
||||
|
||||
if [ ! -e $DILLOBIN ]; then
|
||||
echo missing dillo binary, set DILLOBIN with the path to dillo
|
||||
exit 1
|
||||
fi
|
||||
|
||||
magick_bin="convert"
|
||||
if command -v magick 2>&1 >/dev/null; then
|
||||
magick_bin="magick"
|
||||
fi
|
||||
|
||||
function render_page() {
|
||||
htmlfile="$1"
|
||||
outpic="$2"
|
||||
|
||||
"$DILLOBIN" -f "$htmlfile" &
|
||||
dillopid=$!
|
||||
|
||||
# TODO: We need a better system to determine when the page loaded
|
||||
sleep 1
|
||||
|
||||
# Capture only Dillo window
|
||||
winid=$(xwininfo -all -root | awk '/Dillo:/ {print $1}')
|
||||
if [ -z "$winid" ]; then
|
||||
echo "cannot find Dillo window" >&2
|
||||
exit 1
|
||||
fi
|
||||
xwd -id "$winid" -silent | ${magick_bin} xwd:- png:${outpic}
|
||||
|
||||
kill "$dillopid"
|
||||
}
|
||||
|
||||
function test_file() {
|
||||
html_file="$1"
|
||||
|
||||
if [ ! -e "$html_file" ]; then
|
||||
echo "missing test file: $html_file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ref_file="${html_file%.html}.ref.html"
|
||||
if [ ! -e "$ref_file" ]; then
|
||||
echo "missing reference file: $ref_file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
test_name=$(basename "$html_file")
|
||||
wdir="${test_name}_wdir"
|
||||
|
||||
# Clean any previous files
|
||||
rm -rf "$wdir"
|
||||
mkdir -p "$wdir"
|
||||
|
||||
# Use a FIFO to read the display number
|
||||
mkfifo "$wdir/display.fifo"
|
||||
exec 6<> "$wdir/display.fifo"
|
||||
Xvfb -screen 5 1024x768x24 -displayfd 6 &
|
||||
xorgpid=$!
|
||||
|
||||
# Always kill Xvfb on exit
|
||||
trap "kill $xorgpid" EXIT
|
||||
|
||||
read dispnum < "$wdir/display.fifo"
|
||||
export DISPLAY=":$dispnum"
|
||||
|
||||
render_page "$html_file" "$wdir/html.png"
|
||||
render_page "$ref_file" "$wdir/ref.png"
|
||||
|
||||
# AE = Absolute Error count of the number of different pixels
|
||||
diffcount=$(compare -metric AE "$wdir/html.png" "$wdir/ref.png" "$wdir/diff.png" 2>&1 || true)
|
||||
|
||||
# The test passes only if both images are identical
|
||||
if [ "$diffcount" = "0" ]; then
|
||||
echo "OK"
|
||||
ret=0
|
||||
else
|
||||
echo "FAIL"
|
||||
ret=1
|
||||
fi
|
||||
|
||||
exec 6>&-
|
||||
rm "$wdir/display.fifo"
|
||||
|
||||
if [ -z "$DILLO_TEST_LEAVE_FILES" ]; then
|
||||
rm -rf "$wdir"
|
||||
fi
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
test_file "$1"
|
||||
exit $?
|
||||
Reference in New Issue
Block a user