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
14
15class TestVSCode_module(lldbvscode_testcase.VSCodeTestCaseBase):
16
17    mydir = TestBase.compute_mydir(__file__)
18
19    def test_modules_event(self):
20        program_basename = "a.out.stripped"
21        program= self.getBuildArtifact(program_basename)
22        self.build_and_launch(program)
23        source = "main.cpp"
24        main_source_path = self.getSourcePath(source)
25        functions = ['main']
26        breakpoint_ids = self.set_function_breakpoints(functions)
27        self.assertEquals(len(breakpoint_ids), len(functions),
28                        'expect one breakpoint')
29        self.continue_to_breakpoints(breakpoint_ids)
30        active_modules = self.vscode.get_active_modules()
31        self.assertIn(program_basename, active_modules, '%s module is in active modules' % (program_basename))
32        program_module = active_modules[program_basename]
33        self.assertIn('name', program_module, 'make sure name is in module')
34        self.assertEqual(program_basename, program_module['name'])
35        self.assertIn('path', program_module, 'make sure path is in module')
36        self.assertEqual(program, program_module['path'])
37        self.assertTrue('symbolFilePath' not in program_module, 'Make sure a.out.stripped has no debug info')
38        self.assertEqual('Symbols not found.', program_module['symbolStatus'])
39        symbol_path = self.getBuildArtifact("a.out")
40        response = self.vscode.request_evaluate('`%s' % ('target symbols add -s "%s" "%s"' % (program, symbol_path)))
41        active_modules = self.vscode.get_active_modules()
42        program_module = active_modules[program_basename]
43        self.assertEqual(program_basename, program_module['name'])
44        self.assertEqual(program, program_module['path'])
45        self.assertEqual('Symbols loaded.', program_module['symbolStatus'])
46        self.assertIn('symbolFilePath', program_module)
47        self.assertEqual(symbol_path, program_module['symbolFilePath'])
48        self.assertIn('addressRange', program_module)
49
50    def test_compile_units(self):
51        program= self.getBuildArtifact("a.out")
52        self.build_and_launch(program)
53        source = "main.cpp"
54        main_source_path = self.getSourcePath(source)
55        breakpoint1_line = line_number(source, '// breakpoint 1')
56        lines = [breakpoint1_line]
57        breakpoint_ids = self.set_source_breakpoints(source, lines)
58        self.continue_to_breakpoints(breakpoint_ids)
59        moduleId = self.vscode.get_active_modules()['a.out']['id']
60        response = self.vscode.request_getCompileUnits(moduleId)
61        print(response['body'])
62        self.assertTrue(response['body'])
63        self.assertTrue(len(response['body']['compileUnits']) == 1,
64                        'Only one source file should exist')
65        self.assertTrue(response['body']['compileUnits'][0]['compileUnitPath'] == main_source_path,
66                        'Real path to main.cpp matches')
67