Example #1
0
def test_exception_for_missing_include():
    source = '#include "major_tom.h"'
    tu = get_tu(source, 'cpp')

    def f():
        ffig.cppmodel.Model(tu)
    assert_raises(ValueError, f)
Example #2
0
def test_string_representation():
    source = "class A{};"

    tu = get_tu(source, 'cpp')
    model = ffig.cppmodel.Model(tu)
    c = model.classes[0]

    assert_equals(str(c), "<cppmodel.Class A>")
Example #3
0
def test_string_representation():
    source = "class A{};"

    tu = get_tu(source, 'cpp')
    model = cppmodel.Model(tu)
    c = model.classes[0]

    assert str(c) == "class A"
Example #4
0
def test_repr():
    source = 'class A{}; void foo();'
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)

    assert_equals(
        str(model),
        "<cppmodel.Model filename=t.cpp, classes=['A'], functions=['foo']>")
def test_class_name():
    source = 'class A{};'
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    classes = model.classes

    assert len(classes)==1
    assert classes[0].name == 'A'
Example #6
0
def test_class_name():
    source = 'class A{};'
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    classes = model.classes

    assert len(classes) == 1
    assert classes[0].name == 'A'
Example #7
0
def test_string_representation():
    source = "class A{};"

    tu = get_tu(source, "cpp")
    model = cppmodel.Model(tu)
    c = model.classes[0]

    print str(c)
    assert str(c) == "class A"
Example #8
0
def test_pointer_to_record_type():
    source = "class A{}; A* pA();"

    tu = get_tu(source, 'cpp')
    model = cppmodel.Model(tu)
    f = model.functions[0]

    assert f.return_type.kind == TypeKind.POINTER
    assert f.return_type.is_pointer
    assert f.return_type.pointee.kind == TypeKind.RECORD
Example #9
0
def test_pointer_to_record_type():
    source = "class A{}; A* pA();"

    tu = get_tu(source, "cpp")
    model = cppmodel.Model(tu)
    f = model.functions[0]

    assert f.return_type.kind == TypeKind.POINTER
    assert f.return_type.is_pointer
    assert f.return_type.pointee.kind == TypeKind.RECORD
Example #10
0
def test_pointer_type():
    source = "double* pd();"

    tu = get_tu(source, "cpp")
    model = cppmodel.Model(tu)
    f = model.functions[0]

    assert f.return_type.kind == TypeKind.POINTER
    assert not f.return_type.is_const
    assert f.return_type.pointee.kind == TypeKind.DOUBLE
    assert not f.return_type.pointee.is_const
Example #11
0
def test_pointer_type():
    source = "double* pd();"

    tu = get_tu(source, 'cpp')
    model = cppmodel.Model(tu)
    f = model.functions[0]

    assert f.return_type.kind == TypeKind.POINTER
    assert not f.return_type.is_const
    assert f.return_type.pointee.kind == TypeKind.DOUBLE
    assert not f.return_type.pointee.is_const
Example #12
0
def test_reference_to_record_type():
    source = "class A{}; A& pA();"

    tu = get_tu(source, 'cpp')
    model = cppmodel.Model(tu)
    f = model.functions[0]

    assert f.return_type.kind == TypeKind.LVALUEREFERENCE
    assert not f.return_type.is_pointer
    assert f.return_type.is_reference
    assert f.return_type.pointee.kind == TypeKind.RECORD
Example #13
0
def test_reference_to_record_type():
    source = "class A{}; A& pA();"

    tu = get_tu(source, "cpp")
    model = cppmodel.Model(tu)
    f = model.functions[0]

    assert f.return_type.kind == TypeKind.LVALUEREFERENCE
    assert not f.return_type.is_pointer
    assert f.return_type.is_reference
    assert f.return_type.pointee.kind == TypeKind.RECORD
