Example #1
0
def test_two_class_hierarchy(generate):
    base = cpp.Class(name="A")
    assert generate([
        schema.Class(name="A", derived={"B"}),
        schema.Class(name="B", bases={"A"}),
    ]) == [
        base,
        cpp.Class(name="B", bases=[base], final=True, trap_name="Bs"),
    ]
Example #2
0
def test_class_has_first_base_marked():
    bases = [
        cpp.Class("a"),
        cpp.Class("b"),
        cpp.Class("c"),
    ]
    expected = [cpp.ClassBase(c) for c in bases]
    expected[0].first = True
    c = cpp.Class("foo", bases=bases)
    assert c.bases == expected
Example #3
0
def test_class_with_predicate(generate):
    assert generate([
        schema.Class(name="MyClass", properties=[schema.PredicateProperty("prop")]),
    ]) == [
               cpp.Class(name="MyClass",
                         fields=[cpp.Field("prop", "bool", trap_name="MyClassProp", is_predicate=True)],
                         trap_name="MyClasses",
                         final=True)
           ]
Example #4
0
def test_class_single_fields():
    fields = [
        cpp.Field("a", "A"),
        cpp.Field("b", "B", is_optional=True),
        cpp.Field("c", "C"),
        cpp.Field("d", "D", is_repeated=True),
        cpp.Field("e", "E"),
    ]
    c = cpp.Class("foo", fields=fields)
    assert c.single_fields == fields[::2]
Example #5
0
def test_class_with_keyword_field(generate, name):
    assert generate([
        schema.Class(name="MyClass",
                     properties=[schema.SingleProperty(name, "bar")]),
    ]) == [
        cpp.Class(name="MyClass",
                  fields=[cpp.Field(name + "_", "bar")],
                  trap_name="MyClasses",
                  final=True)
    ]
Example #6
0
def test_class_with_overridden_underscore_field(generate):
    assert generate([
        schema.Class(name="MyClass",
                     properties=[schema.SingleProperty("something_", "bar")]),
    ]) == [
        cpp.Class(name="MyClass",
                  fields=[cpp.Field("something", "bar")],
                  trap_name="MyClasses",
                  final=True)
    ]
Example #7
0
def test_class_with_overridden_unsigned_field(generate, name):
    assert generate([
        schema.Class(name="MyClass",
                     properties=[schema.SingleProperty(name, "bar")]),
    ]) == [
        cpp.Class(name="MyClass",
                  fields=[cpp.Field(name, "unsigned")],
                  trap_name="MyClasses",
                  final=True)
    ]
Example #8
0
def test_class_with_field(generate, type, expected, property_cls, optional, repeated, trap_name):
    assert generate([
        schema.Class(name="MyClass", properties=[property_cls("prop", type)]),
    ]) == [
               cpp.Class(name="MyClass",
                         fields=[cpp.Field("prop", expected, is_optional=optional,
                                           is_repeated=repeated, trap_name=trap_name)],
                         trap_name="MyClasses",
                         final=True)
           ]
Example #9
0
 def _get_class(self, name: str) -> cpp.Class:
     cls = self._classmap[name]
     trap_name = None
     if not cls.derived or any(p.is_single for p in cls.properties):
         trap_name = inflection.pluralize(cls.name)
     return cpp.Class(
         name=name,
         bases=[self._get_class(b) for b in cls.bases],
         fields=[_get_field(cls, p) for p in cls.properties],
         final=not cls.derived,
         trap_name=trap_name,
     )
Example #10
0
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]
Example #11
0
def test_class_has_bases(bases, expected):
    t = cpp.Class("name", [cpp.Class(b) for b in bases])
    assert t.has_bases is expected
Example #12
0
def test_empty_class(generate):
    assert generate([
        schema.Class(name="MyClass"),
    ]) == [cpp.Class(name="MyClass", final=True, trap_name="MyClasses")]