#!/usr/bin/env bash
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do
SCRIPT_PATH="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
done
export SCRIPT_PATH="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
source $SCRIPT_PATH/../package/scripts/common/utils.sh
export QUARTO_ROOT="`cd "$SCRIPT_PATH/.." > /dev/null 2>&1 && pwd`"
QUARTO_SRC_DIR="$QUARTO_ROOT/src"
DENO_ARCH_DIR=$DENO_DIR
DENO_DIR="$QUARTO_ROOT/package/dist/bin/"
QUARTO_IMPORT_MAP_ARG=--importmap=$QUARTO_SRC_DIR/import_map.json
export QUARTO_BIN_PATH=$DENO_DIR
export QUARTO_SHARE_PATH="`cd "$QUARTO_ROOT/src/resources/";pwd`"
export QUARTO_DEBUG=true
QUARTO_DENO_OPTIONS="--config test-conf.json --v8-flags=--enable-experimental-regexp-engine,--max-old-space-size=8192,--max-heap-size=8192 --unstable-kv --unstable-ffi --no-lock --allow-all"
if [[ -z $GITHUB_ACTION ]] && [[ -z $QUARTO_TESTS_NO_CONFIG ]]
then
echo "> Checking and configuring environment for tests"
source configure-test-env.sh
fi
if [[ -z $QUARTO_TESTS_FORCE_NO_VENV && -n $QUARTO_TESTS_FORCE_NO_PIPENV ]]; then
export QUARTO_TESTS_FORCE_NO_VENV=$QUARTO_TESTS_FORCE_NO_PIPENV
fi
if [[ -z $QUARTO_TESTS_FORCE_NO_VENV ]]
then
OLD_VIRTUAL_ENV=$VIRTUAL_ENV
echo "> Activating virtualenv from .venv for Python tests in Quarto"
source "${QUARTO_ROOT}/tests/.venv/bin/activate"
echo "> Using Python from $(which python)"
echo "> VIRTUAL_ENV: ${VIRTUAL_ENV}"
quarto_venv_activated="true"
fi
SMOKE_ALL_TEST_FILE="./smoke/smoke-all.test.ts"
if [ "$QUARTO_TEST_TIMING" != "" ] && [ "$QUARTO_TEST_TIMING" != "false" ]; then
if [ "$QUARTO_TEST_TIMING" == "true" ]; then
QUARTO_TEST_TIMING="timing.txt"
fi
echo "> Running tests with timing and writing to ${QUARTO_TEST_TIMING}"
rm -f $QUARTO_TEST_TIMING
FILES=$@
if [ "$FILES" == "" ]; then
FILES=`find . | grep \.test\.ts$ | sort`
fi
for i in $FILES; do
if [ "$i" == "./test.ts" ]; then
continue
fi
if [ "$i" == "$SMOKE_ALL_TEST_FILE" ]; then
echo "> Timing smoke-all tests"
SMOKE_ALL_FILES=`find docs/smoke-all/ -type f -regextype "posix-extended" -regex ".*/[^_][^/]*[.]qmd" -o -regex ".*/[^_][^/]*[.]md" -o -regex ".*/[^_][^/]*[.]ipynb"`
for j in $SMOKE_ALL_FILES; do
echo "${SMOKE_ALL_TEST_FILE} -- ${j}" >> "$QUARTO_TEST_TIMING"
/usr/bin/time -f " %e real %U user %S sys" -a -o ${QUARTO_TEST_TIMING} "${DENO_DIR}/tools/${DENO_ARCH_DIR}/deno" test ${QUARTO_DENO_OPTIONS} --no-check ${QUARTO_DENO_EXTRA_OPTIONS} "${QUARTO_IMPORT_MAP_ARG}" ${SMOKE_ALL_TEST_FILE} -- ${j}
done
continue
fi
echo $i >> "$QUARTO_TEST_TIMING"
/usr/bin/time -f " %e real %U user %S sys" -a -o "$QUARTO_TEST_TIMING" "${DENO_DIR}/tools/${DENO_ARCH_DIR}/deno" test ${QUARTO_DENO_OPTIONS} --no-check ${QUARTO_DENO_EXTRA_OPTIONS} "${QUARTO_IMPORT_MAP_ARG}" $i
done
grep -q 'Command exited with non-zero status' $QUARTO_TEST_TIMING && SUCCESS=1 || SUCCESS=0
else
if [[ "$1" =~ smoke-all\.test\.ts ]]; then
TESTS_TO_RUN=$@
else
SMOKE_ALL_FILES=""
TESTS_TO_RUN=""
if [[ ! -z "$*" ]]; then
for file in "$*"; do
echo $file
filename=$(basename "$file")
if [[ $filename =~ ^[^_].*[.]qmd$ ]] || [[ $filename =~ ^[^_].*[.]ipynb$ ]] || [[ $filename =~ ^[^_].*[.]md$ ]]; then
SMOKE_ALL_FILES="${SMOKE_ALL_FILES} ${file}"
elif [[ $file =~ .*[.]ts$ ]]; then
TESTS_TO_RUN="${TESTS_TO_RUN} ${file}"
echo $TESTS_TO_RUN
else
echo "#### WARNING"
echo "Only .ts, or .qmd, .md and .ipynb passed to smoke-all.test.ts are accepted (file starting with _ are ignored)."
echo "####"
exit 1
fi
done
fi
if [ "$SMOKE_ALL_FILES" != "" ]; then
if [ "$TESTS_TO_RUN" != "" ]; then
echo "#### WARNING"
echo "When passing .qmd, .md and/or .ipynb, only ./smoke/smoke-all.test.ts will be run. Other tests files are ignored."
echo "Ignoring ${TESTS_TO_RUN}."
echo "####"
fi
TESTS_TO_RUN="${SMOKE_ALL_TEST_FILE} -- ${SMOKE_ALL_FILES}"
fi
fi
"${DENO_DIR}/tools/${DENO_ARCH_DIR}/deno" test ${QUARTO_DENO_OPTIONS} --check ${QUARTO_DENO_EXTRA_OPTIONS} "${QUARTO_IMPORT_MAP_ARG}" $TESTS_TO_RUN
SUCCESS=$?
fi
if [[ $quarto_venv_activated == "true" ]]
then
echo "> Exiting virtualenv activated for tests"
deactivate
echo "> Using Python from $(which python)"
echo "> VIRTUAL_ENV: ${VIRTUAL_ENV}"
unset quarto_venv_activated
fi
if [[ -n $OLD_VIRTUAL_ENV ]]
then
echo "> Reactivating original virtualenv"
source $OLD_VIRTUAL_ENV/bin/activate
echo "> Using Python from $(which python)"
echo "> VIRTUAL_ENV: ${VIRTUAL_ENV}"
unset OLD_VIRTUAL_ENV
fi
if [[ $@ == *"--coverage"* ]]; then
[[ $@ =~ .*--coverage=(.+) ]] && export COV="${BASH_REMATCH[1]}"
echo Generating coverage report...
${DENO_DIR}/deno coverage --unstable-kv --unstable-ffi ${COV} --lcov > ${COV}.lcov
genhtml -o ${COV}/html ${COV}.lcov
open ${COV}/html/index.html
fi
exit ${SUCCESS}