199451b44SJordan Rupprecht 299451b44SJordan Rupprechtimport unittest2 399451b44SJordan Rupprechtimport os 499451b44SJordan Rupprechtimport shutil 599451b44SJordan Rupprecht 699451b44SJordan Rupprechtimport lldb 799451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 899451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 999451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1099451b44SJordan Rupprecht 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprechtclass TestClangModuleAppUpdate(TestBase): 1399451b44SJordan Rupprecht 1499451b44SJordan Rupprecht @skipIf(debug_info=no_match(["gmodules"])) 1599451b44SJordan Rupprecht def test_rebuild_app_modules_untouched(self): 1699451b44SJordan Rupprecht with open(self.getBuildArtifact("module.modulemap"), "w") as f: 1799451b44SJordan Rupprecht f.write(""" 1899451b44SJordan Rupprecht module Foo { header "f.h" } 1999451b44SJordan Rupprecht """) 2099451b44SJordan Rupprecht with open(self.getBuildArtifact("f.h"), "w") as f: 2199451b44SJordan Rupprecht f.write(""" 22*10ed479dSDave Lee @import ObjectiveC; 2399451b44SJordan Rupprecht @interface Foo : NSObject { 2499451b44SJordan Rupprecht int i; 2599451b44SJordan Rupprecht } 2699451b44SJordan Rupprecht +(instancetype)init; 2799451b44SJordan Rupprecht @end 2899451b44SJordan Rupprecht """) 2999451b44SJordan Rupprecht 3099451b44SJordan Rupprecht mod_cache = self.getBuildArtifact("private-module-cache") 3199451b44SJordan Rupprecht import os 3299451b44SJordan Rupprecht if os.path.isdir(mod_cache): 3399451b44SJordan Rupprecht shutil.rmtree(mod_cache) 3499451b44SJordan Rupprecht self.build() 3599451b44SJordan Rupprecht self.assertTrue(os.path.isdir(mod_cache), "module cache exists") 3699451b44SJordan Rupprecht 3799451b44SJordan Rupprecht target, process, _, bkpt = lldbutil.run_to_source_breakpoint( 3899451b44SJordan Rupprecht self, "break here", lldb.SBFileSpec("main.m")) 3999451b44SJordan Rupprecht bar = target.FindTypes('Bar').GetTypeAtIndex(0) 4099451b44SJordan Rupprecht foo = bar.GetDirectBaseClassAtIndex(0).GetType() 4199451b44SJordan Rupprecht self.assertEqual(foo.GetNumberOfFields(), 1) 4299451b44SJordan Rupprecht self.assertEqual(foo.GetFieldAtIndex(0).GetName(), "i") 4399451b44SJordan Rupprecht 4499451b44SJordan Rupprecht # Rebuild. 4599451b44SJordan Rupprecht process.Kill() 4699451b44SJordan Rupprecht os.remove(self.getBuildArtifact('main.o')) 4799451b44SJordan Rupprecht os.remove(self.getBuildArtifact('a.out')) 4899451b44SJordan Rupprecht self.build() 4999451b44SJordan Rupprecht 5099451b44SJordan Rupprecht # Reattach. 5199451b44SJordan Rupprecht target, process, _, _ = lldbutil.run_to_breakpoint_do_run(self, target, bkpt) 5299451b44SJordan Rupprecht bar = target.FindTypes('Bar').GetTypeAtIndex(0) 5399451b44SJordan Rupprecht foo = bar.GetDirectBaseClassAtIndex(0).GetType() 5499451b44SJordan Rupprecht self.assertEqual(foo.GetNumberOfFields(), 1) 5599451b44SJordan Rupprecht self.assertEqual(foo.GetFieldAtIndex(0).GetName(), "i") 56