first commit
This commit is contained in:
159
utils/lib_sxng_test.sh
Executable file
159
utils/lib_sxng_test.sh
Executable file
@@ -0,0 +1,159 @@
|
||||
#!/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 $?
|
||||
}
|
||||
Reference in New Issue
Block a user