123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #!/usr/bin/env bash
- # SPDX-License-Identifier: AGPL-3.0-or-later
- test.help(){
- cat <<EOF
- test.:
- yamllint : lint YAML files (YAMLLINT_FILES)
- pylint : lint ./searx, ./searxng_extra and ./tests
- pyright : static type check of python sources (.dev or .ci)
- black : check black code format
- unit : run unit tests
- coverage : run unit tests with coverage
- robot : run robot test
- rst : test .rst files incl. README.rst
- clean : clean intermediate test stuff
- EOF
- }
- if [ "$VERBOSE" = "1" ]; then
- TEST_NOSE2_VERBOSE="-vvv"
- fi
- test.yamllint() {
- build_msg TEST "[yamllint] \$YAMLLINT_FILES"
- pyenv.cmd yamllint --strict --format parsable "${YAMLLINT_FILES[@]}"
- dump_return $?
- }
- test.pylint() {
- ( set -e
- pyenv.activate
- PYLINT_OPTIONS="--rcfile .pylintrc"
- build_msg TEST "[pylint] ./searx/engines"
- # shellcheck disable=SC2086
- pylint ${PYLINT_OPTIONS} ${PYLINT_VERBOSE} \
- --additional-builtins="traits,supported_languages,language_aliases,logger,categories" \
- searx/engines
- build_msg TEST "[pylint] ./searx ./searxng_extra ./tests"
- # shellcheck disable=SC2086
- pylint ${PYLINT_OPTIONS} ${PYLINT_VERBOSE} \
- --ignore=searx/engines \
- searx searx/searxng.msg \
- searxng_extra searxng_extra/docs_prebuild \
- tests
- )
- dump_return $?
- }
- test.types.dev() {
- # use this pyright test for local tests in development / it suppress
- # warnings related to intentional monkey patching but gives good hints where
- # we need to work on SearXNG's typification.
- #
- # --> 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 $?
- }
|