1""" 2Test lldb-vscode setBreakpoints request 3""" 4 5from __future__ import print_function 6 7import unittest2 8import vscode 9from lldbsuite.test.decorators import * 10from lldbsuite.test.lldbtest import * 11from lldbsuite.test import lldbutil 12import lldbvscode_testcase 13 14class TestVSCode_module(lldbvscode_testcase.VSCodeTestCaseBase): 15 16 mydir = TestBase.compute_mydir(__file__) 17 18 19 @skipIfWindows 20 @skipUnlessDarwin 21 @skipIfRemote 22 def test_modules_event(self): 23 program_basename = "a.out.stripped" 24 program= self.getBuildArtifact(program_basename) 25 self.build_and_launch(program) 26 functions = ['foo'] 27 breakpoint_ids = self.set_function_breakpoints(functions) 28 self.assertEquals(len(breakpoint_ids), len(functions), 29 'expect one breakpoint') 30 self.continue_to_breakpoints(breakpoint_ids) 31 active_modules = self.vscode.get_active_modules() 32 self.assertIn(program_basename, active_modules, '%s module is in active modules' % (program_basename)) 33 program_module = active_modules[program_basename] 34 self.assertIn('name', program_module, 'make sure name is in module') 35 self.assertEqual(program_basename, program_module['name']) 36 self.assertIn('path', program_module, 'make sure path is in module') 37 self.assertEqual(program, program_module['path']) 38 self.assertTrue('symbolFilePath' not in program_module, 'Make sure a.out.stripped has no debug info') 39 self.assertEqual('Symbols not found.', program_module['symbolStatus']) 40 symbol_path = self.getBuildArtifact("a.out") 41 self.vscode.request_evaluate('`%s' % ('target symbols add -s "%s" "%s"' % (program, symbol_path))) 42 43 def checkSymbolsLoaded(): 44 active_modules = self.vscode.get_active_modules() 45 program_module = active_modules[program_basename] 46 return 'Symbols loaded.' == program_module['symbolStatus'] 47 self.waitUntil(checkSymbolsLoaded) 48 49 active_modules = self.vscode.get_active_modules() 50 program_module = active_modules[program_basename] 51 self.assertEqual(program_basename, program_module['name']) 52 self.assertEqual(program, program_module['path']) 53 self.assertEqual('Symbols loaded.', program_module['symbolStatus']) 54 self.assertIn('symbolFilePath', program_module) 55 self.assertEqual(symbol_path, program_module['symbolFilePath']) 56 self.assertIn('addressRange', program_module) 57 58 @skipIfWindows 59 @skipUnlessDarwin 60 @skipIfRemote 61 def test_compile_units(self): 62 program= self.getBuildArtifact("a.out") 63 self.build_and_launch(program) 64 source = "main.cpp" 65 main_source_path = self.getSourcePath(source) 66 breakpoint1_line = line_number(source, '// breakpoint 1') 67 lines = [breakpoint1_line] 68 breakpoint_ids = self.set_source_breakpoints(source, lines) 69 self.continue_to_breakpoints(breakpoint_ids) 70 moduleId = self.vscode.get_active_modules()['a.out']['id'] 71 response = self.vscode.request_getCompileUnits(moduleId) 72 self.assertTrue(response['body']) 73 self.assertTrue(len(response['body']['compileUnits']) == 1, 74 'Only one source file should exist') 75 self.assertTrue(response['body']['compileUnits'][0]['compileUnitPath'] == main_source_path, 76 'Real path to main.cpp matches') 77 78