#!/usr/bin/env bash # SPDX-License-Identifier: AGPL-3.0-or-later test.help(){ cat < pyrightconfig.json build_msg TEST "[pyright/types] static type check of python sources" build_msg TEST " --> typeCheckingMode: on" node.env.dev build_msg TEST "[pyright/types] suppress warnings related to intentional monkey patching" # We run Pyright in the virtual environment because pyright executes # "python" to determine the Python version. pyenv.cmd npx --no-install pyright -p pyrightconfig.json \ | grep -E '\.py:[0-9]+:[0-9]+'\ | grep -v '/engines/.*.py.* - warning: "logger" is not defined'\ | grep -v '/plugins/.*.py.* - error: "logger" is not defined'\ | grep -v '/engines/.*.py.* - warning: "supported_languages" is not defined' \ | grep -v '/engines/.*.py.* - warning: "language_aliases" is not defined' \ | grep -v '/engines/.*.py.* - warning: "categories" is not defined' # ignore exit value from pyright # dump_return ${PIPESTATUS[0]} return 0 } test.types.ci() { # use this pyright test for CI / disables typeCheckingMode, needed as long # we do not have fixed all typification issues. # # --> pyrightconfig-ci.json build_msg TEST "[pyright] static type check of python sources" build_msg TEST " --> typeCheckingMode: off !!!" node.env.dev build_msg TEST "[pyright] suppress warnings related to intentional monkey patching" # We run Pyright in the virtual environment because pyright executes # "python" to determine the Python version. pyenv.cmd npx --no-install pyright -p pyrightconfig-ci.json \ | grep -E '\.py:[0-9]+:[0-9]+'\ | grep -v '/engines/.*.py.* - warning: "logger" is not defined'\ | grep -v '/plugins/.*.py.* - error: "logger" is not defined'\ | grep -v '/engines/.*.py.* - warning: "supported_languages" is not defined' \ | grep -v '/engines/.*.py.* - warning: "language_aliases" is not defined' \ | grep -v '/engines/.*.py.* - warning: "categories" is not defined' # ignore exit value from pyright # dump_return ${PIPESTATUS[0]} return 0 } test.black() { build_msg TEST "[black] \$BLACK_TARGETS" pyenv.cmd black --check --diff "${BLACK_OPTIONS[@]}" "${BLACK_TARGETS[@]}" dump_return $? } test.unit() { build_msg TEST 'tests/unit' # shellcheck disable=SC2086 pyenv.cmd python -m nose2 ${TEST_NOSE2_VERBOSE} -s tests/unit dump_return $? } test.coverage() { build_msg TEST 'unit test coverage' ( set -e pyenv.activate # shellcheck disable=SC2086 python -m nose2 ${TEST_NOSE2_VERBOSE} -C --log-capture --with-coverage --coverage searx -s tests/unit coverage report coverage html ) dump_return $? } test.robot() { build_msg TEST 'robot' gecko.driver PYTHONPATH=. pyenv.cmd python -m tests.robot dump_return $? } test.rst() { build_msg TEST "[reST markup] ${RST_FILES[*]}" for rst in "${RST_FILES[@]}"; do pyenv.cmd rst2html --halt error "$rst" > /dev/null || die 42 "fix issue in $rst" done } test.themes() { build_msg TEST 'SearXNG themes' themes.test dump_return $? } test.pybabel() { TEST_BABEL_FOLDER="build/test/pybabel" build_msg TEST "[extract messages] pybabel" mkdir -p "${TEST_BABEL_FOLDER}" pyenv.cmd pybabel extract -F babel.cfg -o "${TEST_BABEL_FOLDER}/messages.pot" searx } test.clean() { build_msg CLEAN "test stuff" rm -rf geckodriver.log .coverage coverage/ dump_return $? }