# 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 """For the visitors.diadefs module.""" # pylint: disable=redefined-outer-name from __future__ import annotations import os import warnings from collections.abc import Generator from pathlib import Path import astroid import pytest from pylint.pyreverse import inspector from pylint.pyreverse.inspector import Project from pylint.testutils.utils import _test_cwd from pylint.typing import GetProjectCallable HERE = Path(__file__) TESTS = HERE.parent.parent @pytest.fixture def project(get_project: GetProjectCallable) -> Generator[Project, None, None]: with _test_cwd(TESTS): project = get_project("data", "data") linker = inspector.Linker(project) with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) linker.visit(project) yield project def test_locals_assignment_resolution(project: Project) -> None: klass = project.get_module("data.clientmodule_test")["Specialization"] assert hasattr(klass, "locals_type") type_dict = klass.locals_type assert len(type_dict) == 2 keys = sorted(type_dict.keys()) assert keys == ["TYPE", "top"] assert len(type_dict["TYPE"]) == 1 assert type_dict["TYPE"][0].value == "final class" assert len(type_dict["top"]) == 1 assert type_dict["top"][0].value == "class" def test_instance_attrs_resolution(project: Project) -> None: klass = project.get_module("data.clientmodule_test")["Specialization"] assert hasattr(klass, "instance_attrs_type") type_dict = klass.instance_attrs_type assert len(type_dict) == 3 keys = sorted(type_dict.keys()) assert keys == ["_id", "relation", "relation2"] assert isinstance(type_dict["relation"][0], astroid.bases.Instance), type_dict[ "relation" ] assert type_dict["relation"][0].name == "DoNothing" assert type_dict["_id"][0] is astroid.Uninferable def test_from_directory(project: Project) -> None: expected = os.path.join("tests", "data", "__init__.py") assert project.name == "data" assert project.path.endswith(expected) def test_project_node(project: Project) -> None: expected = [ "data", "data.clientmodule_test", "data.property_pattern", "data.suppliermodule_test", ] assert sorted(project.keys()) == expected