| # Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html |
| # For details: https://github.com/pylint-dev/pylint/blob/main/LICENSE |
| # Copyright (c) https://github.com/pylint-dev/pylint/blob/main/CONTRIBUTORS.txt |
| import os |
| from pathlib import Path |
| |
| import pytest |
| |
| from pylint.pyreverse.main import Run |
| from pylint.testutils.pyreverse import ( |
| FunctionalPyreverseTestfile, |
| get_functional_test_files, |
| ) |
| |
| FUNCTIONAL_DIR = Path(__file__).parent / "functional" |
| CLASS_DIAGRAMS_DIR = FUNCTIONAL_DIR / "class_diagrams" |
| CLASS_DIAGRAM_TESTS = get_functional_test_files(CLASS_DIAGRAMS_DIR) |
| CLASS_DIAGRAM_TEST_IDS = [testfile.source.stem for testfile in CLASS_DIAGRAM_TESTS] |
| |
| |
| @pytest.mark.parametrize( |
| "testfile", |
| CLASS_DIAGRAM_TESTS, |
| ids=CLASS_DIAGRAM_TEST_IDS, |
| ) |
| def test_class_diagrams(testfile: FunctionalPyreverseTestfile, tmp_path: Path) -> None: |
| input_file = testfile.source |
| input_path = os.path.dirname(input_file) |
| if testfile.options["source_roots"]: |
| source_roots = ",".join( |
| [ |
| os.path.realpath( |
| os.path.expanduser(os.path.join(input_path, source_root)) |
| ) |
| for source_root in testfile.options["source_roots"] |
| ] |
| ) |
| else: |
| source_roots = "" |
| for output_format in testfile.options["output_formats"]: |
| with pytest.raises(SystemExit) as sys_exit: |
| args = ["-o", f"{output_format}", "-d", str(tmp_path)] |
| if source_roots: |
| args += ["--source-roots", source_roots] |
| args.extend(testfile.options["command_line_args"]) |
| args += [str(input_file)] |
| Run(args) |
| assert sys_exit.value.code == 0 |
| assert testfile.source.with_suffix(f".{output_format}").read_text( |
| encoding="utf8" |
| ) == (tmp_path / f"classes.{output_format}").read_text(encoding="utf8") |