Example #14
0
def test_const_pointer_to_const_double_type():
    source = "const double* const cpcd();"

    tu = get_tu(source, 'cpp')
    model = ffig.cppmodel.Model(tu)
    functions = model.functions
    f = model.functions[0]

    assert f.return_type.kind == TypeKind.POINTER
    assert f.return_type.is_const
    assert f.return_type.pointee.kind == TypeKind.DOUBLE
    assert f.return_type.pointee.is_const
Example #15
0
def test_string_representation():
    source = """
    double foo(int, char);
    """

    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    functions = model.functions

    assert_equals(str(functions[0]),
                  '<cppmodel.Function double foo(int, char)>')
def test_class_method_return_types():
    source = """
    class B{
        void foo();
        int bar();
    };"""
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    classes = model.classes

    assert classes[0].methods[0].return_type.kind == TypeKind.VOID
    assert classes[0].methods[1].return_type.kind == TypeKind.INT
Example #17
0
def test_string_representation():
    source = """
    double foo(int, char);
    double bar(int x, char y);
    """

    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    functions = model.functions

    assert str(functions[0]) == 'double foo(int, char)'
    assert str(functions[1]) == 'double bar(int x, char y)'
Example #18
0
def test_force_noexcept():
    source = """
    double foo(int, char);
    """

    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu, force_noexcept=True)
    functions = model.functions

    assert_equals(str(functions[0]),
                  '<cppmodel.Function double foo(int, char) noexcept>')
    assert functions[0].is_noexcept
Example #19
0
def test_class_method_return_types():
    source = """
    class B{
        void foo();
        int bar();
    };"""
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    classes = model.classes

    assert classes[0].methods[0].return_type.kind == TypeKind.VOID
    assert classes[0].methods[1].return_type.kind == TypeKind.INT
def test_function_name():
    source = """
    void foo();
    void bar();
    """
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    functions = model.functions

    assert len(functions) == 2
    assert functions[0].name == 'foo'
    assert functions[1].name == 'bar'
Example #21
0
def test_function_name():
    source = """
    void foo();
    void bar();
    """
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    functions = model.functions

    assert len(functions) == 2
    assert functions[0].name == 'foo'
    assert functions[1].name == 'bar'
def test_string_representation():
    source = """
    double foo(int, char);
    double bar(int x, char y);
    """
    
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    functions = model.functions
    
    assert str(functions[0]) == 'double foo(int, char)'
    assert str(functions[1]) == 'double bar(int x, char y)'
def test_access_specifiers():
    source = """
    class A { int foo(); };
    struct B { int foo(); };
    class C { public: int foo(); };
    """
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    classes = model.classes

    assert not classes[0].methods[0].is_public
    assert classes[1].methods[0].is_public
    assert classes[2].methods[0].is_public
Example #24
0
def test_class_method_const_qualifiers():
    source = """
    class A {
        int foo() const;
        int bar();
    };"""
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    classes = model.classes
    methods = classes[0].methods

    assert methods[0].is_const
    assert not methods[1].is_const
def test_class_methods():
    source = """
    class A{};
    class B{
        void foo();
        int bar();
    };"""
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    classes = model.classes

    assert len(classes[0].methods) == 0
    assert len(classes[1].methods) == 2
Example #26
0
def test_noexcept():
    source = """
    class A {
        virtual int foo();
    };"""
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu, force_noexcept=True)
    classes = model.classes
    methods = classes[0].methods

    assert_equals(str(methods[0]),
                  '<cppmodel.Method virtual int foo() noexcept>')
    assert methods[0].is_noexcept
Example #27
0
def test_class_methods():
    source = """
    class A{};
    class B{
        void foo();
        int bar();
    };"""
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    classes = model.classes

    assert len(classes[0].methods) == 0
    assert len(classes[1].methods) == 2
def test_class_method_const_qualifiers():
    source = """
    class A {
        int foo() const;
        int bar();
    };"""
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    classes = model.classes
    methods = classes[0].methods

    assert methods[0].is_const
    assert not methods[1].is_const
