third_party.pylibs.pylint.src/pylint/testutils/get_test_info.py
Pierre Sassoulas 9e0baf370a Simplify hard to maintain copyright notice
git is the source of truth for the copyright, copyrite (the tool)
was taking exponentially longer with each release, and it's
polluting the code with sometime as much as 50 lines of names.
2022-03-24 13:06:15 +01:00

50 lines
2.1 KiB
Python

# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
# Copyright (c) https://github.com/PyCQA/pylint/graphs/contributors
from glob import glob
from os.path import basename, join, splitext
from typing import List, Tuple
from pylint.testutils.constants import SYS_VERS_STR
def _get_tests_info(
input_dir: str, msg_dir: str, prefix: str, suffix: str
) -> List[Tuple[str, str]]:
"""Get python input examples and output messages.
We use following conventions for input files and messages:
for different inputs:
test for python >= x.y -> input = <name>_pyxy.py
test for python < x.y -> input = <name>_py_xy.py
for one input and different messages:
message for python >= x.y -> message = <name>_pyxy.txt
lower versions -> message with highest num
"""
result = []
for fname in glob(join(input_dir, prefix + "*" + suffix)):
infile = basename(fname)
fbase = splitext(infile)[0]
# filter input files :
pyrestr = fbase.rsplit("_py", 1)[-1] # like _26 or 26
if pyrestr.isdigit(): # '24', '25'...
if pyrestr.isdigit() and int(SYS_VERS_STR) < int(pyrestr):
continue
if pyrestr.startswith("_") and pyrestr[1:].isdigit():
# skip test for higher python versions
if pyrestr[1:].isdigit() and int(SYS_VERS_STR) >= int(pyrestr[1:]):
continue
messages = glob(join(msg_dir, fbase + "*.txt"))
# the last one will be without ext, i.e. for all or upper versions:
if messages:
for outfile in sorted(messages, reverse=True):
py_rest = outfile.rsplit("_py", 1)[-1][:-4]
if py_rest.isdigit() and int(SYS_VERS_STR) >= int(py_rest):
break
else:
# This will provide an error message indicating the missing filename.
outfile = join(msg_dir, fbase + ".txt")
result.append((infile, outfile))
return result