Ejemplo n.º 1
0
def test_fields():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            class MyClass {
                double private_field_1;
            public: 
                double public_field;
            private: 
                bool private_field_2;
            protected: 
                bool protected_field;
            };
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert len(result) == 1
        assert len(result[0]['fields']) == 4

        fields = group_by_name(result[0]['fields'])

        assert fields['private_field_1']['access'] == 'private'
        assert fields['private_field_2']['access'] == 'private'
        assert fields['public_field']['access'] == 'public'
        assert fields['protected_field']['access'] == 'protected'

        assert fields['private_field_1']['type'] == 'double'
        assert fields['private_field_2']['type'] == 'bool'
        assert fields['public_field']['type'] == 'double'
        assert fields['protected_field']['type'] == 'bool'
Ejemplo n.º 2
0
def test_methods():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            class MyClass {
                bool private_method_1();
            public: 
                double public_method();
            private: 
                bool private_method_2();
            protected: 
                char protected_method();
            };
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert len(result) == 1
        assert len(result[0]['methods']) == 4

        methods = group_by_name(result[0]['methods'])

        assert methods['private_method_1']['access'] == 'private'
        assert methods['private_method_2']['access'] == 'private'
        assert methods['public_method']['access'] == 'public'
        assert methods['protected_method']['access'] == 'protected'

        assert methods['private_method_1']['return_type'] == 'bool'
        assert methods['private_method_2']['return_type'] == 'bool'
        assert methods['public_method']['return_type'] == 'double'
        assert methods['protected_method']['return_type'] == 'char'
Ejemplo n.º 3
0
def test_namespace():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            namespace Foo {
              namespace Bar {
                class MyClass {
                    int my_method() const;
                    int my_member;
                };
              }
            }
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert len(result) == 1
        assert result[0]['name'] == 'MyClass'
        assert result[0]['qualified_name'] == 'Foo::Bar::MyClass'

        assert len(result[0]['methods']) == 1
        assert result[0]['methods'][0]['qualified_name'] == 'Foo::Bar::MyClass::my_method'

        assert len(result[0]['fields']) == 1
        assert result[0]['fields'][0]['qualified_name'] == 'Foo::Bar::MyClass::my_member'
Ejemplo n.º 4
0
def test_parse_enum_annotation_simple():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            enum __attribute__((annotate("hello world"))) Color {
            };
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert result[0]['annotations'].get("hello world")
Ejemplo n.º 5
0
def test_annotations():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            class __attribute__((annotate("foo=bar"))) MyClass {
            };
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert len(result) == 1
        assert result[0]['annotations'].get("foo") == "bar"
Ejemplo n.º 6
0
def test_parse_enum_annotation_key_value():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            enum __attribute__((annotate("greeting=hello,what=world"))) Color {
            };
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert result[0]['annotations'].get("greeting") == "hello"
        assert result[0]['annotations'].get("what") == "world"
Ejemplo n.º 7
0
def test_basic():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            class MyClass {};
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert len(result) == 1
        assert result[0].get('name') == 'MyClass'
        assert result[0].get('type') == 'class'
        assert result[0].get('qualified_name') == 'MyClass'
Ejemplo n.º 8
0
def test_global_function_annotation():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            int __attribute__((annotate("foo=bar"))) func() {};
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert len(result) == 1

        assert result[0]["type"] == "function"
        assert result[0]['annotations'].get("foo") == "bar"
Ejemplo n.º 9
0
def test_method_params():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            class MyClass {
                void my_method(int a, char b, bool d);
            };
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert len(result) == 1
        assert len(result[0]['methods']) == 1

        method = result[0]['methods'][0]
        assert len(method['arguments']) == 3
Ejemplo n.º 10
0
def test_parse_enum_values():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            enum Values {
                A = 0xABCD,
                B = 0755,
                C = 1234
            };
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert result[0]['enum_values']['A'] == 0xABCD
        assert result[0]['enum_values']['B'] == 0o755
        assert result[0]['enum_values']['C'] == 1234
Ejemplo n.º 11
0
def test_parse_enum():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            enum Color {
                Red,Green,Blue
            };
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert len(result) == 1
        assert result[0].get('name') == 'Color'
        assert result[0].get('type') == 'enum'
        assert result[0].get('qualified_name') == 'Color'
        assert len(result[0]['enum_values'].keys()) == 3
Ejemplo n.º 12
0
def test_global_function_namespace():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            namespace Foo {
                namespace Bar {
                    int func() {}
                }
            }
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert len(result) == 1

        assert result[0]["type"] == "function"
        assert result[0]["name"] == "func"
        assert result[0]["qualified_name"] == "Foo::Bar::func"
Ejemplo n.º 13
0
def test_global_function():
    with tempfile.NamedTemporaryFile() as f:
        f.write(b"""
            void func_1() {};
            int func_2() {};
        """)
        f.file.flush()

        frontend = get_frontend_by_name("cpp")
        result = frontend.run(f.name)

        assert len(result) == 2

        assert result[0]["type"] == "function"
        assert result[1]["type"] == "function"

        assert result[0]["name"] == "func_1"
        assert result[1]["name"] == "func_2"

        assert result[0]["qualified_name"] == "func_1"
        assert result[1]["qualified_name"] == "func_2"

        assert result[0]["return_type"] == "void"
        assert result[1]["return_type"] == "int"