Skip to content

Commit 4c448b6

Browse files
committed
Set up mypy tests
1 parent 0816b84 commit 4c448b6

4 files changed

Lines changed: 207 additions & 2 deletions

File tree

pdm.lock

Lines changed: 112 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ lint = [
99
test = [
1010
"hypothesis>=6.79.4",
1111
"pytest>=7.4.0",
12-
"pytest-benchmark>=4.0.0",
1312
"immutables>=0.20",
1413
"typing-extensions>=4.7.1",
1514
"coverage>=7.4.0",
@@ -26,6 +25,11 @@ docs = [
2625
]
2726
bench = [
2827
"pyperf>=2.6.1",
28+
"pytest-benchmark>=4.0.0",
29+
]
30+
tests-mypy = [
31+
"pytest-mypy-plugins>=3.0.0",
32+
"mypy>=1.7.1",
2933
]
3034

3135
[build-system]
@@ -99,7 +103,7 @@ msgspec = [
99103
]
100104

101105
[tool.pytest.ini_options]
102-
addopts = "-l --benchmark-sort=fullname --benchmark-warmup=true --benchmark-warmup-iterations=5 --benchmark-group-by=fullname"
106+
addopts = "-l --mypy-only-local-stub --benchmark-sort=fullname --benchmark-warmup=true --benchmark-warmup-iterations=5 --benchmark-group-by=fullname"
103107

104108
[tool.coverage.run]
105109
parallel = true

tests/v/test_mypy.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
- case: empty_customize
2+
main: |
3+
from attrs import define, fields as f
4+
from cattrs import v, Converter
5+
6+
@define
7+
class A:
8+
a: int
9+
10+
c = Converter()
11+
12+
v.customize(c, A)
13+
14+
- case: customize_int
15+
main: |
16+
from attrs import define, fields as f
17+
from cattrs import v, Converter
18+
19+
@define
20+
class A:
21+
a: int
22+
23+
c = Converter()
24+
25+
v.customize(c, A, v.V(f(A).a).ensure(v.between(5, 10)))
26+
27+
- case: customize_int_no_empty_ensure
28+
main: |
29+
from attrs import define, fields as f
30+
from cattrs import v, Converter
31+
32+
@define
33+
class A:
34+
a: int
35+
36+
c = Converter()
37+
38+
v.customize(c, A, v.V(f(A).a).ensure()) # E: Missing positional argument "validator" in call to "ensure" of "V" [call-arg]
39+
40+
- case: customize_int_no_wrong_validator
41+
main: |
42+
from attrs import define, fields as f
43+
from cattrs import v, Converter
44+
45+
@define
46+
class A:
47+
a: int
48+
49+
c = Converter()
50+
51+
v.customize(c, A, v.V(f(A).a).ensure(v.len_between(0, 10))) # E: Argument 1 to "ensure" of "V" has incompatible type "Callable[[Sized], None]"; expected "Callable[[int], bool | None]" [arg-type]

tests/v/test_validators_mypy.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
- case: greater_than
2+
main: |
3+
from attrs import define, fields
4+
from cattrs import v, Converter
5+
6+
@define
7+
class A:
8+
a: int
9+
10+
c = Converter()
11+
12+
v.customize(c, A, v.V(fields(A).a).ensure(v.greater_than(5)))
13+
14+
- case: greater_than_error
15+
main: |
16+
from attrs import define, fields
17+
from cattrs import v, Converter
18+
19+
@define
20+
class A:
21+
a: int
22+
23+
c = Converter()
24+
25+
v.customize(c, A, v.V(fields(A).a).ensure(v.greater_than("5"))) # E: Argument 1 to "greater_than" has incompatible type "str"; expected "int" [arg-type]
26+
27+
- case: len_between
28+
main: |
29+
from attrs import define, fields
30+
from cattrs import v, Converter
31+
32+
@define
33+
class A:
34+
a: list[int]
35+
36+
c = Converter()
37+
38+
v.customize(c, A, v.V(fields(A).a).ensure(v.len_between(5, 10)))

0 commit comments

Comments
 (0)