from dataclasses import dataclass from megasniff import SchemaInflatorGenerator def test_list_basic(): @dataclass class A: l: list[int] infl = SchemaInflatorGenerator() fn = infl.schema_to_inflator(A) a = fn({'l': []}) assert isinstance(a.l, list) assert len(a.l) == 0 a = fn({'l': [1, 2.1, '0']}) print(a.l) assert isinstance(a.l, list) assert len(a.l) == 3 assert all(map(lambda x: isinstance(x, int), a.l)) @dataclass class B: l: list[str] fn = infl.schema_to_inflator(B) a = fn({'l': [1, 2.1, '0']}) print(a.l) assert isinstance(a.l, list) assert len(a.l) == 3 assert all(map(lambda x: isinstance(x, str), a.l)) assert a.l == ['1', '2.1', '0'] def test_list_union(): @dataclass class A: l: list[int | str] infl = SchemaInflatorGenerator() fn = infl.schema_to_inflator(A) a = fn({'l': []}) assert isinstance(a.l, list) assert len(a.l) == 0 a = fn({'l': [1, 2.1, '0']}) print(a.l) assert isinstance(a.l, list) assert len(a.l) == 3 assert all(map(lambda x: isinstance(x, int), a.l)) def test_set_basic(): @dataclass class A: l: set[int] infl = SchemaInflatorGenerator() fn = infl.schema_to_inflator(A) a = fn({'l': []}) assert isinstance(a.l, set) assert len(a.l) == 0 a = fn({'l': [1, 2.1, '0']}) print(a.l) assert isinstance(a.l, set) assert len(a.l) == 3 assert all(map(lambda x: isinstance(x, int), a.l)) @dataclass class B: l: set[str] fn = infl.schema_to_inflator(B) a = fn({'l': [1, 2.1, '0', 0]}) print(a.l) assert isinstance(a.l, set) assert len(a.l) == 3 assert all(map(lambda x: isinstance(x, str), a.l)) assert a.l == {'1', '2.1', '0'}