def test_one_table_with_id(generate_traps): assert generate_traps([ dbscheme.Table(name="foos", columns=[ dbscheme.Column("bla", "int", binding=True)]), ]) == [ cpp.Trap("foos", name="Foos", fields=[cpp.Field( "bla", "int")], id=cpp.Field("bla", "int")), ]
def test_trap_has_first_field_marked(): fields = [ cpp.Field("a", "x"), cpp.Field("b", "y"), cpp.Field("c", "z"), ] expected = deepcopy(fields) expected[0].first = True t = cpp.Trap("table_name", "name", fields) assert t.fields == expected
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]
def test_one_table_with_two_binding_first_is_id(generate_traps): assert generate_traps([ dbscheme.Table(name="foos", columns=[ dbscheme.Column("x", "a", binding=True), dbscheme.Column("y", "b", binding=True), ]), ]) == [ cpp.Trap("foos", name="Foos", fields=[ cpp.Field("x", "a"), cpp.Field("y", "b"), ], id=cpp.Field("x", "a")), ]
def test_one_table_overridden_underscore_named_field(generate_traps): assert generate_traps([ dbscheme.Table(name="foos", columns=[dbscheme.Column("whatever_", "bar")]), ]) == [ cpp.Trap("foos", name="Foos", fields=[cpp.Field("whatever", "bar")]), ]
def get_field(c: dbscheme.Column): args = { "field_name": c.schema_name, "type": c.type, } args.update(cpp.get_field_override(c.schema_name)) args["type"] = get_cpp_type(args["type"]) return cpp.Field(**args)
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) ]
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) ]
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) ]
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) ]
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) ]
def _get_field(cls: schema.Class, p: schema.Property) -> cpp.Field: trap_name = None if not p.is_single: trap_name = inflection.camelize(f"{cls.name}_{p.name}") if not p.is_predicate: trap_name = inflection.pluralize(trap_name) args = dict( field_name=p.name + ("_" if p.name in cpp.cpp_keywords else ""), type=_get_type(p.type), is_optional=p.is_optional, is_repeated=p.is_repeated, is_predicate=p.is_predicate, trap_name=trap_name, ) args.update(cpp.get_field_override(p.name)) return cpp.Field(**args)
def test_field_get_streamer(type, expected): f = cpp.Field("name", type) assert f.get_streamer()("value") == expected
def test_one_table(generate_traps): assert generate_traps([ dbscheme.Table(name="foos", columns=[dbscheme.Column("bla", "int")]), ]) == [ cpp.Trap("foos", name="Foos", fields=[cpp.Field("bla", "int")]), ]
def test_one_table_overridden_unsigned_field(generate_traps, name): assert generate_traps([ dbscheme.Table(name="foos", columns=[dbscheme.Column(name, "bar")]), ]) == [ cpp.Trap("foos", name="Foos", fields=[cpp.Field(name, "unsigned")]), ]
def test_one_table_with_two_binding_first_is_id(generate_traps): assert generate_traps([ dbscheme.Table(name="foos", columns=[ dbscheme.Column("x", "a", binding=True), dbscheme.Column("y", "b", binding=True), ]), ]) == [ cpp.Trap("foos", name="Foos", fields=[ cpp.Field("x", "a"), cpp.Field("y", "b"), ], id=cpp.Field("x", "a")), ] @pytest.mark.parametrize("column,field", [ (dbscheme.Column("x", "string"), cpp.Field("x", "std::string")), (dbscheme.Column("y", "boolean"), cpp.Field("y", "bool")), (dbscheme.Column("z", "@db_type"), cpp.Field("z", "TrapAffixLabel<DbTypeTag>")), ]) def test_one_table_special_types(generate_traps, column, field): assert generate_traps([ dbscheme.Table(name="foos", columns=[column]), ]) == [ cpp.Trap("foos", name="Foos", fields=[field]), ] @pytest.mark.parametrize("name", ["start_line", "start_column", "end_line", "end_column", "index", "num_whatever"]) def test_one_table_overridden_unsigned_field(generate_traps, name): assert generate_traps([ dbscheme.Table(name="foos", columns=[dbscheme.Column(name, "bar")]),
def test_field_keyword_name(keyword): f = cpp.Field(keyword, "int") assert f.field_name == keyword + "_"
def test_field_modal_types(is_optional, is_repeated, expected): f = cpp.Field("name", "bar", is_optional=is_optional, is_repeated=is_repeated) assert f.type == expected
def test_field_is_single(is_optional, is_repeated, is_predicate, expected): f = cpp.Field("name", "type", is_optional=is_optional, is_repeated=is_repeated, is_predicate=is_predicate) assert f.is_single is expected
def test_field_name(): f = cpp.Field("foo", "int") assert f.field_name == "foo"