summaryrefslogtreecommitdiff
path: root/utils/lib_sxng_test.sh
blob: 22a655722887547d74fb34017d9c98bf66a73e13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/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() {
    # For integration into your IDE (editor) use the basedpyright-langserver
    # (LSP) installed by 'pipx basedpyright' and read:
    #
    # - https://docs.basedpyright.com/latest/installation/ides/
    #
    # The $REPO_ROOT/pyrightconfig.json uses the virtualenv found in
    # $REPO_ROOT/local/py3 and create by a 'make pyenv'

    build_msg TEST "[basedpyright] static type check of python sources"
    LANG=C pyenv.cmd basedpyright
    # ignore exit value from basedpyright
    # dump_return $?
    return 0
}

test.pyright_modified() {
    build_msg TEST "[basedpyright] static type check of local modified files"
    local pyrigth_files=()
    readarray -t pyrigth_files < <(git status --porcelain | awk 'match($2,".py[i]*$") {print $2}')
    if [ ${#pyrigth_files[@]} -eq 0 ]; then
        echo "there are no locally modified python files that could be checked"
    else
        pyenv.cmd basedpyright "${pyrigth_files[@]}"
    fi
    # ignore exit value from basedpyright
    # dump_return $?
    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 $?
}