1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
"""
Test lldb-vscode logpoints feature.
"""
import unittest2
import vscode
import shutil
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
import lldbvscode_testcase
import os
class TestVSCode_logpoints(lldbvscode_testcase.VSCodeTestCaseBase):
def setUp(self):
lldbvscode_testcase.VSCodeTestCaseBase.setUp(self)
self.main_basename = 'main-copy.cpp'
self.main_path = os.path.realpath(self.getBuildArtifact(self.main_basename))
@skipIfWindows
@skipIfRemote
def test_logmessage_basic(self):
'''Tests breakpoint logmessage basic functionality.'''
before_loop_line = line_number('main.cpp', '// before loop')
loop_line = line_number('main.cpp', '// break loop')
after_loop_line = line_number('main.cpp', '// after loop')
program = self.getBuildArtifact("a.out")
self.build_and_launch(program)
# Set a breakpoint at a line before loop
before_loop_breakpoint_ids = self.set_source_breakpoints(
self.main_path,
[before_loop_line])
self.assertEquals(len(before_loop_breakpoint_ids), 1, "expect one breakpoint")
self.vscode.request_continue()
# Verify we hit the breakpoint before loop line
self.verify_breakpoint_hit(before_loop_breakpoint_ids)
# Swallow old console output
self.get_console()
# Set two breakpoints:
# 1. First at the loop line with logMessage
# 2. Second guard breakpoint at a line after loop
logMessage_prefix = "This is log message for { -- "
# Trailing newline is needed for splitlines()
logMessage = logMessage_prefix + "{i + 3}\n"
[loop_breakpoint_id, post_loop_breakpoint_id] = self.set_source_breakpoints(
self.main_path,
[loop_line, after_loop_line],
[{'logMessage': logMessage}, {}]
)
# Continue to trigger the breakpoint with log messages
self.vscode.request_continue()
# Verify we hit the breakpoint after loop line
self.verify_breakpoint_hit([post_loop_breakpoint_id])
output = self.get_console()
lines = output.splitlines()
logMessage_output = []
for line in lines:
if line.startswith(logMessage_prefix):
logMessage_output.append(line)
# Verify logMessage count
loop_count = 10
self.assertEqual(len(logMessage_output), loop_count)
# Verify log message match
for idx, logMessage_line in enumerate(logMessage_output):
result = idx + 3
self.assertEqual(logMessage_line, logMessage_prefix + str(result))
@skipIfWindows
@skipIfRemote
def test_logmessage_advanced(self):
'''Tests breakpoint logmessage functionality for complex expression.'''
before_loop_line = line_number('main.cpp', '// before loop')
loop_line = line_number('main.cpp', '// break loop')
after_loop_line = line_number('main.cpp', '// after loop')
program = self.getBuildArtifact("a.out")
self.build_and_launch(program)
# Set a breakpoint at a line before loop
before_loop_breakpoint_ids = self.set_source_breakpoints(
self.main_path,
[before_loop_line])
self.assertEquals(len(before_loop_breakpoint_ids), 1, "expect one breakpoint")
self.vscode.request_continue()
# Verify we hit the breakpoint before loop line
self.verify_breakpoint_hit(before_loop_breakpoint_ids)
# Swallow old console output
self.get_console()
# Set two breakpoints:
# 1. First at the loop line with logMessage
# 2. Second guard breakpoint at a line after loop
logMessage_prefix = "This is log message for { -- "
# Trailing newline is needed for splitlines()
logMessage = logMessage_prefix + "{int y = 0; if (i % 3 == 0) { y = i + 3;} else {y = i * 3;} y}\n"
[loop_breakpoint_id, post_loop_breakpoint_id] = self.set_source_breakpoints(
self.main_path,
[loop_line, after_loop_line],
[{'logMessage': logMessage}, {}]
)
# Continue to trigger the breakpoint with log messages
self.vscode.request_continue()
# Verify we hit the breakpoint after loop line
self.verify_breakpoint_hit([post_loop_breakpoint_id])
output = self.get_console()
lines = output.splitlines()
logMessage_output = []
for line in lines:
if line.startswith(logMessage_prefix):
logMessage_output.append(line)
# Verify logMessage count
loop_count = 10
self.assertEqual(len(logMessage_output), loop_count)
# Verify log message match
for idx, logMessage_line in enumerate(logMessage_output):
result = idx + 3 if idx % 3 == 0 else idx * 3
self.assertEqual(logMessage_line, logMessage_prefix + str(result))
|