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