mirror of
https://github.com/github/codeql.git
synced 2026-05-05 13:45:19 +02:00
Swift: move toposort in schema.py
This makes the result of code generation independent of the order in which classes are defined in the schema, and makes additional topological sorting not required. Being independent from schema order will be important for reviewing the move to a pure python schema, as generated code will be left untouched.
This commit is contained in:
@@ -56,23 +56,6 @@ def test_two_class_hierarchy(generate):
|
||||
]
|
||||
|
||||
|
||||
def test_complex_hierarchy_topologically_ordered(generate):
|
||||
a = cpp.Class(name="A")
|
||||
b = cpp.Class(name="B")
|
||||
c = cpp.Class(name="C", bases=[a])
|
||||
d = cpp.Class(name="D", bases=[a])
|
||||
e = cpp.Class(name="E", bases=[b, c, d], final=True, trap_name="Es")
|
||||
f = cpp.Class(name="F", bases=[c], final=True, trap_name="Fs")
|
||||
assert generate([
|
||||
schema.Class(name="F", bases=["C"]),
|
||||
schema.Class(name="B", derived={"E"}),
|
||||
schema.Class(name="D", bases=["A"], derived={"E"}),
|
||||
schema.Class(name="C", bases=["A"], derived={"E", "F"}),
|
||||
schema.Class(name="E", bases=["B", "C", "D"]),
|
||||
schema.Class(name="A", derived={"C", "D"}),
|
||||
]) == [a, b, c, d, e, f]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("type,expected", [
|
||||
("a", "a"),
|
||||
("string", "std::string"),
|
||||
@@ -154,8 +137,8 @@ def test_classes_with_dirs(generate_grouped):
|
||||
assert generate_grouped([
|
||||
schema.Class(name="A"),
|
||||
schema.Class(name="B", dir=pathlib.Path("foo")),
|
||||
schema.Class(name="C", bases=["CBase"], dir=pathlib.Path("bar")),
|
||||
schema.Class(name="CBase", derived={"C"}, dir=pathlib.Path("bar")),
|
||||
schema.Class(name="C", bases=["CBase"], dir=pathlib.Path("bar")),
|
||||
schema.Class(name="D", dir=pathlib.Path("foo/bar/baz")),
|
||||
]) == {
|
||||
".": [cpp.Class(name="A", trap_name="As", final=True)],
|
||||
|
||||
@@ -177,10 +177,10 @@ def test_hierarchy_imports(generate_import_list):
|
||||
|
||||
def test_hierarchy_children(generate_children_implementations):
|
||||
assert generate_children_implementations([
|
||||
schema.Class("D", bases=["B", "C"]),
|
||||
schema.Class("C", bases=["A"], derived={"D"}),
|
||||
schema.Class("B", bases=["A"], derived={"D"}),
|
||||
schema.Class("A", derived={"B", "C"}),
|
||||
schema.Class("B", bases=["A"], derived={"D"}),
|
||||
schema.Class("C", bases=["A"], derived={"D"}),
|
||||
schema.Class("D", bases=["B", "C"]),
|
||||
]) == ql.GetParentImplementation(
|
||||
classes=[ql.Class(name="A"),
|
||||
ql.Class(name="B", bases=["A"], imports=[
|
||||
|
||||
Reference in New Issue
Block a user