183695d45SPavel Kosov""" 283695d45SPavel KosovTest that 'gui' does not crash when adding new threads, which 383695d45SPavel Kosovpopulate TreeItem's children and may be reallocated elsewhere. 483695d45SPavel Kosov""" 583695d45SPavel Kosov 683695d45SPavel Kosovimport lldb 783695d45SPavel Kosovfrom lldbsuite.test.decorators import * 883695d45SPavel Kosovfrom lldbsuite.test.lldbtest import * 983695d45SPavel Kosovfrom lldbsuite.test.lldbpexpect import PExpectTest 1083695d45SPavel Kosov 1183695d45SPavel Kosovimport sys 1283695d45SPavel Kosov 13*6bf923d5SDavid Spickett 1483695d45SPavel Kosovclass TestGuiSpawnThreadsTest(PExpectTest): 1583695d45SPavel Kosov # PExpect uses many timeouts internally and doesn't play well 1683695d45SPavel Kosov # under ASAN on a loaded machine.. 1783695d45SPavel Kosov @skipIfAsan 1883695d45SPavel Kosov @skipIfCursesSupportMissing 1983695d45SPavel Kosov def test_gui(self): 2083695d45SPavel Kosov self.build() 2183695d45SPavel Kosov 22*6bf923d5SDavid Spickett self.launch(executable=self.getBuildArtifact("a.out"), dimensions=(100, 500)) 2383695d45SPavel Kosov self.expect( 24*6bf923d5SDavid Spickett 'breakpoint set -f main.cpp -p "break here"', 25*6bf923d5SDavid Spickett substrs=["Breakpoint 1", "address ="], 2683695d45SPavel Kosov ) 2783695d45SPavel Kosov self.expect( 28*6bf923d5SDavid Spickett 'breakpoint set -f main.cpp -p "before join"', 29*6bf923d5SDavid Spickett substrs=["Breakpoint 2", "address ="], 3083695d45SPavel Kosov ) 3183695d45SPavel Kosov self.expect("run", substrs=["stop reason ="]) 3283695d45SPavel Kosov 3383695d45SPavel Kosov escape_key = chr(27).encode() 3483695d45SPavel Kosov 3583695d45SPavel Kosov # Start the GUI 3683695d45SPavel Kosov self.child.sendline("gui") 3783695d45SPavel Kosov self.child.expect_exact("Threads") 3883695d45SPavel Kosov self.child.expect_exact(f"thread #1: tid =") 3983695d45SPavel Kosov 4083695d45SPavel Kosov for i in range(5): 4183695d45SPavel Kosov # Stopped at the breakpoint, continue over the thread creation 4283695d45SPavel Kosov self.child.send("c") 4383695d45SPavel Kosov # Check the newly created thread 4483695d45SPavel Kosov self.child.expect_exact(f"thread #{i + 2}: tid =") 4583695d45SPavel Kosov 4683695d45SPavel Kosov # Exit GUI. 4783695d45SPavel Kosov self.child.send(escape_key) 4883695d45SPavel Kosov self.expect_prompt() 4983695d45SPavel Kosov 5083695d45SPavel Kosov self.quit() 51