Генерация обратных преобразователей PyObj->JsonObj #3
77
tests/test_basic_deflator.py
Normal file
77
tests/test_basic_deflator.py
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from megasniff.deflator import SchemaDeflatorGenerator
|
||||||
|
from src.megasniff import SchemaInflatorGenerator
|
||||||
|
|
||||||
|
|
||||||
|
def test_basic_deflator():
|
||||||
|
class A:
|
||||||
|
a: int
|
||||||
|
|
||||||
|
def __init__(self, a: int):
|
||||||
|
self.a = a
|
||||||
|
|
||||||
|
class B:
|
||||||
|
def __init__(self, b: int):
|
||||||
|
self.b = b
|
||||||
|
|
||||||
|
defl = SchemaDeflatorGenerator()
|
||||||
|
fn = defl.schema_to_deflator(A)
|
||||||
|
a = fn(A(42))
|
||||||
|
|
||||||
|
assert a['a'] == 42
|
||||||
|
|
||||||
|
fnb = defl.schema_to_deflator(B)
|
||||||
|
b = fnb(B(11))
|
||||||
|
assert len(b) == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_unions():
|
||||||
|
@dataclass
|
||||||
|
class A:
|
||||||
|
a: int | str
|
||||||
|
|
||||||
|
defl = SchemaDeflatorGenerator()
|
||||||
|
fn = defl.schema_to_deflator(A)
|
||||||
|
|
||||||
|
a = fn(A(42))
|
||||||
|
assert a['a'] == 42
|
||||||
|
a = fn(A('42'))
|
||||||
|
assert a['a'] == '42'
|
||||||
|
a = fn(A('42a'))
|
||||||
|
assert a['a'] == '42a'
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class CircA:
|
||||||
|
b: CircB
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class CircB:
|
||||||
|
a: CircA | None
|
||||||
|
|
||||||
|
|
||||||
|
def test_circular():
|
||||||
|
defl = SchemaDeflatorGenerator()
|
||||||
|
fn = defl.schema_to_deflator(CircA)
|
||||||
|
a = fn(CircA(CircB(CircA(CircB(None)))))
|
||||||
|
|
||||||
|
assert isinstance(a['b'], dict)
|
||||||
|
assert isinstance(a['b']['a'], dict)
|
||||||
|
assert a['b']['a']['b']['a'] is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_optional():
|
||||||
|
@dataclass
|
||||||
|
class C:
|
||||||
|
a: Optional[int] = None
|
||||||
|
|
||||||
|
defl = SchemaDeflatorGenerator()
|
||||||
|
fn = defl.schema_to_deflator(C)
|
||||||
|
c = fn(C())
|
||||||
|
assert c['a'] is None
|
||||||
|
c = fn(C(123))
|
||||||
|
assert c['a'] == 123
|
||||||
Reference in New Issue
Block a user