ai-content-maker/.venv/Lib/site-packages/confection/tests/test_frozen_structures.py

64 lines
1.7 KiB
Python
Raw Normal View History

2024-05-03 04:18:51 +03:00
from typing import Dict, List
import catalogue
import pytest
from pytest import raises
from confection import Config, SimpleFrozenDict, SimpleFrozenList, registry
def test_frozen_list():
frozen = SimpleFrozenList(range(10))
for k in range(10):
assert frozen[k] == k
with raises(NotImplementedError, match="frozen list"):
frozen.append(5)
with raises(NotImplementedError, match="frozen list"):
frozen.reverse()
with raises(NotImplementedError, match="frozen list"):
frozen.pop(0)
def test_frozen_dict():
frozen = SimpleFrozenDict({k: k for k in range(10)})
for k in range(10):
assert frozen[k] == k
with raises(NotImplementedError, match="frozen dictionary"):
frozen[0] = 1
with raises(NotImplementedError, match="frozen dictionary"):
frozen[10] = 1
@pytest.mark.parametrize("frozen_type", ("dict", "list"))
def test_frozen_struct_deepcopy(frozen_type):
"""Test whether setting default values for a FrozenDict/FrozenList works within a config, which utilizes
deepcopy."""
registry.bar = catalogue.create("confection", "bar", entry_points=False)
@registry.bar.register("foo_dict.v1")
def make_dict(values: Dict[str, int] = SimpleFrozenDict(x=3)):
return values
@registry.bar.register("foo_list.v1")
def make_list(values: List[int] = SimpleFrozenList([1, 2, 3])):
return values
cfg = Config()
resolved = registry.resolve(
cfg.from_str(
f"""
[something]
@bar = "foo_{frozen_type}.v1"
"""
)
)
assert isinstance(resolved["something"], Dict if frozen_type == "dict" else List)