示例#1
0
def test_class_dir(opts, input, renderer):
    dir = pathlib.Path("another/rel/path")
    input.classes = [
        schema.Class("A", derived={"B"}, dir=dir),
        schema.Class("B", bases={"A"}),
    ]
    assert generate(opts, renderer) == {
        import_file():
        ql.ImportList([
            stub_import_prefix + "another.rel.path.A",
            stub_import_prefix + "B",
        ]),
        stub_path() / dir / "A.qll":
        ql.Stub(name="A",
                base_import=gen_import_prefix + "another.rel.path.A"),
        stub_path() / "B.qll":
        ql.Stub(name="B", base_import=gen_import_prefix + "B"),
        ql_output_path() / dir / "A.qll":
        ql.Class(name="A", dir=dir),
        ql_output_path() / "B.qll":
        ql.Class(name="B",
                 final=True,
                 bases=["A"],
                 imports=[stub_import_prefix + "another.rel.path.A"])
    }
示例#2
0
def test_hierarchy(opts, input, renderer):
    input.classes = [
        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"}),
    ]
    assert generate(opts, renderer) == {
        import_file():
        ql.ImportList([stub_import_prefix + cls for cls in "ABCD"]),
        stub_path() / "A.qll":
        ql.Stub(name="A", base_import=gen_import_prefix + "A"),
        stub_path() / "B.qll":
        ql.Stub(name="B", base_import=gen_import_prefix + "B"),
        stub_path() / "C.qll":
        ql.Stub(name="C", base_import=gen_import_prefix + "C"),
        stub_path() / "D.qll":
        ql.Stub(name="D", base_import=gen_import_prefix + "D"),
        ql_output_path() / "A.qll":
        ql.Class(name="A"),
        ql_output_path() / "B.qll":
        ql.Class(name="B", bases=["A"], imports=[stub_import_prefix + "A"]),
        ql_output_path() / "C.qll":
        ql.Class(name="C", bases=["A"], imports=[stub_import_prefix + "A"]),
        ql_output_path() / "D.qll":
        ql.Class(name="D",
                 final=True,
                 bases=["B", "C"],
                 imports=[stub_import_prefix + cls for cls in "BC"]),
    }
示例#3
0
def test_single_class_property(opts, input, renderer):
    input.classes = [
        schema.Class("MyObject",
                     properties=[schema.SingleProperty("foo", "Bar")]),
        schema.Class("Bar"),
    ]
    assert generate(opts, renderer) == {
        import_file():
        ql.ImportList(
            [stub_import_prefix + cls for cls in ("Bar", "MyObject")]),
        stub_path() / "MyObject.qll":
        ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"),
        stub_path() / "Bar.qll":
        ql.Stub(name="Bar", base_import=gen_import_prefix + "Bar"),
        ql_output_path() / "MyObject.qll":
        ql.Class(
            name="MyObject",
            final=True,
            imports=[stub_import_prefix + "Bar"],
            properties=[
                ql.Property(singular="Foo",
                            type="Bar",
                            tablename="my_objects",
                            tableparams=["this", "result"]),
            ],
        ),
        ql_output_path() / "Bar.qll":
        ql.Class(name="Bar", final=True)
    }
示例#4
0
def test_single_class_property(generate_classes, is_child):
    assert generate_classes([
        schema.Class("MyObject",
                     properties=[
                         schema.SingleProperty("foo", "Bar", is_child=is_child)
                     ]),
        schema.Class("Bar"),
    ]) == {
        "MyObject.qll": (ql.Stub(name="MyObject",
                                 base_import=gen_import_prefix + "MyObject"),
                         ql.Class(
                             name="MyObject",
                             final=True,
                             imports=[stub_import_prefix + "Bar"],
                             properties=[
                                 ql.Property(singular="Foo",
                                             type="Bar",
                                             tablename="my_objects",
                                             tableparams=["this", "result"],
                                             is_child=is_child),
                             ],
                         )),
        "Bar.qll": (ql.Stub(name="Bar", base_import=gen_import_prefix + "Bar"),
                    ql.Class(name="Bar", final=True)),
    }
示例#5
0
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"}),
    ]) == ql.GetParentImplementation(classes=[
        ql.Class(name="A"),
        ql.Class(name="B", bases=["A"], imports=[stub_import_prefix + "A"]),
        ql.Class(name="C", bases=["A"], imports=[stub_import_prefix + "A"]),
        ql.Class(name="D",
                 final=True,
                 bases=["B", "C"],
                 imports=[stub_import_prefix + cls for cls in "BC"]),
    ], )
