2024-08-12 14:33:28 +00:00
#!/usr/bin/env bash
set -e
DIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
LADYBIRD_SOURCE_DIR = " $( realpath " ${ DIR } " /..) "
WPT_SOURCE_DIR = ${ WPT_SOURCE_DIR :- " ${ LADYBIRD_SOURCE_DIR } /Tests/LibWeb/WPT/wpt " }
WPT_REPOSITORY_URL = ${ WPT_REPOSITORY_URL :- "https://github.com/web-platform-tests/wpt.git" }
2024-08-15 22:12:40 +00:00
# shellcheck source=/dev/null
. " ${ DIR } /shell_include.sh "
2024-08-15 22:14:04 +00:00
default_binary_path( ) {
if [ " $( uname -s) " = "Darwin" ] ; then
echo " ${ LADYBIRD_SOURCE_DIR } /Build/ladybird/bin/Ladybird.app/Contents/MacOS/ "
else
echo " ${ LADYBIRD_SOURCE_DIR } /Build/ladybird/bin/ "
fi
}
LADYBIRD_BINARY = ${ LADYBIRD_BINARY :- " $( default_binary_path) /Ladybird " }
WEBDRIVER_BINARY = ${ WEBDRIVER_BINARY :- " $( default_binary_path) /WebDriver " }
2024-08-15 22:12:40 +00:00
WPT_PROCESSES = ${ WPT_PROCESSES :- $( get_number_of_processing_units) }
2024-08-12 14:33:28 +00:00
WPT_CERTIFICATES = (
"tools/certs/cacert.pem"
" ${ LADYBIRD_SOURCE_DIR } /Build/ladybird/Lagom/cacert.pem "
)
WPT_ARGS = ( " --binary= ${ LADYBIRD_BINARY } "
" --webdriver-binary= ${ WEBDRIVER_BINARY } "
"--install-webdriver"
" --processes= ${ WPT_PROCESSES } "
"--webdriver-arg=--force-cpu-painting"
"--no-pause-after-test"
"-f"
" ${ EXTRA_WPT_ARGS [@] } "
)
ARG0 = $0
print_help( ) {
NAME = $( basename " $ARG0 " )
cat <<EOF
Usage: $NAME COMMAND [ OPTIONS..] [ TESTS...]
Supported COMMANDs:
update: Update the Web Platform Tests repository.
run: $NAME run [ OPTIONS...] [ TESTS...]
Run the Web Platform Tests.
compare: $NAME compare [ OPTIONS...] LOG_FILE [ TESTS...]
Run the Web Platform Tests comparing the results to the expectations in LOG_FILE.
Examples:
$NAME update
Updates the Web Platform Tests repository.
$NAME run
Run all of the Web Platform Tests.
$NAME run --log expectations.log css dom
Run the Web Platform Tests in the 'css' and 'dom' directories and save the output to expectations.log.
2024-09-13 22:50:16 +00:00
$NAME run --log-wptreport expectations.json --log-wptscreenshot expectations.db css dom
Run the Web Platform Tests in the 'css' and 'dom' directories; save the output in wptreport format to expectations.json and save screenshots to expectations.db.
2024-08-12 14:33:28 +00:00
$NAME compare expectations.log
Run all of the Web Platform Tests comparing the results to the expectations in before.log.
$NAME compare --log results.log expectations.log css/CSS2
Run the Web Platform Tests in the 'css/CSS2' directory, comparing the results to the expectations in expectations.log; output the results to results.log.
EOF
}
usage( ) {
>& 2 print_help
exit 1
}
CMD = $1
[ -n " $CMD " ] || usage
shift
if [ " $CMD " = "--help" ] || [ " $CMD " = "help" ] ; then
print_help
exit 0
fi
ARG = $1
2024-09-13 22:50:16 +00:00
while [ [ " $ARG " = ~ ^--log( -( raw| unittest| xunit| html| mach| tbpl| grouped| chromium| wptreport| wptscreenshot) ) ?$ ] ] ; do
case " $ARG " in
--log)
LOG_TYPE = "--log-raw"
; ;
*)
LOG_TYPE = " $ARG "
; ;
esac
2024-08-12 14:33:28 +00:00
shift
LOG_NAME = " $( pwd -P) / $1 "
[ -n " $LOG_NAME " ] || usage;
2024-09-13 22:50:16 +00:00
WPT_ARGS += ( " ${ LOG_TYPE } = ${ LOG_NAME } " )
2024-08-12 14:33:28 +00:00
shift
2024-09-13 22:50:16 +00:00
ARG = $1
done
2024-08-12 14:33:28 +00:00
TEST_LIST = ( " $@ " )
exit_if_running_as_root "Do not run WPT.sh as root"
ensure_wpt_repository( ) {
mkdir -p " ${ WPT_SOURCE_DIR } "
pushd " ${ WPT_SOURCE_DIR } " > /dev/null
if [ ! -d .git ] ; then
git clone --depth 1 " ${ WPT_REPOSITORY_URL } " " ${ WPT_SOURCE_DIR } "
fi
2024-08-15 22:06:36 +00:00
# Update hosts file if needed
if [ " $( comm -13 <( sort -u /etc/hosts) <(./wpt make-hosts-file | sort -u) | wc -l) " -gt 0 ] ; then
echo "Enter superuser password to append wpt hosts to /etc/hosts"
./wpt make-hosts-file | sudo tee -a /etc/hosts
fi
2024-08-12 14:33:28 +00:00
popd > /dev/null
}
build_ladybird_and_webdriver( ) {
" ${ DIR } " /ladybird.sh build WebDriver
}
update_wpt( ) {
ensure_wpt_repository
pushd " ${ WPT_SOURCE_DIR } " > /dev/null
git pull
popd > /dev/null
}
execute_wpt( ) {
pushd " ${ WPT_SOURCE_DIR } " > /dev/null
for certificate_path in " ${ WPT_CERTIFICATES [@] } " ; do
if [ ! -f " ${ certificate_path } " ] ; then
echo " Certificate not found: \" ${ certificate_path } \" "
exit 1
fi
WPT_ARGS += ( " --webdriver-arg=--certificate= ${ certificate_path } " )
done
2024-08-15 22:16:14 +00:00
QT_QPA_PLATFORM = "offscreen" ./wpt run " ${ WPT_ARGS [@] } " ladybird " ${ TEST_LIST [@] } "
2024-08-12 14:33:28 +00:00
popd > /dev/null
}
run_wpt( ) {
ensure_wpt_repository
build_ladybird_and_webdriver
execute_wpt
}
compare_wpt( ) {
ensure_wpt_repository
METADATA_DIR = $( mktemp -d)
pushd " ${ WPT_SOURCE_DIR } " > /dev/null
./wpt update-expectations --product ladybird --full --metadata= " ${ METADATA_DIR } " " ${ INPUT_LOG_NAME } "
popd > /dev/null
WPT_ARGS += ( " --metadata= ${ METADATA_DIR } " )
build_ladybird_and_webdriver
execute_wpt
rm -rf " ${ METADATA_DIR } "
}
if [ [ " $CMD " = ~ ^( update| run| compare) $ ] ] ; then
case " $CMD " in
update)
update_wpt
; ;
run)
run_wpt
; ;
compare)
INPUT_LOG_NAME = " $( pwd -P) / $1 "
if [ ! -f " $INPUT_LOG_NAME " ] ; then
echo " Log file not found: \" ${ INPUT_LOG_NAME } \" "
usage;
fi
shift
compare_wpt
; ;
esac
else
>& 2 echo " Unknown command: $CMD "
usage
fi