Esempio n. 1
0
def test_final_class_with_predicate_field(opts, input, renderer):
    input.classes = [
        schema.Class("Object", properties=[
            schema.PredicateProperty("foo"),
        ]),
    ]
    assert generate(opts, renderer) == dbscheme.Scheme(
        src=schema_file,
        includes=[],
        declarations=[
            dbscheme.Table(
                name="objects",
                columns=[
                    dbscheme.Column('id', '@object', binding=True),
                ]
            ),
            dbscheme.Table(
                name="object_foo",
                keyset=dbscheme.KeySet(["id"]),
                columns=[
                    dbscheme.Column('id', '@object'),
                ]
            ),
        ],
    )
Esempio n. 2
0
def test_final_class_with_repeated_field(opts, input, renderer, property_cls):
    input.classes = [
        schema.Class("Object", properties=[
            property_cls("foo", "bar"),
        ]),
    ]
    assert generate(opts, renderer) == dbscheme.Scheme(
        src=schema_file,
        includes=[],
        declarations=[
            dbscheme.Table(
                name="objects",
                columns=[
                    dbscheme.Column('id', '@object', binding=True),
                ]
            ),
            dbscheme.Table(
                name="object_foos",
                keyset=dbscheme.KeySet(["id", "index"]),
                columns=[
                    dbscheme.Column('id', '@object'),
                    dbscheme.Column('index', 'int'),
                    dbscheme.Column('foo', 'bar'),
                ]
            ),
        ],
    )
Esempio n. 3
0
def test_final_class_with_more_fields(opts, input, renderer):
    input.classes = [
        schema.Class("Object", properties=[
            schema.SingleProperty("one", "x"),
            schema.SingleProperty("two", "y"),
            schema.OptionalProperty("three", "z"),
            schema.RepeatedProperty("four", "u"),
            schema.RepeatedOptionalProperty("five", "v"),
            schema.PredicateProperty("six"),
        ]),
    ]
    assert generate(opts, renderer) == dbscheme.Scheme(
        src=schema_file,
        includes=[],
        declarations=[
            dbscheme.Table(
                name="objects",
                columns=[
                    dbscheme.Column('id', '@object', binding=True),
                    dbscheme.Column('one', 'x'),
                    dbscheme.Column('two', 'y'),
                ]
            ),
            dbscheme.Table(
                name="object_threes",
                keyset=dbscheme.KeySet(["id"]),
                columns=[
                    dbscheme.Column('id', '@object'),
                    dbscheme.Column('three', 'z'),
                ]
            ),
            dbscheme.Table(
                name="object_fours",
                keyset=dbscheme.KeySet(["id", "index"]),
                columns=[
                    dbscheme.Column('id', '@object'),
                    dbscheme.Column('index', 'int'),
                    dbscheme.Column('four', 'u'),
                ]
            ),
            dbscheme.Table(
                name="object_fives",
                keyset=dbscheme.KeySet(["id", "index"]),
                columns=[
                    dbscheme.Column('id', '@object'),
                    dbscheme.Column('index', 'int'),
                    dbscheme.Column('five', 'v'),
                ]
            ),
            dbscheme.Table(
                name="object_six",
                keyset=dbscheme.KeySet(["id"]),
                columns=[
                    dbscheme.Column('id', '@object'),
                ]
            ),
        ],
    )
Esempio n. 4
0
def test_class_with_derived_and_repeated_property(opts, input, renderer):
    input.classes = [
        schema.Class(
            name="Base",
            derived={"Left", "Right"},
            properties=[
                schema.RepeatedProperty("rep", "Prop"),
            ]),
    ]
    assert generate(opts, renderer) == dbscheme.Scheme(
        src=schema_file,
        includes=[],
        declarations=[
            dbscheme.Union(
                lhs="@base",
                rhs=["@left", "@right"],
            ),
            dbscheme.Table(
                name="base_reps",
                keyset=dbscheme.KeySet(["id", "index"]),
                columns=[
                    dbscheme.Column('id', '@base'),
                    dbscheme.Column('index', 'int'),
                    dbscheme.Column('rep', '@prop'),
                ]
            )
        ],
    )
Esempio n. 5
0
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")]),
    ]
