xref: /llvm-project/lldb/test/API/lang/objc/modules-app-update/TestClangModulesAppUpdate.py (revision 4cc8f2a017c76af25234afc7c380550e9c93135c)
1
2import unittest2
3import os
4import shutil
5
6import lldb
7from lldbsuite.test.decorators import *
8from lldbsuite.test.lldbtest import *
9from lldbsuite.test import lldbutil
10
11
12class TestClangModuleAppUpdate(TestBase):
13
14    @skipIf(debug_info=no_match(["gmodules"]))
15    def test_rebuild_app_modules_untouched(self):
16        with open(self.getBuildArtifact("module.modulemap"), "w") as f:
17            f.write("""
18                    module Foo { header "f.h" }
19                    """)
20        with open(self.getBuildArtifact("f.h"), "w") as f:
21            f.write("""
22                    @import ObjectiveC;
23                    @interface Foo : NSObject {
24                       int i;
25                    }
26                    +(instancetype)init;
27                    @end
28                    """)
29
30        mod_cache = self.getBuildArtifact("private-module-cache")
31        import os
32        if os.path.isdir(mod_cache):
33          shutil.rmtree(mod_cache)
34        self.build()
35        self.assertTrue(os.path.isdir(mod_cache), "module cache exists")
36
37        target, process, _, bkpt = lldbutil.run_to_source_breakpoint(
38            self, "break here", lldb.SBFileSpec("main.m"))
39        bar = target.FindTypes('Bar').GetTypeAtIndex(0)
40        foo = bar.GetDirectBaseClassAtIndex(0).GetType()
41        self.assertEqual(foo.GetNumberOfFields(), 1)
42        self.assertEqual(foo.GetFieldAtIndex(0).GetName(), "i")
43
44        # Rebuild.
45        process.Kill()
46        os.remove(self.getBuildArtifact('main.o'))
47        os.remove(self.getBuildArtifact('a.out'))
48        self.build()
49
50        # Reattach.
51        target, process, _, _ = lldbutil.run_to_breakpoint_do_run(self, target, bkpt)
52        bar = target.FindTypes('Bar').GetTypeAtIndex(0)
53        foo = bar.GetDirectBaseClassAtIndex(0).GetType()
54        self.assertEqual(foo.GetNumberOfFields(), 1)
55        self.assertEqual(foo.GetFieldAtIndex(0).GetName(), "i")
56