xref: /llvm-project/lldb/test/API/lang/objc/modules-app-update/TestClangModulesAppUpdate.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
199451b44SJordan Rupprechtimport os
299451b44SJordan Rupprechtimport shutil
399451b44SJordan Rupprecht
499451b44SJordan Rupprechtimport lldb
599451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
699451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
799451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
899451b44SJordan Rupprecht
999451b44SJordan Rupprecht
1099451b44SJordan Rupprechtclass TestClangModuleAppUpdate(TestBase):
111c6826e8SMichael Buch    @add_test_categories(["gmodules"])
1299451b44SJordan Rupprecht    def test_rebuild_app_modules_untouched(self):
1399451b44SJordan Rupprecht        with open(self.getBuildArtifact("module.modulemap"), "w") as f:
14*2238dcc3SJonas Devlieghere            f.write(
15*2238dcc3SJonas Devlieghere                """
1699451b44SJordan Rupprecht                    module Foo { header "f.h" }
17*2238dcc3SJonas Devlieghere                    """
18*2238dcc3SJonas Devlieghere            )
1999451b44SJordan Rupprecht        with open(self.getBuildArtifact("f.h"), "w") as f:
20*2238dcc3SJonas Devlieghere            f.write(
21*2238dcc3SJonas Devlieghere                """
2210ed479dSDave Lee                    @import ObjectiveC;
2399451b44SJordan Rupprecht                    @interface Foo : NSObject {
2499451b44SJordan Rupprecht                       int i;
2599451b44SJordan Rupprecht                    }
2699451b44SJordan Rupprecht                    +(instancetype)init;
2799451b44SJordan Rupprecht                    @end
28*2238dcc3SJonas Devlieghere                    """
29*2238dcc3SJonas Devlieghere            )
3099451b44SJordan Rupprecht
3199451b44SJordan Rupprecht        mod_cache = self.getBuildArtifact("private-module-cache")
3299451b44SJordan Rupprecht        import os
33*2238dcc3SJonas Devlieghere
3499451b44SJordan Rupprecht        if os.path.isdir(mod_cache):
3599451b44SJordan Rupprecht            shutil.rmtree(mod_cache)
3699451b44SJordan Rupprecht        self.build()
3799451b44SJordan Rupprecht        self.assertTrue(os.path.isdir(mod_cache), "module cache exists")
3899451b44SJordan Rupprecht
3999451b44SJordan Rupprecht        target, process, _, bkpt = lldbutil.run_to_source_breakpoint(
40*2238dcc3SJonas Devlieghere            self, "break here", lldb.SBFileSpec("main.m")
41*2238dcc3SJonas Devlieghere        )
42*2238dcc3SJonas Devlieghere        bar = target.FindTypes("Bar").GetTypeAtIndex(0)
4399451b44SJordan Rupprecht        foo = bar.GetDirectBaseClassAtIndex(0).GetType()
4499451b44SJordan Rupprecht        self.assertEqual(foo.GetNumberOfFields(), 1)
4599451b44SJordan Rupprecht        self.assertEqual(foo.GetFieldAtIndex(0).GetName(), "i")
4699451b44SJordan Rupprecht
4799451b44SJordan Rupprecht        # Rebuild.
4899451b44SJordan Rupprecht        process.Kill()
49*2238dcc3SJonas Devlieghere        os.remove(self.getBuildArtifact("main.o"))
50*2238dcc3SJonas Devlieghere        os.remove(self.getBuildArtifact("a.out"))
5199451b44SJordan Rupprecht        self.build()
5299451b44SJordan Rupprecht
5399451b44SJordan Rupprecht        # Reattach.
5499451b44SJordan Rupprecht        target, process, _, _ = lldbutil.run_to_breakpoint_do_run(self, target, bkpt)
55*2238dcc3SJonas Devlieghere        bar = target.FindTypes("Bar").GetTypeAtIndex(0)
5699451b44SJordan Rupprecht        foo = bar.GetDirectBaseClassAtIndex(0).GetType()
5799451b44SJordan Rupprecht        self.assertEqual(foo.GetNumberOfFields(), 1)
5899451b44SJordan Rupprecht        self.assertEqual(foo.GetFieldAtIndex(0).GetName(), "i")
59