| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- import pathlib
- from typing import List
- import pytest
- from sympy.testing.runtests_pytest import (
- make_absolute_path,
- sympy_dir,
- update_args_with_paths,
- )
- class TestMakeAbsolutePath:
- @staticmethod
- @pytest.mark.parametrize(
- 'partial_path', ['sympy', 'sympy/core', 'sympy/nonexistant_directory'],
- )
- def test_valid_partial_path(partial_path: str):
- """Paths that start with `sympy` are valid."""
- _ = make_absolute_path(partial_path)
- @staticmethod
- @pytest.mark.parametrize(
- 'partial_path', ['not_sympy', 'also/not/sympy'],
- )
- 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:
- @staticmethod
- 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
- @staticmethod
- @pytest.mark.parametrize(
- 'path',
- ['sympy/core/tests/test_basic.py', '_basic']
- )
- 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
- @staticmethod
- 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
- @staticmethod
- 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
- @staticmethod
- @pytest.mark.parametrize(
- 'paths, expected_paths',
- [
- (
- ['/core', '/util'],
- [
- 'doc/src/modules/utilities',
- 'doc/src/reference/public/utilities',
- 'sympy/core',
- 'sympy/logic/utilities',
- 'sympy/utilities',
- ]
- ),
- ]
- )
- 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
- @staticmethod
- @pytest.mark.parametrize(
- 'paths',
- [
- [],
- ['sympy/physics'],
- ['sympy/physics/mechanics'],
- ['sympy/physics/mechanics/tests'],
- ['sympy/physics/mechanics/tests/test_kane3.py'],
- ]
- )
- 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
- @staticmethod
- @pytest.mark.parametrize(
- 'paths',
- [
- [],
- ['sympy/core'],
- ['sympy/core/tests'],
- ['sympy/core/tests/test_sympify.py'],
- ]
- )
- 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
- @staticmethod
- 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
- @staticmethod
- 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
|