|
1 | 1 | import os |
2 | | -import unittest |
3 | 2 | from copy import deepcopy |
4 | 3 |
|
5 | 4 | from jsonasobj2 import as_dict |
@@ -33,83 +32,76 @@ def collect(in_obj: YAMLRoot): |
33 | 32 | return n_classes |
34 | 33 |
|
35 | 34 |
|
36 | | -class WalkerUtilsTestCase(unittest.TestCase): |
| 35 | +def test_collector(): |
37 | 36 | """ |
38 | | - Tests for linkml_runtime.utils.inference_utils |
| 37 | + Tests using a transformer to collect statistics on an object |
39 | 38 | """ |
| 39 | + # use the schema as a data object |
| 40 | + obj = yaml_loader.load(SCHEMA, target_class=SchemaDefinition) |
| 41 | + orig = deepcopy(obj) |
| 42 | + n_classes = 0 |
| 43 | + |
| 44 | + def collect(in_obj: YAMLRoot): |
| 45 | + nonlocal n_classes |
| 46 | + if isinstance(in_obj, ClassDefinition): |
| 47 | + n_classes += 1 |
| 48 | + return in_obj |
| 49 | + |
| 50 | + obj_tr = traverse_object_tree(obj, collect) |
| 51 | + assert n_classes > 1 |
| 52 | + # test object is not mutated |
| 53 | + assert orig == obj |
| 54 | + # test transformed object is same as input |
| 55 | + assert obj_tr == obj |
| 56 | + assert count_classes(obj) == n_classes |
| 57 | + |
| 58 | + |
| 59 | +def test_mutating_transformer(): |
| 60 | + """ |
| 61 | + Tests using transform_object_tree to apply changes |
| 62 | + """ |
| 63 | + # use the schema as a data object |
| 64 | + obj = yaml_loader.load(SCHEMA, target_class=SchemaDefinition) |
| 65 | + orig = deepcopy(obj) |
| 66 | + n_changes = 0 |
| 67 | + |
| 68 | + def tr(in_obj: YAMLRoot): |
| 69 | + nonlocal n_changes |
| 70 | + if isinstance(in_obj, ClassDefinition): |
| 71 | + in_obj.comments.append(INSERTED_COMMENT) |
| 72 | + n_changes += 1 |
| 73 | + return in_obj |
| 74 | + |
| 75 | + obj_tr = traverse_object_tree(obj, tr) |
| 76 | + assert n_changes > 1 |
| 77 | + assert orig != obj |
| 78 | + assert obj_tr == obj |
| 79 | + obj = SchemaDefinition(**as_dict(obj)) |
| 80 | + assert INSERTED_COMMENT in obj.classes["Person"].comments |
| 81 | + |
| 82 | + |
| 83 | +def test_non_mutating_transformer(): |
| 84 | + """ |
| 85 | + Tests using transform_object_tree to apply changes |
| 86 | + """ |
| 87 | + # use the schema as a data object |
| 88 | + obj = yaml_loader.load(SCHEMA, target_class=SchemaDefinition) |
| 89 | + orig = deepcopy(obj) |
| 90 | + n_changes = 0 |
| 91 | + |
| 92 | + def tr(in_obj: YAMLRoot): |
| 93 | + nonlocal n_changes |
| 94 | + if isinstance(in_obj, ClassDefinition): |
| 95 | + in_obj.comments.append(INSERTED_COMMENT) |
| 96 | + n_changes += 1 |
| 97 | + return in_obj |
40 | 98 |
|
41 | | - def test_collector(self): |
42 | | - """ |
43 | | - Tests using a transformer to collect statistics on an object |
44 | | - """ |
45 | | - # use the schema as a data object |
46 | | - obj = yaml_loader.load(SCHEMA, target_class=SchemaDefinition) |
47 | | - orig = deepcopy(obj) |
48 | | - n_classes = 0 |
49 | | - |
50 | | - def collect(in_obj: YAMLRoot): |
51 | | - nonlocal n_classes |
52 | | - if isinstance(in_obj, ClassDefinition): |
53 | | - n_classes += 1 |
54 | | - return in_obj |
55 | | - |
56 | | - obj_tr = traverse_object_tree(obj, collect) |
57 | | - self.assertGreater(n_classes, 1) |
58 | | - # test object is not mutated |
59 | | - self.assertEqual(orig, obj) |
60 | | - # test transformed object is same as input |
61 | | - self.assertEqual(obj_tr, obj) |
62 | | - self.assertEqual(count_classes(obj), n_classes) |
63 | | - |
64 | | - def test_mutating_transformer(self): |
65 | | - """ |
66 | | - Tests using transform_object_tree to apply changes |
67 | | - """ |
68 | | - # use the schema as a data object |
69 | | - obj = yaml_loader.load(SCHEMA, target_class=SchemaDefinition) |
70 | | - orig = deepcopy(obj) |
71 | | - n_changes = 0 |
72 | | - |
73 | | - def tr(in_obj: YAMLRoot): |
74 | | - nonlocal n_changes |
75 | | - if isinstance(in_obj, ClassDefinition): |
76 | | - in_obj.comments.append(INSERTED_COMMENT) |
77 | | - n_changes += 1 |
78 | | - return in_obj |
79 | | - |
80 | | - obj_tr = traverse_object_tree(obj, tr) |
81 | | - self.assertGreater(n_changes, 1) |
82 | | - self.assertNotEqual(orig, obj) |
83 | | - self.assertEqual(obj_tr, obj) |
84 | | - obj = SchemaDefinition(**as_dict(obj)) |
85 | | - assert INSERTED_COMMENT in obj.classes["Person"].comments |
86 | | - |
87 | | - def test_non_mutating_transformer(self): |
88 | | - """ |
89 | | - Tests using transform_object_tree to apply changes |
90 | | - """ |
91 | | - # use the schema as a data object |
92 | | - obj = yaml_loader.load(SCHEMA, target_class=SchemaDefinition) |
93 | | - orig = deepcopy(obj) |
94 | | - n_changes = 0 |
95 | | - |
96 | | - def tr(in_obj: YAMLRoot): |
97 | | - nonlocal n_changes |
98 | | - if isinstance(in_obj, ClassDefinition): |
99 | | - in_obj.comments.append(INSERTED_COMMENT) |
100 | | - n_changes += 1 |
101 | | - return in_obj |
102 | | - |
103 | | - obj_tr = traverse_object_tree(obj, tr, mutate=False) |
104 | | - self.assertGreater(n_changes, 1) |
105 | | - # check does not mutate |
106 | | - self.assertEqual(orig, obj) |
107 | | - # check new object is different |
108 | | - self.assertNotEqual(obj_tr, orig) |
109 | | - self.assertNotEqual(obj_tr, obj) |
110 | | - obj_tr = SchemaDefinition(**as_dict(obj_tr)) |
111 | | - assert INSERTED_COMMENT in obj_tr.classes["Person"].comments |
112 | | - |
113 | | - |
114 | | -if __name__ == "__main__": |
115 | | - unittest.main() |
| 99 | + obj_tr = traverse_object_tree(obj, tr, mutate=False) |
| 100 | + assert n_changes > 1 |
| 101 | + # check does not mutate |
| 102 | + assert orig == obj |
| 103 | + # check new object is different |
| 104 | + assert obj_tr != orig |
| 105 | + assert obj_tr != obj |
| 106 | + obj_tr = SchemaDefinition(**as_dict(obj_tr)) |
| 107 | + assert INSERTED_COMMENT in obj_tr.classes["Person"].comments |
0 commit comments