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)
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)
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))