示例#6
0
def test_single_properties(generate_classes):
    assert generate_classes([
        schema.Class("MyObject",
                     properties=[
                         schema.SingleProperty("one", "x"),
                         schema.SingleProperty("two", "y"),
                         schema.SingleProperty("three", "z"),
                     ]),
    ]) == {
        "MyObject.qll":
        (ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"),
         ql.Class(name="MyObject",
                  final=True,
                  properties=[
                      ql.Property(singular="One",
                                  type="x",
                                  tablename="my_objects",
                                  tableparams=["this", "result", "_", "_"]),
                      ql.Property(singular="Two",
                                  type="y",
                                  tablename="my_objects",
                                  tableparams=["this", "_", "result", "_"]),
                      ql.Property(singular="Three",
                                  type="z",
                                  tablename="my_objects",
                                  tableparams=["this", "_", "_", "result"]),
                  ])),
    }
示例#7
0
def test_single_properties(opts, input, renderer):
    input.classes = [
        schema.Class("MyObject",
                     properties=[
                         schema.SingleProperty("one", "x"),
                         schema.SingleProperty("two", "y"),
                         schema.SingleProperty("three", "z"),
                     ]),
    ]
    assert generate(opts, renderer) == {
        import_file():
        ql.ImportList([stub_import_prefix + "MyObject"]),
        stub_path() / "MyObject.qll":
        ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"),
        ql_output_path() / "MyObject.qll":
        ql.Class(name="MyObject",
                 final=True,
                 properties=[
                     ql.Property(singular="One",
                                 type="x",
                                 tablename="my_objects",
                                 tableparams=["this", "result", "_", "_"]),
                     ql.Property(singular="Two",
                                 type="y",
                                 tablename="my_objects",
                                 tableparams=["this", "_", "result", "_"]),
                     ql.Property(singular="Three",
                                 type="z",
                                 tablename="my_objects",
                                 tableparams=["this", "_", "_", "result"]),
                 ])
    }
示例#8
0
def get_ql_class(cls: schema.Class):
    return ql.Class(
        name=cls.name,
        bases=cls.bases,
        final=not cls.derived,
        properties=[get_ql_property(cls, p) for p in cls.properties],
        dir=cls.dir,
    )
示例#9
0
def test_class_dir(generate_classes):
    dir = pathlib.Path("another/rel/path")
    assert generate_classes([
        schema.Class("A", derived={"B"}, dir=dir),
        schema.Class("B", bases={"A"}),
    ]) == {
        f"{dir}/A.qll":
        (ql.Stub(name="A",
                 base_import=gen_import_prefix + "another.rel.path.A"),
         ql.Class(name="A", dir=dir)),
        "B.qll":
        (ql.Stub(name="B", base_import=gen_import_prefix + "B"),
         ql.Class(name="B",
                  final=True,
                  bases=["A"],
                  imports=[stub_import_prefix + "another.rel.path.A"])),
    }
示例#10
0
def test_class_has_first_property_marked():
    props = [
        ql.Property(f"Prop{x}", f"Foo{x}", f"props{x}", [f"{x}"])
        for x in range(4)
    ]
    expected = deepcopy(props)
    expected[0].first = True
    cls = ql.Class("Class", properties=props)
    assert cls.properties == expected
示例#11
0
def test_one_empty_class(opts, input, renderer):
    input.classes = [schema.Class("A")]
    assert generate(opts, renderer) == {
        import_file():
        ql.ImportList([stub_import_prefix + "A"]),
        stub_path() / "A.qll":
        ql.Stub(name="A", base_import=gen_import_prefix + "A"),
        ql_output_path() / "A.qll":
        ql.Class(name="A", final=True),
    }
示例#12
0
def test_hierarchy(generate_classes):
    assert generate_classes([
        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"}),
    ]) == {
        "A.qll": (ql.Stub(name="A", base_import=gen_import_prefix + "A"),
                  ql.Class(name="A")),
        "B.qll": (ql.Stub(name="B", base_import=gen_import_prefix + "B"),
                  ql.Class(name="B",
                           bases=["A"],
                           imports=[stub_import_prefix + "A"])),
        "C.qll": (ql.Stub(name="C", base_import=gen_import_prefix + "C"),
                  ql.Class(name="C",
                           bases=["A"],
                           imports=[stub_import_prefix + "A"])),
        "D.qll":
        (ql.Stub(name="D", base_import=gen_import_prefix + "D"),
         ql.Class(name="D",
                  final=True,
                  bases=["B", "C"],
                  imports=[stub_import_prefix + cls for cls in "BC"])),
    }
