1a5f9918aSopenharmony_ci 2a5f9918aSopenharmony_ciimport yaml 3a5f9918aSopenharmony_ci 4a5f9918aSopenharmony_ciclass AnInstance: 5a5f9918aSopenharmony_ci 6a5f9918aSopenharmony_ci def __init__(self, foo, bar): 7a5f9918aSopenharmony_ci self.foo = foo 8a5f9918aSopenharmony_ci self.bar = bar 9a5f9918aSopenharmony_ci 10a5f9918aSopenharmony_ci def __repr__(self): 11a5f9918aSopenharmony_ci try: 12a5f9918aSopenharmony_ci return "%s(foo=%r, bar=%r)" % (self.__class__.__name__, 13a5f9918aSopenharmony_ci self.foo, self.bar) 14a5f9918aSopenharmony_ci except RuntimeError: 15a5f9918aSopenharmony_ci return "%s(foo=..., bar=...)" % self.__class__.__name__ 16a5f9918aSopenharmony_ci 17a5f9918aSopenharmony_ciclass AnInstanceWithState(AnInstance): 18a5f9918aSopenharmony_ci 19a5f9918aSopenharmony_ci def __getstate__(self): 20a5f9918aSopenharmony_ci return {'attributes': [self.foo, self.bar]} 21a5f9918aSopenharmony_ci 22a5f9918aSopenharmony_ci def __setstate__(self, state): 23a5f9918aSopenharmony_ci self.foo, self.bar = state['attributes'] 24a5f9918aSopenharmony_ci 25a5f9918aSopenharmony_cidef test_recursive(recursive_filename, verbose=False): 26a5f9918aSopenharmony_ci context = globals().copy() 27a5f9918aSopenharmony_ci with open(recursive_filename, 'rb') as file: 28a5f9918aSopenharmony_ci exec(file.read(), context) 29a5f9918aSopenharmony_ci value1 = context['value'] 30a5f9918aSopenharmony_ci output1 = None 31a5f9918aSopenharmony_ci value2 = None 32a5f9918aSopenharmony_ci output2 = None 33a5f9918aSopenharmony_ci try: 34a5f9918aSopenharmony_ci output1 = yaml.dump(value1) 35a5f9918aSopenharmony_ci value2 = yaml.unsafe_load(output1) 36a5f9918aSopenharmony_ci output2 = yaml.dump(value2) 37a5f9918aSopenharmony_ci assert output1 == output2, (output1, output2) 38a5f9918aSopenharmony_ci finally: 39a5f9918aSopenharmony_ci if verbose: 40a5f9918aSopenharmony_ci print("VALUE1:", value1) 41a5f9918aSopenharmony_ci print("VALUE2:", value2) 42a5f9918aSopenharmony_ci print("OUTPUT1:") 43a5f9918aSopenharmony_ci print(output1) 44a5f9918aSopenharmony_ci print("OUTPUT2:") 45a5f9918aSopenharmony_ci print(output2) 46a5f9918aSopenharmony_ci 47a5f9918aSopenharmony_citest_recursive.unittest = ['.recursive'] 48a5f9918aSopenharmony_ci 49a5f9918aSopenharmony_ciif __name__ == '__main__': 50a5f9918aSopenharmony_ci import test_appliance 51a5f9918aSopenharmony_ci test_appliance.run(globals()) 52a5f9918aSopenharmony_ci 53