Coverage for tests/test_merger.py: 100.00%
17 statements
« prev ^ index » next coverage.py v7.10.2, created at 2025-08-11 13:44 +0200
« prev ^ index » next coverage.py v7.10.2, created at 2025-08-11 13:44 +0200
1"""Tests for the `merger` module."""
3from __future__ import annotations
5from griffe import temporary_visited_package
8def test_dont_trigger_alias_resolution_when_merging_stubs() -> None:
9 """Assert that we don't trigger alias resolution when merging stubs."""
10 with temporary_visited_package(
11 "package",
12 {
13 "mod.py": "import pathlib\n\ndef f() -> pathlib.Path:\n return pathlib.Path()",
14 "mod.pyi": "import pathlib\n\ndef f() -> pathlib.Path: ...",
15 },
16 ) as pkg:
17 assert not pkg["mod.pathlib"].resolved
20def test_merge_stubs_on_wildcard_imported_objects() -> None:
21 """Assert that stubs can be merged on wildcard imported objects."""
22 with temporary_visited_package(
23 "package",
24 {
25 "mod.py": "class A:\n def hello(value: int | str) -> int | str:\n return value",
26 "__init__.py": "from .mod import *",
27 "__init__.pyi": """
28 from typing import overload
29 class A:
30 @overload
31 def hello(value: int) -> int: ...
32 @overload
33 def hello(value: str) -> str: ...
34 """,
35 },
36 ) as pkg:
37 assert pkg["A.hello"].overloads
40def test_merge_imports() -> None:
41 """Assert that imports are merged correctly."""
42 with temporary_visited_package(
43 "package",
44 {
45 "mod.py": "import abc",
46 "mod.pyi": "import collections",
47 },
48 ) as pkg:
49 assert set(pkg["mod"].imports) == {"abc", "collections"}
52def test_override_exports() -> None:
53 """Assert that exports are overridden too (like imports are merged)."""
54 with temporary_visited_package(
55 "package",
56 {
57 "__init__.py": "import dynamic_all\n__all__ = dynamic_all()",
58 "__init__.pyi": "from ._hello import hello\n__all__ = ['hello']",
59 "_hello.py": "def hello() -> None:\n '''Say hello.'''",
60 },
61 ) as pkg:
62 assert pkg.exports == ["hello"]
65def test_merge_attribute_values() -> None:
66 """Assert that attribute values are merged correctly."""
67 with temporary_visited_package(
68 "package",
69 {
70 "__init__.py": "import dynamic_all\n__all__ = dynamic_all()",
71 "__init__.pyi": "from ._hello import hello\n__all__ = ['hello']",
72 "_hello.py": "def hello() -> None:\n '''Say hello.'''",
73 },
74 ) as pkg:
75 assert str(pkg["__all__"].value) == "['hello']"