mirror of
				https://github.com/searxng/searxng.git
				synced 2025-10-31 02:27:06 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			141 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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   : check Python types
 | |
|   black     : check Python code format
 | |
|   shfmt     : check Shell script 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.pyright() {
 | |
|     # 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.
 | |
| 
 | |
|     build_msg TEST "[pyright/types] static type check of python sources"
 | |
|     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.black() {
 | |
|     build_msg TEST "[black] $BLACK_TARGETS"
 | |
|     pyenv.cmd black --check --diff "${BLACK_OPTIONS[@]}" "${BLACK_TARGETS[@]}"
 | |
|     dump_return $?
 | |
| }
 | |
| 
 | |
| test.shfmt() {
 | |
|     build_msg TEST "[shfmt] ${SHFMT_SCRIPTS[*]}"
 | |
|     go.tool shfmt --list --diff "${SHFMT_SCRIPTS[@]}"
 | |
|     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 $?
 | |
| }
 |