Spaces:
Running
Running
import pathlib | |
from typing import List | |
import pytest | |
from sympy.testing.runtests_pytest import ( | |
make_absolute_path, | |
sympy_dir, | |
update_args_with_paths, | |
update_args_with_rootdir, | |
) | |
def test_update_args_with_rootdir(): | |
"""`--rootdir` and directory three above this added as arguments.""" | |
args = update_args_with_rootdir([]) | |
assert args == ['--rootdir', str(pathlib.Path(__file__).parents[3])] | |
class TestMakeAbsolutePath: | |
def test_valid_partial_path(partial_path: str): | |
"""Paths that start with `sympy` are valid.""" | |
_ = make_absolute_path(partial_path) | |
def test_invalid_partial_path_raises_value_error(partial_path: str): | |
"""A `ValueError` is raises on paths that don't start with `sympy`.""" | |
with pytest.raises(ValueError): | |
_ = make_absolute_path(partial_path) | |
class TestUpdateArgsWithPaths: | |
def test_no_paths(): | |
"""If no paths are passed, only `sympy` and `doc/src` are appended. | |
`sympy` and `doc/src` are the `testpaths` stated in `pytest.ini`. They | |
need to be manually added as if any path-related arguments are passed | |
to `pytest.main` then the settings in `pytest.ini` may be ignored. | |
""" | |
paths = [] | |
args = update_args_with_paths(paths=paths, keywords=None, args=[]) | |
expected = [ | |
str(pathlib.Path(sympy_dir(), 'sympy')), | |
str(pathlib.Path(sympy_dir(), 'doc/src')), | |
] | |
assert args == expected | |
def test_one_file(path: str): | |
"""Single files/paths, full or partial, are matched correctly.""" | |
args = update_args_with_paths(paths=[path], keywords=None, args=[]) | |
expected = [ | |
str(pathlib.Path(sympy_dir(), 'sympy/core/tests/test_basic.py')), | |
] | |
assert args == expected | |
def test_partial_path_from_root(): | |
"""Partial paths from the root directly are matched correctly.""" | |
args = update_args_with_paths(paths=['sympy/functions'], keywords=None, args=[]) | |
expected = [str(pathlib.Path(sympy_dir(), 'sympy/functions'))] | |
assert args == expected | |
def test_multiple_paths_from_root(): | |
"""Multiple paths, partial or full, are matched correctly.""" | |
paths = ['sympy/core/tests/test_basic.py', 'sympy/functions'] | |
args = update_args_with_paths(paths=paths, keywords=None, args=[]) | |
expected = [ | |
str(pathlib.Path(sympy_dir(), 'sympy/core/tests/test_basic.py')), | |
str(pathlib.Path(sympy_dir(), 'sympy/functions')), | |
] | |
assert args == expected | |
def test_multiple_paths_from_non_root(paths: List[str], expected_paths: List[str]): | |
"""Multiple partial paths are matched correctly.""" | |
args = update_args_with_paths(paths=paths, keywords=None, args=[]) | |
assert len(args) == len(expected_paths) | |
for arg, expected in zip(sorted(args), expected_paths): | |
assert expected in arg | |
def test_string_as_keyword(paths: List[str]): | |
"""String keywords are matched correctly.""" | |
keywords = ('bicycle', ) | |
args = update_args_with_paths(paths=paths, keywords=keywords, args=[]) | |
expected_args = ['sympy/physics/mechanics/tests/test_kane3.py::test_bicycle'] | |
assert len(args) == len(expected_args) | |
for arg, expected in zip(sorted(args), expected_args): | |
assert expected in arg | |
def test_integer_as_keyword(paths: List[str]): | |
"""Integer keywords are matched correctly.""" | |
keywords = ('3538', ) | |
args = update_args_with_paths(paths=paths, keywords=keywords, args=[]) | |
expected_args = ['sympy/core/tests/test_sympify.py::test_issue_3538'] | |
assert len(args) == len(expected_args) | |
for arg, expected in zip(sorted(args), expected_args): | |
assert expected in arg | |
def test_multiple_keywords(): | |
"""Multiple keywords are matched correctly.""" | |
keywords = ('bicycle', '3538') | |
args = update_args_with_paths(paths=[], keywords=keywords, args=[]) | |
expected_args = [ | |
'sympy/core/tests/test_sympify.py::test_issue_3538', | |
'sympy/physics/mechanics/tests/test_kane3.py::test_bicycle', | |
] | |
assert len(args) == len(expected_args) | |
for arg, expected in zip(sorted(args), expected_args): | |
assert expected in arg | |
def test_keyword_match_in_multiple_files(): | |
"""Keywords are matched across multiple files.""" | |
keywords = ('1130', ) | |
args = update_args_with_paths(paths=[], keywords=keywords, args=[]) | |
expected_args = [ | |
'sympy/integrals/tests/test_heurisch.py::test_heurisch_symbolic_coeffs_1130', | |
'sympy/utilities/tests/test_lambdify.py::test_python_div_zero_issue_11306', | |
] | |
assert len(args) == len(expected_args) | |
for arg, expected in zip(sorted(args), expected_args): | |
assert expected in arg | |