1
1
from __future__ import annotations
2
2
3
3
import io
4
- from dataclasses import dataclass
4
+ from dataclasses import dataclass , field
5
5
from typing import Any , Dict , List , Optional , Tuple , Type
6
6
7
7
import pytest
@@ -128,15 +128,15 @@ def test_pure_dataclasses_in_dataclass_from_dict() -> None:
128
128
"test_class, input_dict, error" ,
129
129
[
130
130
[TestDataclassFromDict1 , {"a" : "asdf" , "b" : "2" , "c" : G1Element ()}, ValueError ],
131
- [TestDataclassFromDict1 , {"a" : 1 , "b" : "2" }, KeyError ],
131
+ [TestDataclassFromDict1 , {"a" : 1 , "b" : "2" }, TypeError ],
132
132
[TestDataclassFromDict1 , {"a" : 1 , "b" : "2" , "c" : "asd" }, ValueError ],
133
133
[TestDataclassFromDict1 , {"a" : 1 , "b" : "2" , "c" : "00" * G1Element .SIZE }, ValueError ],
134
134
[TestDataclassFromDict1 , {"a" : [], "b" : "2" , "c" : G1Element ()}, TypeError ],
135
135
[TestDataclassFromDict1 , {"a" : {}, "b" : "2" , "c" : G1Element ()}, TypeError ],
136
136
[TestDataclassFromDict2 , {"a" : "asdf" , "b" : 1.2345 , "c" : 1.2345 }, TypeError ],
137
137
[TestDataclassFromDict2 , {"a" : 1.2345 , "b" : {"a" : 1 , "b" : "2" }, "c" : 1.2345 }, TypeError ],
138
- [TestDataclassFromDict2 , {"a" : {"a" : 1 , "b" : "2" , "c" : G1Element ()}, "b" : {"a" : 1 , "b" : "2" }}, KeyError ],
139
- [TestDataclassFromDict2 , {"a" : {"a" : 1 , "b" : "2" }, "b" : {"a" : 1 , "b" : "2" }, "c" : 1.2345 }, KeyError ],
138
+ [TestDataclassFromDict2 , {"a" : {"a" : 1 , "b" : "2" , "c" : G1Element ()}, "b" : {"a" : 1 , "b" : "2" }}, TypeError ],
139
+ [TestDataclassFromDict2 , {"a" : {"a" : 1 , "b" : "2" }, "b" : {"a" : 1 , "b" : "2" }, "c" : 1.2345 }, TypeError ],
140
140
],
141
141
)
142
142
def test_dataclass_from_dict_failures (test_class : Type [Any ], input_dict : Dict [str , Any ], error : Any ) -> None :
@@ -145,6 +145,28 @@ def test_dataclass_from_dict_failures(test_class: Type[Any], input_dict: Dict[st
145
145
dataclass_from_dict (test_class , input_dict )
146
146
147
147
148
+ @streamable
149
+ @dataclass (frozen = True )
150
+ class TestFromJsonDictDefaultValues (Streamable ):
151
+ a : uint64 = uint64 (1 )
152
+ b : str = "default"
153
+ c : List [uint64 ] = field (default_factory = list )
154
+
155
+
156
+ @pytest .mark .parametrize (
157
+ "input_dict, output_dict" ,
158
+ [
159
+ [{}, {"a" : 1 , "b" : "default" , "c" : []}],
160
+ [{"a" : 2 }, {"a" : 2 , "b" : "default" , "c" : []}],
161
+ [{"b" : "not_default" }, {"a" : 1 , "b" : "not_default" , "c" : []}],
162
+ [{"c" : [1 , 2 ]}, {"a" : 1 , "b" : "default" , "c" : [1 , 2 ]}],
163
+ [{"a" : 2 , "b" : "not_default" , "c" : [1 , 2 ]}, {"a" : 2 , "b" : "not_default" , "c" : [1 , 2 ]}],
164
+ ],
165
+ )
166
+ def test_from_json_dict_default_values (input_dict : Dict [str , object ], output_dict : Dict [str , object ]) -> None :
167
+ assert str (TestFromJsonDictDefaultValues .from_json_dict (input_dict ).to_json_dict ()) == str (output_dict )
168
+
169
+
148
170
def test_basic_list () -> None :
149
171
a = [1 , 2 , 3 ]
150
172
assert is_type_List (type (a ))
0 commit comments