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"), ]
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'), ] ) ], )
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"]), ]
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"), ]
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"]), ]
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"], ), ], )
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
def test_union(load): assert load("@foo = @bar | @baz | @bla;") == [ dbscheme.Union(lhs="@foo", rhs=["@bar", "@baz", "@bla"]), ]