def test_parse_file():
    testcode = """
typedef double myfloat;
enum E
{
    E1, E2
};

class A
{
public:
    int i;
    myfloat d;
    bool b;
    A(int i=1, double d=1.0, bool b=false) {}
    void method1(int i) {}
    double method2(bool b) {}
};

struct B
{
    int i;
};

template<typename T1>
class C
{
public:
    C(T t) {}
    template<typename T2>
    void method(T2 t) {}
};

void function1() {}

namespace N1
{
namespace N2
{
template<typename T>
void function2() {}
}
}
"""

    _, filename = tempfile.mkstemp(".hpp")
    with open(filename, "w") as f:
        f.write(testcode)

    try:
        parser = Parser(filename)
        ast = parser.parse()
    finally:
        if os.path.exists(filename):
            os.remove(filename)
        if os.path.exists(filename + ".cc"):
            os.remove(filename + ".cc")

    assert_equal(len(ast.nodes), 3 + 2 + 1 + 1)
Example #2
0
def test_parse_file():
    testcode = """
typedef double myfloat;
enum E
{
    E1, E2
};

class A
{
public:
    int i;
    myfloat d;
    bool b;
    A(int i=1, double d=1.0, bool b=false) {}
    void method1(int i) {}
    double method2(bool b) {}
};

struct B
{
    int i;
};

template<typename T1>
class C
{
public:
    C(T1 t) {}
    template<typename T2>
    void method(T2 t) {}
};

void function1() {}

namespace N1
{
namespace N2
{
template<typename T>
void function2() {}
}
}
"""

    _, filename = tempfile.mkstemp(".hpp")
    with open(filename, "w") as f:
        f.write(testcode)

    try:
        parser = Parser(filename)
        ast = parser.parse()
    finally:
        if os.path.exists(filename):
            os.remove(filename)

    assert_equal(len(ast.nodes), 3 + 2 + 1 + 1)
Example #3
0
def test_add_template_function():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_template_function("myFun", "void")
    assert_equal(len(parser.ast.nodes), 1)
    parser.add_template_type("T")
    assert_equal(len(parser.ast.nodes[0].template_types), 1)
Example #4
0
def test_distributed_struct():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_struct_decl("")
    assert_is_not_none(parser.unnamed_struct)
    parser.add_typedef("struct mystruct", "mystruct")
    assert_is_none(parser.unnamed_struct)
    assert_equal(len(parser.ast.nodes), 1)
def test_add_template_function():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_template_function("myFun", "void")
    assert_equal(len(parser.ast.nodes), 1)
    parser.add_template_type("T")
    assert_equal(len(parser.ast.nodes[0].template_types), 1)
def test_distributed_struct():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_struct_decl("")
    assert_is_not_none(parser.unnamed_struct)
    parser.add_typedef("struct mystruct", "mystruct")
    assert_is_none(parser.unnamed_struct)
    assert_equal(len(parser.ast.nodes), 1)
Example #7
0
def test_error():
    testcode = """
int function
{
    return 1;
}
"""

    _, filename = tempfile.mkstemp(".hpp")
    with open(filename, "w") as f:
        f.write(testcode)

    try:
        parser = Parser(filename)
        assert_raises_regexp(ClangError, "Could not parse file correctly.",
                             parser.parse)
    finally:
        if os.path.exists(filename):
            os.remove(filename)
Example #8
0
def test_add_template_class():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_template_class("MyTemplateClass")
    assert_equal(len(parser.ast.nodes), 1)
    parser.add_template_type("T")
    assert_equal(len(parser.ast.nodes[0].template_types), 1)
    parser.add_ctor()
    assert_equal(len(parser.ast.nodes[0].nodes), 1)
    parser.add_param("a", "T")
    assert_equal(len(parser.ast.nodes[0].nodes[0].nodes), 1)
    parser.add_method("myMethod", "int")
    assert_equal(len(parser.ast.nodes[0].nodes), 2)
    parser.add_field("b", "bool")
    assert_equal(len(parser.ast.nodes[0].nodes), 3)
Example #9
0
def test_add_argument_without_method():
    parser = Parser("test.hpp")
    parser.init_ast()
    assert_warns_message(UserWarning, "Ignored function parameter",
                         parser.add_param, "a", "void")
def test_add_function():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_function("myFun", "void", "")
    assert_equal(len(parser.ast.nodes), 1)
Example #11
0
def test_add_function():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_function("myFun", "void", "")
    assert_equal(len(parser.ast.nodes), 1)
Example #12
0
def test_add_class_with_field_ctor_and_method():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_class("MyClass")
    assert_equal(len(parser.ast.nodes), 1)
    parser.add_ctor()
    assert_equal(len(parser.ast.nodes[0].nodes), 1)
    parser.add_param("a", "int")
    assert_equal(len(parser.ast.nodes[0].nodes[0].nodes), 1)
    parser.add_method("myMethod", "int")
    assert_equal(len(parser.ast.nodes[0].nodes), 2)
    parser.add_field("b", "bool")
    assert_equal(len(parser.ast.nodes[0].nodes), 3)
def test_add_class_with_field_ctor_and_method():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_class("MyClass")
    assert_equal(len(parser.ast.nodes), 1)
    parser.add_ctor()
    assert_equal(len(parser.ast.nodes[0].nodes), 1)
    parser.add_param("a", "int")
    assert_equal(len(parser.ast.nodes[0].nodes[0].nodes), 1)
    parser.add_method("myMethod", "int")
    assert_equal(len(parser.ast.nodes[0].nodes), 2)
    parser.add_field("b", "bool")
    assert_equal(len(parser.ast.nodes[0].nodes), 3)
Example #14
0
def test_struct():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_struct_decl("MyStruct")
    assert_equal(len(parser.ast.nodes), 1)
Example #15
0
def test_add_typedef():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_typedef("double", "tdef")
    assert_equal(len(parser.ast.nodes), 1)
def test_struct():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_struct_decl("MyStruct")
    assert_equal(len(parser.ast.nodes), 1)
def test_add_typedef():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_typedef("double", "tdef")
    assert_equal(len(parser.ast.nodes), 1)
def test_add_template_class():
    parser = Parser("test.hpp")
    parser.init_ast()
    parser.add_template_class("MyTemplateClass")
    assert_equal(len(parser.ast.nodes), 1)
    parser.add_template_type("T")
    assert_equal(len(parser.ast.nodes[0].template_types), 1)
    parser.add_ctor()
    assert_equal(len(parser.ast.nodes[0].nodes), 1)
    parser.add_param("a", "T")
    assert_equal(len(parser.ast.nodes[0].nodes[0].nodes), 1)
    parser.add_method("myMethod", "int")
    assert_equal(len(parser.ast.nodes[0].nodes), 2)
    parser.add_field("b", "bool")
    assert_equal(len(parser.ast.nodes[0].nodes), 3)
def test_add_argument_without_method():
    parser = Parser("test.hpp")
    parser.init_ast()
    assert_warns_message(UserWarning, "Ignored function parameter",
                         parser.add_param, "a", "void")