def test_user_class_serialization(self): path = self.get_contract_path('SerializationUserClass.py') engine = TestEngine() expected_class = [2, 4] serialized = self.run_smart_contract(engine, path, 'serialize_user_class', expected_result_type=bytes) expected_result = serialize(expected_class) self.assertEqual(expected_result, serialized) result = self.run_smart_contract(engine, path, 'deserialize_user_class', serialized, expected_result_type=list) self.assertEqual(expected_class, result) result = self.run_smart_contract(engine, path, 'get_variable_from_deserialized', serialized) self.assertEqual(2, result) result = self.run_smart_contract(engine, path, 'call_method_from_deserialized', serialized) self.assertEqual(42, result)
def test_serialize_dict(self): path = self.get_contract_path('SerializeDict.py') self.compile_and_save(path) engine = TestEngine() result = self.run_smart_contract(engine, path, 'serialize_dict', expected_result_type=bytes) expected_result = serialize({1: 1, 2: 1, 3: 2}) self.assertEqual(expected_result, result)
def test_serialize_sequence(self): path = self.get_contract_path('SerializeSequence.py') self.compile_and_save(path) engine = TestEngine() result = self.run_smart_contract(engine, path, 'serialize_sequence', expected_result_type=bytes) expected_result = serialize([2, 3, 5, 7]) self.assertEqual(expected_result, result)
def test_serialize_bool(self): path = self.get_contract_path('SerializeBool.py') self.compile_and_save(path) engine = TestEngine() result = self.run_smart_contract(engine, path, 'serialize_bool', expected_result_type=bytes) expected_result = serialize(True) self.assertEqual(expected_result, result)
def test_serialize_str(self): path = self.get_contract_path('SerializeStr.py') engine = TestEngine() result = self.run_smart_contract(engine, path, 'serialize_str', expected_result_type=bytes) expected_result = serialize('42') self.assertEqual(expected_result, result)
def test_boa2_serialization_test2(self): path = self.get_contract_path('SerializationBoa2Test.py') engine = TestEngine() result = self.run_smart_contract(engine, path, 'main', 2, expected_result_type=bytes) expected_result = serialize(['a', 3, ['j', 3, 5], 'jk', 'lmnopqr']) self.assertEqual(expected_result, result)
def test_deserialize(self): path = self.get_contract_path('Deserialize.py') engine = TestEngine() expected_result = 42 value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value, expected_result_type=bytes) self.assertEqual(expected_result, result) expected_result = True value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value) self.assertEqual(expected_result, result) value = StackItemType.Boolean + value[1:] result = self.run_smart_contract(engine, path, 'deserialize_arg', value) self.assertEqual(expected_result, result) expected_result = '42' value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value) self.assertEqual(expected_result, result) expected_result = b'42' value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value, expected_result_type=bytes) self.assertEqual(expected_result, result) expected_result = [1, '2', b'3'] value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value) expected_result[2] = String.from_bytes(expected_result[2]) self.assertEqual(expected_result, result) expected_result = {'int': 1, 'str': '2', 'bytes': b'3'} value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value) expected_result['bytes'] = String.from_bytes(expected_result['bytes']) self.assertEqual(expected_result, result)
def test_deserialize(self): path = self.get_contract_path('Deserialize.py') self.compile_and_save(path) engine = TestEngine() expected_result = 42 value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value, expected_result_type=bytes) self.assertEqual(expected_result, result) expected_result = True value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value) # it shouldn't be equal to the convertion, because it converts as an int instead of a boolean self.assertEqual(expected_result, result) self.assertNotEqual(type(expected_result), type(result)) value = StackItemType.Boolean + value[1:] result = self.run_smart_contract(engine, path, 'deserialize_arg', value, expected_result_type=bool) self.assertEqual(expected_result, result) self.assertEqual(type(expected_result), type(result)) expected_result = '42' value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value) self.assertEqual(expected_result, result) expected_result = b'42' value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value, expected_result_type=bytes) self.assertEqual(expected_result, result) expected_result = [1, '2', b'3'] value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value) expected_result[2] = String.from_bytes(expected_result[2]) self.assertEqual(expected_result, result) expected_result = {'int': 1, 'str': '2', 'bytes': b'3'} value = serialize(expected_result) result = self.run_smart_contract(engine, path, 'deserialize_arg', value) expected_result['bytes'] = String.from_bytes(expected_result['bytes']) self.assertEqual(expected_result, result)