class TestCppGenerator(TestCase):
    def setUp(self):
        self.generator = CppGenerator()

    def check_if_generated_code_for_fake_is(self, fake, expected):
        generated = self.generator.generate(fake)
        self.assertEquals(expected, generated)

    def test_cpp_generator_should_generate_namespace_for_unknown_type(self):
        fakes = [{'type': 'namespace', 'name': 'ShortStr'}]
        expected = 'namespace ShortStr;'
        self.check_if_generated_code_for_fake_is(fakes, expected)

    def test_cpp_generator_should_generate_class_for_unknown_type(self):
        fakes = [{'type': 'class', 'name': 'ShortStr'}]
        expected = 'class ShortStr;'
        self.check_if_generated_code_for_fake_is(fakes, expected)

    def test_cpp_generator_should_generate_variable_declaration(self):
        fakes = [{'type': 'field', 'declaration': 'int', 'name': 'ma'}]
        expected = 'int ma;'
        self.check_if_generated_code_for_fake_is(fakes, expected)

    def test_cpp_generator_should_generate_function_declaration(self):
        fakes = [
            {'type': 'method', 'declaration': 'void (int)', 'name': 'foo'}
        ]
        expected = 'void foo(int);'
        self.check_if_generated_code_for_fake_is(fakes, expected)

    def test_cpp_generator_should_generate_members_if_provided(self):
        fakes = [{
            'type': 'class',
            'name': 'ShortStr',
            'members': [
                {
                    'type': 'method',
                    'declaration': 'void ()',
                    'name': 'Foo',
                    'access': 'public'
                },
                {
                    'type': 'method',
                    'declaration': 'void ()',
                    'name': 'Bar',
                    'access': 'public'
                }
            ]
        }]
        expected = 'class ShortStr{\n'\
            '\tpublic:\n'\
            '\tvoid Foo();\n'\
            '\tvoid Bar();\n'\
            '};\n'
        self.check_if_generated_code_for_fake_is(fakes, expected)
Esempio n. 2
0
class TestCppFaker(TestCase):
    def setUp(self):
        self.faker = CppFaker([])
        self.generator = CppGenerator()

    def check_if_generated_code_is_as_expected(self, lines, expected):
        for line in lines:
            self.faker.process_line(line)
        fakes = self.faker.get_fakes()
        generated = self.generator.generate(fakes)
        self.assertMultiLineEqual(expected, generated)

    def test_cpp_faker_should_generate_empty_string_for_unknown_msgtype(self):
        self.check_if_generated_code_is_as_expected(
            [('', '', '', 'warning', ['', 'ShortStr'])],
            ''
        )

    def test_cpp_faker_should_generate_empty_string_for_unknown_err(self):
        self.check_if_generated_code_is_as_expected(
            [('', '', '', 'error', ['unknown', 'ShortStr'])],
            ''
        )

    def test_cpp_faker_should_generate_class_for_undeclared_identifier(self):
        self.check_if_generated_code_is_as_expected(
            [('', '', '', 'error', ['use of undeclared identifier', 'Short'])],
            'class Short{\n};\n'
        )

    def test_cpp_faker_should_generate_class_for_unknown_type_name(self):
        self.check_if_generated_code_is_as_expected(
            [('', '', '', 'error', ['unknown type name', 'ShortStr'])],
            'class ShortStr;'
        )

    def test_cpp_faker_should_generate_members_for_classes(self):
        lines = [
            ('', '', '', 'error', ['unknown type name', 'Foo']),
            ('', '', '', 'error', ['no member named', 'Bar', 'in', 'Foo'])
        ]
        expected = 'class Foo{\n'\
            '\tpublic:\n'\
            '\tvoid Bar();\n'\
            '};\n'
        self.check_if_generated_code_is_as_expected(lines, expected)


    def test_cpp_faker_initialization(self):
        initial = ('', '', '', 'error', ['unknown type name', 'Foo'])
        self.faker.process_line(initial)
        fakes = self.faker.get_fakes()
        self.faker = CppFaker(fakes)
        lines = [
            ('', '', '', 'error', ['no member named', 'Bar', 'in', 'Foo'])
        ]
        expected = 'class Foo{\n'\
            '\tpublic:\n'\
            '\tvoid Bar();\n'\
            '};\n'
        self.check_if_generated_code_is_as_expected(lines, expected)

    def test_cpp_faker_should_not_register_duplicate_findings(self):
        self.check_if_generated_code_is_as_expected(
            [
                ('', '', '', 'error', ['unknown type name', 'ShortStr']),
                ('', '', '', 'error', ['unknown type name', 'ShortStr'])
            ],
            'class ShortStr;'
        )

    def test_cpp_faker_should_not_register_duplicate_members(self):
        self.check_if_generated_code_is_as_expected(
            [
                ('', '', '', 'error', ['unknown type name', 'Foo']),
                ('', '', '', 'error', ['no member named', 'Bar', 'in', 'Foo']),
                ('', '', '', 'error', ['no member named', 'Bar', 'in', 'Foo'])
            ],
            'class Foo{\n'
            '\tpublic:\n'
            '\tvoid Bar();\n'
            '};\n',
        )

    def test_cpp_faker_should_change_type_of_a_variable(self):
        lines = [
            (
                'r.cpp', '6', '4', 'error',
                ['use of undeclared identifier', 'ma', '']),
            (
                'r.cpp', '6', '4', 'error',
                ['', 'ma', 'does not refer to a value'])
        ]
        expected = 'int ma;'
        self.check_if_generated_code_is_as_expected(lines, expected)
Esempio n. 3
0
def create_wrapper_cpp(filename, fakes):
    with open("faked.cpp", "wb") as faked:
        generator = CppGenerator()
        faked.write(generator.generate(fakes))
        faked.write('\n#include "{}"'.format(filename))