Beispiel #1
0
def test_archive_schema_preserves_references():
    root = _build_node_tree("""namespace foo{
/// T Comment
struct T { /* fieldA comment*/ fieldA : u8 : 7; }
/**
 * Archive comment
 */
archive A {
    /// resource comment
    resourceA : T;
}
}
        """)
    resolve_references(root)
    expected = """namespace foo {
struct T
{
    fieldA : u8 : 7;
}
}

namespace foo {
archive A
{
    resourceA : .foo.T;
}
}

"""
    assert_equal(SyntaxTree.schema(root.find(".foo.A")), expected)
Beispiel #2
0
def test_schemas_are_not_duplicated_if_several_type_references_occur():
    root = _build_node_tree("""namespace foo{
/// T Comment
struct T { /* fieldA comment*/ fieldA : u8 : 7; }
/**
 * Archive comment
 */
archive A {
    resourceA : T;
    resourceB : T;
}
}
        """)
    resolve_references(root)
    expected = """namespace foo {
struct T
{
    fieldA : u8 : 7;
}
}

namespace foo {
archive A
{
    resourceA : .foo.T;
    resourceB : .foo.T;
}
}

"""
    actual = SyntaxTree.schema(root.find(".foo.A"))
    assert_equal(actual, expected)
Beispiel #3
0
def test_archive_schemas_include_constants():
    root = build_ast("""namespace foo{
const u8 C = 42;
struct T { f : u8 : 7; }
archive A {
    resourceA : T;
}
}
        """)
    resolve_references(root)
    expected = """namespace foo {
struct T
{
    f : u8 : 7;
}
}

namespace foo {
const u8 C = 42;
}

namespace foo {
archive A
{
    resourceA : .foo.T;
}
}

"""
    actual = SyntaxTree.schema(root.find(".foo.A"))
    assert_equal(actual, expected)
Beispiel #4
0
def _assert_missing_symbol_is_thrown(root, message):
    try:
        resolve_references(root)
    except errors.MissingSymbol as e:
        assert_equal(message, str(e))
    else:
        assert_false(True, "MissingSymbol was not thrown")
Beispiel #5
0
def test_resource_to_struct_references_are_resolved_for_the_current_scope():
    root = _create_tree_resource_to_struct(actual="Struct", reference="Struct")
    assert_is_instance(root.find('.ns.Archive.resource.@Struct'),
                       refs.StructureReference)
    resolve_references(root)
    assert_is_instance(root.find('.ns.Archive.resource.@@ns@Struct'),
                       refs.StructureReference)
Beispiel #6
0
def test_resource_to_field_references_are_resolved():
    root = _create_tree_with_explicit_reference("Archive.resource2")
    assert_is_instance(root.find('.ns.Archive.resource.@Struct@Field'),
                       refs.FieldReference)
    resolve_references(root)
    assert_is_instance(root.find('.ns.Archive.resource.@@ns@Struct@Field'),
                       refs.FieldReference)
Beispiel #7
0
def test_resource_to_archive_references_are_resolved():
    root = _create_tree_resource_to_archive()
    assert_is_instance(root.find('.ns.Archive.resource.@RefArchive'),
                       refs.ArchiveReference)
    resolve_references(root)
    assert_is_instance(root.find('.ns.Archive.resource.@@ns@RefArchive'),
                       refs.ArchiveReference)
Beispiel #8
0
def test_archive_member_schemas_references_dependent_types():
    root = _build_node_tree("""namespace n{
        struct T { t : u8 : 7; }
        struct U { u : u8 : 7; }
        struct V { v : u8 : 7; }
        archive A {
            a : T;
            b : vector< V >;
            c : multivector< 17, U, V >;
        }
        }
        """)
    resolve_references(root)
    assert_equal(
        SyntaxTree.schema(root.find(".n.A.a")),
        "namespace n { struct T { t : u8 : 7; } }\n"
        "namespace n { a : T; }")
    assert_equal(
        SyntaxTree.schema(root.find(".n.A.b")),
        "namespace n { struct V { v : u8 : 7; } }\n"
        "namespace n { b : vector< V >; }")
    assert_equal(
        SyntaxTree.schema(root.find(".n.A.c")),
        "namespace n { struct U { u : u8 : 7; } }\n"
        "namespace n { struct V { v : u8 : 7; } }\n"
        "namespace n { c : multivector< 17, U, V >; }")
Beispiel #9
0
def test_resource_to_resource_references_are_resolved_for_parent_scope():
    root = _create_tree_with_explicit_reference("resource2")
    assert_is_instance(root.find('.ns.Archive.resource.@resource2'),
                       refs.ResourceReference)
    resolve_references(root)
    assert_is_instance(
        root.find('.ns.Archive.resource.@@ns@Archive@resource2'),
        refs.ResourceReference)
Beispiel #10
0
def test_resource_to_struct_references_are_verified_if_global_path_is_specified(
):
    root = _create_tree_resource_to_struct_with_extra_folding(
        "Struct", ".ns.fold.Struct")
    assert_is_instance(root.find('.ns.Archive.resource.@@ns@fold@Struct'),
                       refs.StructureReference)
    resolve_references(root)
    assert_is_instance(root.find('.ns.Archive.resource.@@ns@fold@Struct'),
                       refs.StructureReference)
Beispiel #11
0
def test_implicit_references_structure_is_resolved():
    root = Root().insert(
        nodes.Namespace("n").insert(
            Archive("A").insert(
                res.Vector("r1"), res.Vector("r2"),
                res.BoundResource("b").insert(
                    refs.ResourceReference("A.r1"),
                    refs.ResourceReference("A.r2")))))
    resolve_references(root)
    assert_equal("@@n@A@r1", root.find('.n.A.b').children[0].name)
    assert_equal("@@n@A@r2", root.find('.n.A.b').children[1].name)
Beispiel #12
0
def test_resolved_references_appear_in_original_order():
    root = _create_tree_with_two_struct_references()
    resolve_references(root)
    assert_equal("@@ns@S1", root.find('.ns.Archive.resource').children[0].name)
    assert_equal("@@ns@S2", root.find('.ns.Archive.resource').children[1].name)