Fix recursive union-iterable-*-types codegen
This commit is contained in:
@@ -3,20 +3,85 @@ from dataclasses import dataclass
|
||||
from megasniff import SchemaInflatorGenerator
|
||||
|
||||
|
||||
# def test_list():
|
||||
# @dataclass
|
||||
# class A:
|
||||
# l: list[int]
|
||||
#
|
||||
# infl = SchemaInflatorGenerator()
|
||||
# fn = infl.schema_to_generator(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_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'}
|
||||
|
||||
Reference in New Issue
Block a user