|
8 | 8 |
|
9 | 9 |
|
10 | 10 | @pytest.fixture |
11 | | -def generate(opts, renderer, input): |
| 11 | +def generate_grouped(opts, renderer, input): |
12 | 12 | opts.cpp_output = output_dir |
13 | 13 |
|
14 | 14 | def ret(classes): |
15 | 15 | input.classes = classes |
16 | 16 | generated = run_generation(cppgen.generate, opts, renderer) |
17 | | - assert set(generated) == {output_dir / "TrapClasses"} |
18 | | - generated = generated[output_dir / "TrapClasses"] |
19 | | - assert isinstance(generated, cpp.ClassList) |
20 | | - return generated.classes |
| 17 | + for f, g in generated.items(): |
| 18 | + assert isinstance(g, cpp.ClassList), f |
| 19 | + assert g.include_parent is (f.parent != output_dir) |
| 20 | + assert f.name == "TrapClasses", f |
| 21 | + return {str(f.parent.relative_to(output_dir)): g.classes for f, g in generated.items()} |
| 22 | + |
| 23 | + return ret |
| 24 | + |
| 25 | + |
| 26 | +@pytest.fixture |
| 27 | +def generate(generate_grouped): |
| 28 | + def ret(classes): |
| 29 | + generated = generate_grouped(classes) |
| 30 | + assert set(generated) == {"."} |
| 31 | + return generated["."] |
21 | 32 |
|
22 | 33 | return ret |
23 | 34 |
|
@@ -88,10 +99,12 @@ def test_class_with_field(generate, type, expected, property_cls, optional, repe |
88 | 99 |
|
89 | 100 | def test_class_with_predicate(generate): |
90 | 101 | assert generate([ |
91 | | - schema.Class(name="MyClass", properties=[schema.PredicateProperty("prop")]), |
| 102 | + schema.Class(name="MyClass", properties=[ |
| 103 | + schema.PredicateProperty("prop")]), |
92 | 104 | ]) == [ |
93 | 105 | cpp.Class(name="MyClass", |
94 | | - fields=[cpp.Field("prop", "bool", trap_name="MyClassProp", is_predicate=True)], |
| 106 | + fields=[ |
| 107 | + cpp.Field("prop", "bool", trap_name="MyClassProp", is_predicate=True)], |
95 | 108 | trap_name="MyClasses", |
96 | 109 | final=True) |
97 | 110 | ] |
@@ -136,5 +149,21 @@ def test_class_with_keyword_field(generate, name): |
136 | 149 | ] |
137 | 150 |
|
138 | 151 |
|
| 152 | +def test_classes_with_dirs(generate_grouped): |
| 153 | + cbase = cpp.Class(name="CBase") |
| 154 | + assert generate_grouped([ |
| 155 | + schema.Class(name="A"), |
| 156 | + schema.Class(name="B", dir=pathlib.Path("foo")), |
| 157 | + schema.Class(name="C", bases={"CBase"}, dir=pathlib.Path("bar")), |
| 158 | + schema.Class(name="CBase", derived={"C"}, dir=pathlib.Path("bar")), |
| 159 | + schema.Class(name="D", dir=pathlib.Path("foo/bar/baz")), |
| 160 | + ]) == { |
| 161 | + ".": [cpp.Class(name="A", trap_name="As", final=True)], |
| 162 | + "foo": [cpp.Class(name="B", trap_name="Bs", final=True)], |
| 163 | + "bar": [cbase, cpp.Class(name="C", bases=[cbase], trap_name="Cs", final=True)], |
| 164 | + "foo/bar/baz": [cpp.Class(name="D", trap_name="Ds", final=True)], |
| 165 | + } |
| 166 | + |
| 167 | + |
139 | 168 | if __name__ == '__main__': |
140 | 169 | sys.exit(pytest.main([__file__] + sys.argv[1:])) |
0 commit comments