#!/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"} # shellcheck source=/dev/null . "${DIR}/shell_include.sh" 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"} WPT_PROCESSES=${WPT_PROCESSES:-$(get_number_of_processing_units)} 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 <&2 print_help exit 1 } CMD=$1 [ -n "$CMD" ] || usage shift if [ "$CMD" = "--help" ] || [ "$CMD" = "help" ]; then print_help exit 0 fi ARG=$1 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 shift LOG_NAME="$(pwd -P)/$1" [ -n "$LOG_NAME" ] || usage; WPT_ARGS+=( "${LOG_TYPE}=${LOG_NAME}" ) shift ARG=$1 done 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 # 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 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 QT_QPA_PLATFORM="offscreen" ./wpt run "${WPT_ARGS[@]}" ladybird "${TEST_LIST[@]}" 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