playwright/test/installation-tests/installation-tests.sh

150 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
set -e
set +x
trap "cd $(pwd -P)" EXIT
cd "$(dirname $0)"
# 1. Pack all packages.
rm -rf ./output
mkdir ./output
cd ./output
npm pack ../../..
npm pack ../../../packages/playwright
npm pack ../../../packages/playwright-chromium
npm pack ../../../packages/playwright-webkit
npm pack ../../../packages/playwright-firefox
# cleanup environment
unset PLAYWRIGHT_DOWNLOAD_HOST
unset PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD
export PLAYWRIGHT_BROWSERS_PATH=0
# There is no option to specify output for `npm pack`, but the format is
# fixed.
PACKAGE_VERSION=$(node -e 'console.log(require("../../../package.json").version)')
PLAYWRIGHT_CORE_TGZ="$(pwd -P)/playwright-core-${PACKAGE_VERSION}.tgz"
PLAYWRIGHT_TGZ="$(pwd -P)/playwright-${PACKAGE_VERSION}.tgz"
PLAYWRIGHT_CHROMIUM_TGZ="$(pwd -P)/playwright-chromium-${PACKAGE_VERSION}.tgz"
PLAYWRIGHT_WEBKIT_TGZ="$(pwd -P)/playwright-webkit-${PACKAGE_VERSION}.tgz"
PLAYWRIGHT_FIREFOX_TGZ="$(pwd -P)/playwright-firefox-${PACKAGE_VERSION}.tgz"
SANITY_JS="$(pwd -P)/../sanity.js"
TEST_ROOT="$(pwd -P)"
function run_tests {
test_skip_browser_download
test_playwright_global_installation_subsequent_installs
test_playwright_should_work
test_playwright_chromium_should_work
test_playwright_webkit_should_work
test_playwright_firefox_should_work
test_playwright_global_installation
}
function test_playwright_global_installation {
initialize_test "${FUNCNAME[0]}"
local BROWSERS="$(pwd -P)/browsers"
PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_CORE_TGZ}
PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_TGZ}
if [[ ! -d "${BROWSERS}" ]]; then
echo "Directory for shared browsers was not created!"
exit 1
fi
cp ${SANITY_JS} .
if node sanity.js playwright chromium 2>/dev/null; then
echo "Should not be able to launch chromium without PLAYWRIGHT_BROWSERS_PATH variable!"
exit 1
fi
PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node sanity.js playwright chromium
}
# @see https://github.com/microsoft/playwright/issues/1651
function test_playwright_global_installation_subsequent_installs {
initialize_test "${FUNCNAME[0]}"
local BROWSERS="$(pwd -P)/browsers"
mkdir install-1 && pushd install-1 && npm init -y
PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_CORE_TGZ}
PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" npm install ${PLAYWRIGHT_TGZ}
# Note: the `npm install` would not actually crash, the error
# is merely logged to the console. To reproduce the error, we should make
# sure that script's install.js can be run subsequently without unhandled promise rejections.
# Note: the flag `--unahdnled-rejections=strict` will force node to terminate in case
# of UnhandledPromiseRejection.
PLAYWRIGHT_BROWSERS_PATH="${BROWSERS}" node --unhandled-rejections=strict node_modules/playwright/install.js
}
function test_skip_browser_download {
initialize_test "${FUNCNAME[0]}"
npm install ${PLAYWRIGHT_CORE_TGZ}
OUTPUT=$(PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install ${PLAYWRIGHT_TGZ})
if [[ "${OUTPUT}" != *"Skipping browsers download because"* ]]; then
echo "missing log message that browsers download is skipped"
exit 1
fi
if [[ -d ./node_modules/playwright/.local-browsers ]]; then
echo "local browsers folder should be empty"
exit 1
fi
}
function test_playwright_should_work {
initialize_test "${FUNCNAME[0]}"
npm install ${PLAYWRIGHT_CORE_TGZ}
npm install ${PLAYWRIGHT_TGZ}
cp ${SANITY_JS} . && node sanity.js playwright chromium firefox webkit
}
function test_playwright_chromium_should_work {
initialize_test "${FUNCNAME[0]}"
npm install ${PLAYWRIGHT_CORE_TGZ}
npm install ${PLAYWRIGHT_CHROMIUM_TGZ}
cp ${SANITY_JS} . && node sanity.js playwright-chromium chromium
}
function test_playwright_webkit_should_work {
initialize_test "${FUNCNAME[0]}"
npm install ${PLAYWRIGHT_CORE_TGZ}
npm install ${PLAYWRIGHT_WEBKIT_TGZ}
cp ${SANITY_JS} . && node sanity.js playwright-webkit webkit
}
function test_playwright_firefox_should_work {
initialize_test "${FUNCNAME[0]}"
npm install ${PLAYWRIGHT_CORE_TGZ}
npm install ${PLAYWRIGHT_FIREFOX_TGZ}
cp ${SANITY_JS} . && node sanity.js playwright-firefox firefox
}
function initialize_test {
cd ${TEST_ROOT}
local TEST_NAME="./$1"
mkdir ${TEST_NAME} && cd ${TEST_NAME} && npm init -y
echo "====================================================================================="
echo "====================================================================================="
echo
echo " RUNNING TEST: ${TEST_NAME}"
echo
echo "====================================================================================="
echo "====================================================================================="
}
# Run all tests
# Script will terminate if there's some error somewhere.
run_tests
echo
echo "SUCCESS!"