Exemplo n.º 1
0
    def test_class_implementations_error(self):
        # LibClang will fail in parse this source file (it's modified from the original
        # test/server/mocks.cc from Envoy repository) if we don't add flag PARSE_SKIP_FUNCTION_BODIES
        # to ignore function bodies.
        impl_translation_unit = TranslationUnit.from_source(
            "tools/envoy_headersplit/code_corpus/fail_mocks.cc")
        impls_cursors = headersplit.class_implementations(impl_translation_unit.cursor)
        # impls_name is not complete in this case
        impls_names = [cursor.spelling for cursor in impls_cursors]
        # LibClang will stop parsing at
        # MockListenerComponentFactory::MockListenerComponentFactory()
        #     : socket_(std::make_shared<NiceMock<Network::MockListenSocket>>()) {
        #       ^
        # Since parsing stops early, we will have incomplete method list.
        # The reason is not clear, however, this issue can be addressed by adding parsing flag to
        # ignore function body

        # get correct list of member methods
        impl_translation_unit_correct = TranslationUnit.from_source(
            "tools/envoy_headersplit/code_corpus/fail_mocks.cc",
            options=TranslationUnit.PARSE_SKIP_FUNCTION_BODIES)
        impls_cursors_correct = headersplit.class_implementations(
            impl_translation_unit_correct.cursor)
        impls_names_correct = [cursor.spelling for cursor in impls_cursors_correct]
        self.assertNotEqual(impls_names, impls_names_correct)
Exemplo n.º 2
0
 def test_class_implementations(self):
     translation_unit_class_impl = TranslationUnit.from_source(
         "tools/envoy_headersplit/code_corpus/class_impl.cc",
         options=TranslationUnit.PARSE_SKIP_FUNCTION_BODIES)
     impls_cursors = headersplit.class_implementations(translation_unit_class_impl.cursor)
     impls_names = [cursor.spelling for cursor in impls_cursors]
     self.assertEqual(impls_names, ["getFoo", "val", "DeadBeaf"])