Example #29
0
def test_access_specifiers():
    source = """
    class A { int foo(); };
    struct B { int foo(); };
    class C { public: int foo(); };
    """
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    classes = model.classes

    assert not classes[0].methods[0].is_public
    assert classes[1].methods[0].is_public
    assert classes[2].methods[0].is_public
Example #30
0
def test_class_method_argument_types():
    source = """
    class A {
        int foo(int i, const char* p);
    };"""
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    classes = model.classes
    args = classes[0].methods[0].arguments

    assert args[0].type.kind == TypeKind.INT
    assert args[0].name == "i"
    assert args[1].type.kind == TypeKind.POINTER
    assert args[1].name == "p"
def test_class_method_argument_types():
    source = """
    class A {
        int foo(int i, const char* p);
    };"""
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    classes = model.classes
    args = classes[0].methods[0].arguments

    assert args[0].type.kind == TypeKind.INT
    assert args[0].name == "i"
    assert args[1].type.kind == TypeKind.POINTER
    assert args[1].name == "p"
Example #32
0
def test_function_return_type():
    source = """
    int foo();
    double* bar();
    """

    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    functions = model.functions

    assert functions[0].return_type.kind == TypeKind.INT
    assert functions[1].return_type.kind == TypeKind.POINTER
    assert functions[1].return_type.is_pointer
    assert functions[1].return_type.pointee.kind == TypeKind.DOUBLE
    assert not functions[1].return_type.pointee.is_const
def test_function_return_type():
    source = """
    int foo();
    double* bar();
    """
    
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    functions = model.functions
    
    assert functions[0].return_type.kind == TypeKind.INT
    assert functions[1].return_type.kind == TypeKind.POINTER
    assert functions[1].return_type.is_pointer
    assert functions[1].return_type.pointee.kind == TypeKind.DOUBLE
    assert not functions[1].return_type.pointee.is_const
Example #34
0
def test_class_methods_are_virtual():
    source = """
    class A {
        virtual int foo();
        int bar();
        virtual int foobar() = 0;
    };"""
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    classes = model.classes
    methods = classes[0].methods

    assert methods[0].is_virtual
    assert not methods[0].is_pure_virtual
    assert not methods[1].is_virtual
    assert methods[2].is_pure_virtual
def test_class_methods_are_virtual():
    source = """
    class A {
        virtual int foo();
        int bar();
        virtual int foobar() = 0;
    };"""
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    classes = model.classes
    methods = classes[0].methods

    assert methods[0].is_virtual
    assert not methods[0].is_pure_virtual
    assert not methods[1].is_virtual
    assert methods[2].is_pure_virtual
def test_function_arguments():
    source = """
    int foo();
    double bar(int x, char y);
    """
    
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    functions = model.functions
    
    assert len(functions[0].arguments) == 0
    assert len(functions[1].arguments) == 2
    assert functions[1].arguments[0].type.kind == TypeKind.INT
    assert functions[1].arguments[0].name == 'x'
    assert functions[1].arguments[1].type.kind == TypeKind.CHAR_S
    assert functions[1].arguments[1].name == 'y'
Example #37
0
def test_function_arguments():
    source = """
    int foo();
    double bar(int x, char y);
    """

    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    functions = model.functions

    assert len(functions[0].arguments) == 0
    assert len(functions[1].arguments) == 2
    assert functions[1].arguments[0].type.kind == TypeKind.INT
    assert functions[1].arguments[0].name == 'x'
    assert functions[1].arguments[1].type.kind == TypeKind.CHAR_S
    assert functions[1].arguments[1].name == 'y'
Example #38
0
def test_string_representation():
    source = """
    class A {
        virtual int foo();
        int bar();
        virtual int foobar() = 0;
        virtual int cfoobar(int x) const = 0;
    };"""
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    classes = model.classes
    methods = classes[0].methods

    assert str(methods[0]) == 'virtual int foo()'
    assert str(methods[1]) == 'int bar()'
    assert str(methods[2]) == 'virtual int foobar() = 0'
    assert str(methods[3]) == 'virtual int cfoobar(int x) const = 0'