Esempio n. 6
0
def test_load_table_with_keyset(load):
    assert load("""
#keyset[x,  y,z]
test_foos();
""") == [
        dbscheme.Table(name="test_foos", columns=[], keyset=dbscheme.KeySet(["x", "y", "z"]))
    ]
Esempio n. 7
0
def test_load_table_with_column(load, column, expected):
    assert load(f"""
foos(
  {column}
);
""") == [
        dbscheme.Table(name="foos", columns=[deepcopy(expected)])
    ]
Esempio n. 8
0
def test_table_and_union(load):
    assert load("""
foos();
    
@foo = @bar | @baz | @bla;""") == [
        dbscheme.Table(name="foos", columns=[]),
        dbscheme.Union(lhs="@foo", rhs=["@bar", "@baz", "@bla"]),
    ]
Esempio n. 9
0
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")),
    ]
Esempio n. 10
0
def test_load_table_with_multiple_columns(load):
    columns = ",\n".join(c for c, _ in expected_columns)
    expected = [deepcopy(e) for _, e in expected_columns]
    assert load(f"""
foos(
{columns}
);
""") == [
        dbscheme.Table(name="foos", columns=expected)
    ]
Esempio n. 11
0
def test_comments_ignored(load):
    assert load("""
// fake_table();
foos(/* x */unique /*y*/int/*
z
*/ id/* */: /* * */ @bar/*,
int ignored: int ref*/);
    
@foo = @bar | @baz | @bla; // | @xxx""") == [
        dbscheme.Table(name="foos", columns=[dbscheme.Column(schema_name="id", type="@bar", binding=True)]),
        dbscheme.Union(lhs="@foo", rhs=["@bar", "@baz", "@bla"]),
    ]
Esempio n. 12
0
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")),
    ]
Esempio n. 13
0
def test_empty_final_class(opts, input, renderer):
    input.classes = [
        schema.Class("Object"),
    ]
    assert generate(opts, renderer) == dbscheme.Scheme(
        src=schema_file,
        includes=[],
        declarations=[
            dbscheme.Table(name="objects",
                           columns=[
                               dbscheme.Column('id', '@object', binding=True),
                           ])
        ],
    )
Esempio n. 14
0
def test_final_class_with_single_class_field(opts, input, renderer):
    input.classes = [
        schema.Class("Object",
                     properties=[
                         schema.SingleProperty("foo", "Bar"),
                     ]),
    ]
    assert generate(opts, renderer) == dbscheme.Scheme(
        src=schema_file,
        includes=[],
        declarations=[
            dbscheme.Table(name="objects",
                           columns=[
                               dbscheme.Column('id', '@object', binding=True),
                               dbscheme.Column('foo', '@bar'),
                           ])
        ],
    )
Esempio n. 15
0
def test_table_has_first_column_marked():
    columns = [dbscheme.Column("a", "x"), dbscheme.Column("b", "y", binding=True), dbscheme.Column("c", "z")]
    expected = deepcopy(columns)
    table = dbscheme.Table("foo", columns)
    expected[0].first = True
    assert table.columns == expected
Esempio n. 16
0
def test_load_multiple_table_with_columns(load):
    tables = [f"table{i}({col});" for i, (col, _) in enumerate(expected_columns)]
    expected = [dbscheme.Table(name=f"table{i}", columns=[deepcopy(e)]) for i, (_, e) in enumerate(expected_columns)]
    assert load("\n".join(tables)) == expected
Esempio n. 17
0
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")]),
    ]
Esempio n. 18
0
def test_one_empty_table_rejected(generate_traps):
    with pytest.raises(AssertionError):
        generate_traps([
            dbscheme.Table(name="foos", columns=[]),
        ])
Esempio n. 19
0
def test_one_table_no_tags(generate_tags):
    assert generate_tags([
        dbscheme.Table(name="foos", columns=[dbscheme.Column("bla", "int")]),
    ]) == []
Esempio n. 20
0
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")]),
    ]
Esempio n. 21
0
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]),
    ]
Esempio n. 22
0
def test_load_one_empty_table(load):
    assert load("""
test_foos();
""") == [
        dbscheme.Table(name="test_foos", columns=[])
    ]