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)
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>")
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"
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'
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'
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"
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
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
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
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
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
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
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
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
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_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
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'
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_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
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
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
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
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
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"
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
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'
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'
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 = 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_"
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 == ""
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
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 == ""