示例#13
0
def test_single_property(generate_classes):
    assert generate_classes([
        schema.Class("MyObject",
                     properties=[schema.SingleProperty("foo", "bar")]),
    ]) == {
        "MyObject.qll":
        (ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"),
         ql.Class(name="MyObject",
                  final=True,
                  properties=[
                      ql.Property(singular="Foo",
                                  type="bar",
                                  tablename="my_objects",
                                  tableparams=["this", "result"]),
                  ])),
    }
示例#14
0
def test_predicate_property(generate_classes):
    assert generate_classes([
        schema.Class("MyObject",
                     properties=[schema.PredicateProperty("is_foo")]),
    ]) == {
        "MyObject.qll": (ql.Stub(name="MyObject",
                                 base_import=gen_import_prefix + "MyObject"),
                         ql.Class(name="MyObject",
                                  final=True,
                                  properties=[
                                      ql.Property(singular="isFoo",
                                                  type="predicate",
                                                  tablename="my_object_is_foo",
                                                  tableparams=["this"],
                                                  is_predicate=True),
                                  ])),
    }
示例#15
0
def test_predicate_property(opts, input, renderer):
    input.classes = [
        schema.Class("MyObject",
                     properties=[schema.PredicateProperty("is_foo")]),
    ]
    assert generate(opts, renderer) == {
        import_file():
        ql.ImportList([stub_import_prefix + "MyObject"]),
        stub_path() / "MyObject.qll":
        ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"),
        ql_output_path() / "MyObject.qll":
        ql.Class(name="MyObject",
                 final=True,
                 properties=[
                     ql.Property(singular="isFoo",
                                 type="predicate",
                                 tablename="my_object_is_foo",
                                 tableparams=["this"],
                                 is_predicate=True),
                 ])
    }
示例#16
0
def test_repeated_property(opts, input, renderer):
    input.classes = [
        schema.Class("MyObject",
                     properties=[schema.RepeatedProperty("foo", "bar")]),
    ]
    assert generate(opts, renderer) == {
        import_file():
        ql.ImportList([stub_import_prefix + "MyObject"]),
        stub_path() / "MyObject.qll":
        ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"),
        ql_output_path() / "MyObject.qll":
        ql.Class(name="MyObject",
                 final=True,
                 properties=[
                     ql.Property(singular="Foo",
                                 plural="Foos",
                                 type="bar",
                                 tablename="my_object_foos",
                                 tableparams=["this", "index", "result"]),
                 ])
    }
示例#17
0
def test_repeated_property(generate_classes, is_child):
    assert generate_classes([
        schema.Class("MyObject",
                     properties=[
                         schema.RepeatedProperty("foo",
                                                 "bar",
                                                 is_child=is_child)
                     ]),
    ]) == {
        "MyObject.qll":
        (ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"),
         ql.Class(name="MyObject",
                  final=True,
                  properties=[
                      ql.Property(singular="Foo",
                                  plural="Foos",
                                  type="bar",
                                  tablename="my_object_foos",
                                  tableparams=["this", "index", "result"],
                                  is_child=is_child),
                  ])),
    }
示例#18
0
def test_root_class():
    cls = ql.Class("Class")
    assert cls.root
示例#19
0
def test_class_sorts_bases():
    bases = ["B", "Ab", "C", "Aa"]
    expected = ["Aa", "Ab", "B", "C"]
    cls = ql.Class("Foo", bases=bases)
    assert cls.bases == expected
示例#20
0
def test_one_empty_class(generate_classes):
    assert generate_classes([schema.Class("A")]) == {
        "A.qll": (ql.Stub(name="A", base_import=gen_import_prefix + "A"),
                  ql.Class(name="A", final=True)),
    }
示例#21
0
def test_non_root_class():
    cls = ql.Class("Class", bases=["A"])
    assert not cls.root
示例#22
0
def test_class_db_id():
    cls = ql.Class("ThisIsMyClass")
    assert cls.db_id == "@this_is_my_class"