def test_string_representation():
    source = """
    class A {
        virtual int foo();
        int bar();
        virtual int foobar() = 0;
        virtual int cfoobar(int x) const = 0;
    };"""
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    classes = model.classes
    methods = classes[0].methods

    assert str(methods[0]) == 'virtual int foo()'
    assert str(methods[1]) == 'int bar()'
    assert str(methods[2]) == 'virtual int foobar() = 0'
    assert str(methods[3]) == 'virtual int cfoobar(int x) const = 0'
Example #40
0
def test_string_representation():
    source = """
    class A {
        virtual int foo();
        int bar();
        virtual int foobar() = 0;
        virtual int cfoobar(int x) const = 0;
    };"""
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    classes = model.classes
    methods = classes[0].methods

    assert_equals(str(methods[0]), '<cppmodel.Method virtual int foo()>')
    assert_equals(str(methods[1]), '<cppmodel.Method int bar()>')
    assert_equals(str(methods[2]),
                  '<cppmodel.Method virtual int foobar() = 0>')
    assert_equals(str(methods[3]),
                  '<cppmodel.Method virtual int cfoobar(int) const = 0>')
def test_class_member_data():
    source = """
    class A {};
    class B {
        int x_;
        B b_;
    };
    """

    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    c = model.classes[1]

    assert c.members[0].type.kind == TypeKind.INT
    assert c.members[0].type.name == "int"
    assert c.members[0].name == "x_"

    assert c.members[1].type.kind == TypeKind.RECORD
    assert c.members[1].type.name == "B"
    assert c.members[1].name == "b_"
Example #42
0
def test_namespaces():
    source = """
    class A{};
    namespace outer {
        class B{};
        namespace inner {
            class C{};
        } // end inner
        class D{};
    } // end outer
    class E{};"""
    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    classes = model.classes

    assert classes[0].namespace == ""
    assert classes[1].namespace == "outer"
    assert classes[2].namespace == "outer::inner"
    assert classes[3].namespace == "outer"
    assert classes[4].namespace == ""
Example #43
0
def test_function_equality():
    source = """
    int foo();
    int foo(int);
    int foo(double);
    int foo(int,int);
    namespace x {
    int foo();
    }
    """

    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)

    for i, f in enumerate(model.functions):
        for j, g in enumerate(model.functions):
            if i == j:
                assert f == g
            else:
                assert not f == g
Example #44
0
def test_class_member_data():
    source = """
    class A {};
    class B {
        int x_;
        B b_;
    };
    """

    tu = get_tu(source, 'cpp')

    model = ffig.cppmodel.Model(tu)
    c = model.classes[1]

    assert c.members[0].type.kind == TypeKind.INT
    assert c.members[0].type.name == "int"
    assert c.members[0].name == "x_"

    assert c.members[1].type.kind == TypeKind.RECORD
    assert c.members[1].type.name == "B"
    assert c.members[1].name == "b_"
def test_function_equality():
    source = """
    int foo();
    int foo(int);
    int foo(double);
    int foo(int,int);
    namespace x { 
    int foo();
    }
    """

    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    
    for i,f in enumerate(model.functions):
        for j,g in enumerate(model.functions):
            if i==j:
                assert f==g
            else:
                assert not f==g
def test_namespaces():
    source = """
    class A{};
    namespace outer {
        class B{};
        namespace inner {
            class C{};
        } // end inner
        class D{};
    } // end outer
    class E{};"""
    tu = get_tu(source, 'cpp')

    model = cppmodel.Model(tu)
    classes = model.classes

    assert classes[0].namespace == ""
    assert classes[1].namespace == "outer"
    assert classes[2].namespace == "outer::inner"
    assert classes[3].namespace == "outer"
    assert classes[4].namespace == ""