@@ -64,6 +64,14 @@ class C:
6464 assert t == de (T , se (t ))
6565
6666
67+ @pytest .mark .parametrize ('t,T,f' , types , ids = type_ids ())
68+ @pytest .mark .parametrize ('named' , (True , False ))
69+ @pytest .mark .parametrize ('reuse' , (True , False ))
70+ def test_from_to_obj (t , T , f , named , reuse ):
71+ obj = serde .se .to_obj (t , named , reuse , False )
72+ assert t == serde .de .from_obj (T , obj , named , reuse )
73+
74+
6775@pytest .mark .parametrize ('t,T,filter' , types , ids = type_ids ())
6876@pytest .mark .parametrize ('opt' , opt_case , ids = opt_case_ids ())
6977@pytest .mark .parametrize ('se,de' , (format_dict + format_tuple ))
@@ -244,36 +252,43 @@ def test_enum_imported(se, de):
244252@pytest .mark .parametrize ('se,de' , all_formats )
245253def test_tuple (se , de , opt ):
246254 @serde .serde (** opt )
255+ @dataclasses .dataclass
247256 class Homogeneous :
248257 i : Tuple [int , int ]
249258 s : Tuple [str , str ]
250259 f : Tuple [float , float ]
251260 b : Tuple [bool , bool ]
252261
253- p = Homogeneous ((10 , 20 ), ('a' , 'b' ), (10.0 , 20.0 ), (True , False ))
254- assert p == de (Homogeneous , se (p ))
262+ a = Homogeneous ((10 , 20 ), ('a' , 'b' ), (10.0 , 20.0 ), (True , False ))
263+ assert a == de (Homogeneous , se (a ))
255264
256265 # List will be type mismatch if type_check=True.
257- p = Homogeneous ([10 , 20 ], ['a' , 'b' ], [10.0 , 20.0 ], [True , False ])
258- p != de (Homogeneous , se (p ))
266+ a = Homogeneous ([10 , 20 ], ['a' , 'b' ], [10.0 , 20.0 ], [True , False ])
267+ a != de (Homogeneous , se (a ))
259268
260269 @serde .serde (** opt )
270+ @dataclasses .dataclass
261271 class Variant :
262272 t : Tuple [int , str , float , bool ]
263273
264274 # Toml doesn't support variant type of array.
265275 if se is not serde .toml .to_toml :
266- p = Variant ((10 , 'a' , 10.0 , True ))
267- assert p == de (Variant , se (p ))
276+ b = Variant ((10 , 'a' , 10.0 , True ))
277+ assert b == de (Variant , se (b ))
268278
269279 @serde .serde (** opt )
280+ @dataclasses .dataclass
270281 class BareTuple :
271282 t : Tuple
272283
273- p = BareTuple ((10 , 20 ))
274- assert p == de (BareTuple , se (p ))
284+ c = BareTuple ((10 , 20 ))
285+ assert c == de (BareTuple , se (c ))
286+
287+ c = BareTuple (())
288+ assert c == de (BareTuple , se (c ))
275289
276290 @serde .serde (** opt )
291+ @dataclasses .dataclass
277292 class Nested :
278293 i : Tuple [data .Int , data .Int ]
279294 s : Tuple [data .Str , data .Str ]
@@ -282,13 +297,31 @@ class Nested:
282297
283298 # hmmm.. Nested tuple doesn't work ..
284299 if se is not serde .toml .to_toml :
285- p = Nested (
300+ d = Nested (
286301 (data .Int (10 ), data .Int (20 )),
287302 (data .Str ("a" ), data .Str ("b" )),
288303 (data .Float (10.0 ), data .Float (20.0 )),
289304 (data .Bool (True ), data .Bool (False )),
290305 )
291- assert p == de (Nested , se (p ))
306+ assert d == de (Nested , se (d ))
307+
308+ @serde .serde (** opt )
309+ @dataclasses .dataclass
310+ class VariableTuple :
311+ t : Tuple [int , ...]
312+
313+ e = VariableTuple ((1 , 2 , 3 ))
314+ assert e == de (VariableTuple , se (e ))
315+
316+ e = VariableTuple (())
317+ assert e == de (VariableTuple , se (e ))
318+
319+ with pytest .raises (Exception ):
320+
321+ @serde .serde (** opt )
322+ @dataclasses .dataclass
323+ class EmptyTuple :
324+ t : Tuple [()]
292325
293326
294327@pytest .mark .parametrize ('se,de' , all_formats )
@@ -809,6 +842,11 @@ def __post_init__(self):
809842 (Tuple [int ], (10.0 ,), True ),
810843 (Tuple [int , str ], (10 , "foo" ), False ),
811844 (Tuple [int , str ], (10 , 10.0 ), True ),
845+ (Tuple [data .Int , data .Str ], (data .Int (1 ), data .Str ("2" )), False ),
846+ (Tuple [data .Int , data .Str ], (data .Int (1 ), data .Int (2 )), True ),
847+ (Tuple , (10 , 10.0 ), False ),
848+ (Tuple [int , ...], (1 , 2 ), False ),
849+ (Tuple [int , ...], (1 , 2.0 ), True ),
812850 (data .E , data .E .S , False ),
813851 (data .E , data .IE .V0 , False ), # TODO enum type check is not yet perfect
814852 (Union [int , str ], 10 , False ),
0 commit comments