This has led to many test suite failures because of copy and paste where new test cases were based off of other test cases and the "mydir" variable wasn't updated. Now you can call your superclasses "compute_mydir()" function with "__file__" as the sole argument and the relative path will be computed for you. llvm-svn: 196985
78 lines
2.9 KiB
Python
78 lines
2.9 KiB
Python
"""
|
|
Test error cases for the 'watchpoint set' command to make sure it errors out when necessary.
|
|
"""
|
|
|
|
import os, time
|
|
import unittest2
|
|
import lldb
|
|
from lldbtest import *
|
|
import lldbutil
|
|
|
|
class WatchpointSetErrorTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
@expectedFailureFreeBSD('llvm.org/pr16706') # Watchpoints not yet on FreeBSD
|
|
def test_error_cases_with_watchpoint_set(self):
|
|
"""Test error cases with the 'watchpoint set' command."""
|
|
self.buildDwarf(dictionary=self.d)
|
|
self.setTearDownCleanup(dictionary=self.d)
|
|
self.error_cases_with_watchpoint_set()
|
|
|
|
def setUp(self):
|
|
# Call super's setUp().
|
|
TestBase.setUp(self)
|
|
# Our simple source filename.
|
|
self.source = 'main.cpp'
|
|
# Find the line number to break inside main().
|
|
self.line = line_number(self.source, '// Set break point at this line.')
|
|
# Build dictionary to have unique executable names for each test method.
|
|
self.exe_name = self.testMethodName
|
|
self.d = {'CXX_SOURCES': self.source, 'EXE': self.exe_name}
|
|
|
|
def error_cases_with_watchpoint_set(self):
|
|
"""Test error cases with the 'watchpoint set' command."""
|
|
exe = os.path.join(os.getcwd(), self.exe_name)
|
|
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
|
|
|
|
# Add a breakpoint to set a watchpoint when stopped on the breakpoint.
|
|
lldbutil.run_break_set_by_file_and_line (self, None, self.line, num_expected_locations=1)
|
|
|
|
# Run the program.
|
|
self.runCmd("run", RUN_SUCCEEDED)
|
|
|
|
# We should be stopped again due to the breakpoint.
|
|
# The stop reason of the thread should be breakpoint.
|
|
self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
|
|
substrs = ['stopped',
|
|
'stop reason = breakpoint'])
|
|
|
|
# Try some error conditions:
|
|
|
|
# 'watchpoint set' is now a multiword command.
|
|
self.expect("watchpoint set",
|
|
substrs = ['The following subcommands are supported:',
|
|
'expression',
|
|
'variable'])
|
|
self.runCmd("watchpoint set variable -w read_write", check=False)
|
|
|
|
# 'watchpoint set expression' with '-w' or '-x' specified now needs
|
|
# an option terminator and a raw expression after that.
|
|
self.expect("watchpoint set expression -w write --", error=True,
|
|
startstr = 'error: ')
|
|
|
|
# It's an error if the expression did not evaluate to an address.
|
|
self.expect("watchpoint set expression MyAggregateDataType", error=True,
|
|
startstr = 'error: expression did not evaluate to an address')
|
|
|
|
# Wrong size parameter is an error.
|
|
self.expect("watchpoint set variable -x -128", error=True,
|
|
substrs = ['invalid enumeration value'])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import atexit
|
|
lldb.SBDebugger.Initialize()
|
|
atexit.register(lambda: lldb.SBDebugger.Terminate())
|
|
unittest2.main()
|