-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_types.py
66 lines (52 loc) · 2.17 KB
/
test_types.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""Tests for dynamic and static characteristics of git.types module attributes."""
import sys
if sys.version_info >= (3, 8):
from typing import Literal
else:
from typing_extensions import Literal
import pytest
import git.types
def test_cannot_access_undefined() -> None:
"""Accessing a bogus attribute in git.types remains a dynamic and static error."""
with pytest.raises(AttributeError):
git.types.foo # type: ignore[attr-defined]
def test_can_access_lit_commit_ish_but_it_is_not_usable() -> None:
"""Lit_commit_ish_can be accessed, but warns and is an invalid type annotation."""
# It would be fine to test attribute access rather than a "from" import. But a
# "from" import is more likely to appear in actual usage, so it is used here.
with pytest.deprecated_call() as ctx:
from git.types import Lit_commit_ish
# As noted in test_toplevel.test_util_alias_import, there may be multiple warnings,
# but all with the same message.
(message,) = {str(entry.message) for entry in ctx}
assert "Lit_commit_ish is deprecated." in message
assert 'Literal["commit", "tag", "blob", "tree"]' in message, "Has old definition."
assert 'Literal["commit", "tag"]' in message, "Has new definition."
assert "GitObjectTypeString" in message, "Has new type name for old definition."
_: Lit_commit_ish = "commit" # type: ignore[valid-type]
# It should be as documented (even though deliberately unusable in static checks).
assert Lit_commit_ish == Literal["commit", "tag"]
def test_dir() -> None:
"""dir() on git.types includes public names, even ``Lit_commit_ish``.
It also contains private names that we don't test. See test_compat.test_dir.
"""
expected_subset = {
"PathLike",
"TBD",
"AnyGitObject",
"Tree_ish",
"Commit_ish",
"GitObjectTypeString",
"Lit_commit_ish",
"Lit_config_levels",
"ConfigLevels_Tup",
"CallableProgress",
"assert_never",
"Files_TD",
"Total_TD",
"HSH_TD",
"Has_Repo",
"Has_id_attribute",
}
actual = set(dir(git.types))
assert expected_subset <= actual