| 
									
										
										
										
											2024-03-11 07:45:08 +01:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							|  |  |  | # SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-06 16:39:00 +02:00
										 |  |  | test.help(){ | 
					
						
							|  |  |  |     cat <<EOF | 
					
						
							|  |  |  | test.: | 
					
						
							|  |  |  |   yamllint  : lint YAML files (YAMLLINT_FILES) | 
					
						
							| 
									
										
										
										
											2024-03-11 14:06:26 +01:00
										 |  |  |   pylint    : lint ./searx, ./searxng_extra and ./tests | 
					
						
							| 
									
										
										
										
											2023-08-06 16:39:00 +02:00
										 |  |  |   pyright   : static type check of python sources | 
					
						
							|  |  |  |   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 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test.yamllint() { | 
					
						
							|  |  |  |     build_msg TEST "[yamllint] \$YAMLLINT_FILES" | 
					
						
							|  |  |  |     pyenv.cmd yamllint --strict --format parsable "${YAMLLINT_FILES[@]}" | 
					
						
							|  |  |  |     dump_return $? | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test.pylint() { | 
					
						
							|  |  |  |     # shellcheck disable=SC2086 | 
					
						
							|  |  |  |     (   set -e | 
					
						
							|  |  |  |         pyenv.activate | 
					
						
							| 
									
										
										
										
											2024-03-11 14:06:26 +01:00
										 |  |  |         PYLINT_OPTIONS="--rcfile .pylintrc" | 
					
						
							| 
									
										
										
										
											2024-03-11 07:45:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-11 14:06:26 +01:00
										 |  |  |         build_msg TEST "[pylint] ./searx/engines" | 
					
						
							| 
									
										
										
										
											2024-03-11 07:45:08 +01:00
										 |  |  |         pylint ${PYLINT_OPTIONS} ${PYLINT_VERBOSE} \
 | 
					
						
							|  |  |  |             --additional-builtins="traits,supported_languages,language_aliases,logger,categories" \
 | 
					
						
							| 
									
										
										
										
											2023-08-06 16:39:00 +02:00
										 |  |  |             searx/engines | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-11 14:06:26 +01:00
										 |  |  |         build_msg TEST "[pylint] ./searx ./searxng_extra ./tests" | 
					
						
							| 
									
										
										
										
											2024-03-11 07:45:08 +01:00
										 |  |  |         pylint ${PYLINT_OPTIONS} ${PYLINT_VERBOSE} \
 | 
					
						
							| 
									
										
										
										
											2023-08-06 16:39:00 +02:00
										 |  |  | 	    --ignore=searx/engines \
 | 
					
						
							| 
									
										
										
										
											2024-03-11 14:06:26 +01:00
										 |  |  | 	    searx searx/searxng.msg \
 | 
					
						
							|  |  |  |             searxng_extra searxng_extra/docs_prebuild \
 | 
					
						
							|  |  |  |             tests | 
					
						
							| 
									
										
										
										
											2023-08-06 16:39:00 +02:00
										 |  |  |     ) | 
					
						
							|  |  |  |     dump_return $? | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test.pyright() { | 
					
						
							|  |  |  |     build_msg TEST "[pyright] static type check of python sources" | 
					
						
							|  |  |  |     node.env.dev | 
					
						
							|  |  |  |     # We run Pyright in the virtual environment because Pyright | 
					
						
							|  |  |  |     # executes "python" to determine the Python version. | 
					
						
							|  |  |  |     build_msg TEST "[pyright] suppress warnings related to intentional monkey patching" | 
					
						
							|  |  |  |     pyenv.cmd npx --no-install pyright -p pyrightconfig-ci.json \
 | 
					
						
							|  |  |  |         | grep -v ".py$" \
 | 
					
						
							|  |  |  |         | 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' | 
					
						
							|  |  |  |     dump_return $? | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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' | 
					
						
							|  |  |  |     pyenv.cmd python -m nose2 -s tests/unit | 
					
						
							|  |  |  |     dump_return $? | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test.coverage() { | 
					
						
							|  |  |  |     build_msg TEST 'unit test coverage' | 
					
						
							|  |  |  |     (   set -e | 
					
						
							|  |  |  |         pyenv.activate | 
					
						
							|  |  |  |         python -m nose2 -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 $? | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-09 11:46:26 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-06 16:39:00 +02:00
										 |  |  | test.rst() { | 
					
						
							|  |  |  |     build_msg TEST "[reST markup] ${RST_FILES[*]}" | 
					
						
							| 
									
										
										
										
											2024-05-09 11:46:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     local rst2html=rst2html | 
					
						
							|  |  |  |     if [ "3.8" == "$(python -c 'import sys; print(".".join([str(x) for x in sys.version_info[:2]]))')" ]; then | 
					
						
							|  |  |  |        rst2html=rst2html.py | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-06 16:39:00 +02:00
										 |  |  |     for rst in "${RST_FILES[@]}"; do | 
					
						
							| 
									
										
										
										
											2024-05-09 11:46:26 +02:00
										 |  |  |         pyenv.cmd "${rst2html}" --halt error "$rst" > /dev/null || die 42 "fix issue in $rst" | 
					
						
							| 
									
										
										
										
											2023-08-06 16:39:00 +02:00
										 |  |  |     done | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 $? | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |