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