File: test_defaultdicts.py

package info (click to toggle)
python-cattrs 25.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,812 kB
  • sloc: python: 12,236; makefile: 155
file content (46 lines) | stat: -rw-r--r-- 1,358 bytes parent folder | download
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
"""Tests for defaultdicts."""

from collections import defaultdict
from typing import DefaultDict

from cattrs import Converter
from cattrs.cols import defaultdict_structure_factory


def test_typing_defaultdicts(genconverter: Converter):
    """`typing.DefaultDict` works."""
    res = genconverter.structure({"a": 1}, DefaultDict[str, int])

    assert isinstance(res, defaultdict)
    assert res["a"] == 1
    assert res["b"] == 0

    genconverter.register_unstructure_hook(int, str)

    assert genconverter.unstructure(res) == {"a": "1", "b": "0"}


def test_collection_defaultdicts(genconverter: Converter):
    """`collections.defaultdict` works."""
    res = genconverter.structure({"a": 1}, defaultdict[str, int])

    assert isinstance(res, defaultdict)
    assert res["a"] == 1
    assert res["b"] == 0

    genconverter.register_unstructure_hook(int, str)

    assert genconverter.unstructure(res) == {"a": "1", "b": "0"}


def test_factory(genconverter: Converter):
    """Explicit factories work."""
    genconverter.register_structure_hook_func(
        lambda t: t == defaultdict[str, int],
        defaultdict_structure_factory(defaultdict[str, int], genconverter, lambda: 2),
    )
    res = genconverter.structure({"a": 1}, defaultdict[str, int])

    assert isinstance(res, defaultdict)
    assert res["a"] == 1
    assert res["b"] == 2