Example #1
0
def test_multiple_union_tags(generate_tags):
    assert generate_tags([
        dbscheme.Union(lhs="@d", rhs=["@a"]),
        dbscheme.Union(lhs="@a", rhs=["@b", "@c"]),
        dbscheme.Union(lhs="@e", rhs=["@c", "@f"]),
    ]) == [
        cpp.Tag(name="D", bases=[], index=0, id="@d"),
        cpp.Tag(name="E", bases=[], index=1, id="@e"),
        cpp.Tag(name="A", bases=["D"], index=2, id="@a"),
        cpp.Tag(name="F", bases=["E"], index=3, id="@f"),
        cpp.Tag(name="B", bases=["A"], index=4, id="@b"),
        cpp.Tag(name="C", bases=["A", "E"], index=5, id="@c"),
    ]
Example #2
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'),
                ]
            )
        ],
    )
Example #3
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"]),
    ]
Example #4
0
def test_one_union_tags(generate_tags):
    assert generate_tags([
        dbscheme.Union(lhs="@left_hand_side", rhs=["@b", "@a", "@c"]),
    ]) == [
        cpp.Tag(name="LeftHandSide", bases=[], index=0, id="@left_hand_side"),
        cpp.Tag(name="A", bases=["LeftHandSide"], index=1, id="@a"),
        cpp.Tag(name="B", bases=["LeftHandSide"], index=2, id="@b"),
        cpp.Tag(name="C", bases=["LeftHandSide"], index=3, id="@c"),
    ]
Example #5
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"]),
    ]
Example #6
0
def test_empty_class_with_derived(opts, input, renderer):
    input.classes = [
        schema.Class(name="Base", derived={"Left", "Right"}),
    ]
    assert generate(opts, renderer) == dbscheme.Scheme(
        src=schema_file,
        includes=[],
        declarations=[
            dbscheme.Union(
                lhs="@base",
                rhs=["@left", "@right"],
            ),
        ],
    )
Example #7
0
def test_union_has_first_case_marked():
    rhs = ["a", "b", "c"]
    u = dbscheme.Union(lhs="x", rhs=rhs)
    assert u.rhs[0].first
    assert [c.type for c in u.rhs] == rhs
Example #8
0
def test_union(load):
    assert load("@foo = @bar | @baz | @bla;") == [
        dbscheme.Union(lhs="@foo", rhs=["@bar", "@baz", "@bla"]),
    ]