Skip to content

Commit 75a3094

Browse files
committed
Improve cols coverage
1 parent 9f0450e commit 75a3094

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

tests/test_defaultdicts.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import DefaultDict
55

66
from cattrs import Converter
7+
from cattrs.cols import defaultdict_structure_factory
78

89

910
def test_typing_defaultdicts(genconverter: Converter):
@@ -30,3 +31,16 @@ def test_collection_defaultdicts(genconverter: Converter):
3031
genconverter.register_unstructure_hook(int, str)
3132

3233
assert genconverter.unstructure(res) == {"a": "1", "b": "0"}
34+
35+
36+
def test_factory(genconverter: Converter):
37+
"""Explicit factories work."""
38+
genconverter.register_structure_hook_func(
39+
lambda t: t == defaultdict[str, int],
40+
defaultdict_structure_factory(defaultdict[str, int], genconverter, lambda: 2),
41+
)
42+
res = genconverter.structure({"a": 1}, defaultdict[str, int])
43+
44+
assert isinstance(res, defaultdict)
45+
assert res["a"] == 1
46+
assert res["b"] == 2

tests/test_tuples.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,25 @@ class Test(NamedTuple):
6969
def test_simple_dict_nametuples(genconverter: Converter):
7070
"""Namedtuples can be un/structured to/from dicts."""
7171

72+
class TestInner(NamedTuple):
73+
a: int
74+
7275
class Test(NamedTuple):
7376
a: int
7477
b: str = "test"
78+
c: TestInner = TestInner(1)
7579

7680
genconverter.register_unstructure_hook_factory(
77-
lambda t: t is Test, namedtuple_dict_unstructure_factory
81+
lambda t: t in (Test, TestInner), namedtuple_dict_unstructure_factory
7882
)
7983
genconverter.register_structure_hook_factory(
80-
lambda t: t is Test, namedtuple_dict_structure_factory
84+
lambda t: t in (Test, TestInner), namedtuple_dict_structure_factory
8185
)
8286

83-
assert genconverter.unstructure(Test(1)) == {"a": 1, "b": "test"}
84-
assert genconverter.structure({"a": 1, "b": "2"}, Test) == Test(1, "2")
87+
assert genconverter.unstructure(Test(1)) == {"a": 1, "b": "test", "c": {"a": 1}}
88+
assert genconverter.structure({"a": 1, "b": "2"}, Test) == Test(
89+
1, "2", TestInner(1)
90+
)
8591

8692
# Defaults work.
8793
assert genconverter.structure({"a": 1}, Test) == Test(1, "test")

0 commit comments

Comments
 (0)