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