146c1f77eSJeffrey Tan"""
246c1f77eSJeffrey TanTest lldb-vscode variables/stackTrace request for optimized code
346c1f77eSJeffrey Tan"""
446c1f77eSJeffrey Tan
546c1f77eSJeffrey Tanfrom __future__ import print_function
646c1f77eSJeffrey Tan
746c1f77eSJeffrey Tanimport unittest2
846c1f77eSJeffrey Tanimport vscode
946c1f77eSJeffrey Tanfrom lldbsuite.test.decorators import *
1046c1f77eSJeffrey Tanfrom lldbsuite.test.lldbtest import *
1146c1f77eSJeffrey Tanfrom lldbsuite.test import lldbutil
1246c1f77eSJeffrey Tanimport lldbvscode_testcase
1346c1f77eSJeffrey Tan
1446c1f77eSJeffrey Tan
1546c1f77eSJeffrey Tanclass TestVSCode_optimized(lldbvscode_testcase.VSCodeTestCaseBase):
1646c1f77eSJeffrey Tan
1746c1f77eSJeffrey Tan    @skipIfWindows
1846c1f77eSJeffrey Tan    @skipIfRemote
1946c1f77eSJeffrey Tan    def test_stack_frame_name(self):
2046c1f77eSJeffrey Tan        ''' Test optimized frame has special name suffix.
2146c1f77eSJeffrey Tan        '''
2246c1f77eSJeffrey Tan        program = self.getBuildArtifact("a.out")
2346c1f77eSJeffrey Tan        self.build_and_launch(program)
2446c1f77eSJeffrey Tan        source = 'main.cpp'
2546c1f77eSJeffrey Tan        breakpoint_line = line_number(source, '// breakpoint 1')
2646c1f77eSJeffrey Tan        lines = [breakpoint_line]
2746c1f77eSJeffrey Tan        breakpoint_ids = self.set_source_breakpoints(source, lines)
2846c1f77eSJeffrey Tan        self.assertEqual(len(breakpoint_ids), len(lines),
2946c1f77eSJeffrey Tan                        "expect correct number of breakpoints")
3046c1f77eSJeffrey Tan        self.continue_to_breakpoints(breakpoint_ids)
3146c1f77eSJeffrey Tan        leaf_frame = self.vscode.get_stackFrame(frameIndex=0)
3246c1f77eSJeffrey Tan        self.assertTrue(leaf_frame['name'].endswith(' [opt]'))
3346c1f77eSJeffrey Tan        parent_frame = self.vscode.get_stackFrame(frameIndex=1)
3446c1f77eSJeffrey Tan        self.assertTrue(parent_frame['name'].endswith(' [opt]'))
35*0fe220a3SJeffrey Tan
36*0fe220a3SJeffrey Tan    @skipIfWindows
37*0fe220a3SJeffrey Tan    @skipIfRemote
38*0fe220a3SJeffrey Tan    def test_optimized_variable(self):
39*0fe220a3SJeffrey Tan        ''' Test optimized variable value contains error.
40*0fe220a3SJeffrey Tan        '''
41*0fe220a3SJeffrey Tan        program = self.getBuildArtifact("a.out")
42*0fe220a3SJeffrey Tan        self.build_and_launch(program)
43*0fe220a3SJeffrey Tan        source = 'main.cpp'
44*0fe220a3SJeffrey Tan        breakpoint_line = line_number(source, '// breakpoint 2')
45*0fe220a3SJeffrey Tan        lines = [breakpoint_line]
46*0fe220a3SJeffrey Tan        # Set breakpoint in the thread function so we can step the threads
47*0fe220a3SJeffrey Tan        breakpoint_ids = self.set_source_breakpoints(source, lines)
48*0fe220a3SJeffrey Tan        self.assertEqual(len(breakpoint_ids), len(lines),
49*0fe220a3SJeffrey Tan                        "expect correct number of breakpoints")
50*0fe220a3SJeffrey Tan        self.continue_to_breakpoints(breakpoint_ids)
51*0fe220a3SJeffrey Tan        optimized_variable = self.vscode.get_local_variable('optimized')
52*0fe220a3SJeffrey Tan
53*0fe220a3SJeffrey Tan        self.assertTrue(optimized_variable['value'].startswith('<error:'))
54