Files
clang-p2996/lldb/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py
Johnny Chen 04adb62569 Uniquefy the various data-formatter test class names so that:
./dotest.py -v -f DataFormatterTestCase.test_with_dsym_and_run_command

will not end up running 14 tests.

llvm-svn: 138399
2011-08-23 22:32:45 +00:00

259 lines
10 KiB
Python

"""
Test lldb data formatter subsystem.
"""
import os, time
import unittest2
import lldb
from lldbtest import *
class ObjCDataFormatterTestCase(TestBase):
mydir = os.path.join("functionalities", "data-formatter", "data-formatter-objc")
@unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
def test_with_dsym_and_run_command(self):
"""Test data formatter commands."""
self.buildDsym()
self.data_formatter_commands()
def test_with_dwarf_and_run_command(self):
"""Test data formatter commands."""
self.buildDwarf()
self.data_formatter_commands()
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
# Find the line number to break at.
self.line = line_number('main.m', '// Set break point at this line.')
def data_formatter_commands(self):
"""Test that that file and class static variables display correctly."""
self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
self.expect("breakpoint set -f main.m -l %d" % self.line,
BREAKPOINT_CREATED,
startstr = "Breakpoint created: 1: file ='main.m', line = %d, locations = 1" %
self.line)
self.runCmd("run", RUN_SUCCEEDED)
# The stop reason of the thread should be breakpoint.
self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
substrs = ['stopped',
'stop reason = breakpoint'])
# This is the function to remove the custom formats in order to have a
# clean slate for the next test case.
def cleanup():
self.runCmd('type format clear', check=False)
self.runCmd('type summary clear', check=False)
self.runCmd('type synth clear', check=False)
# Execute the cleanup function during test case tear down.
self.addTearDownHook(cleanup)
self.runCmd("type summary add --summary-string \"${var%@}\" MyClass")
self.expect("frame variable object2",
substrs = ['MyOtherClass']);
self.expect("frame variable *object2",
substrs = ['MyOtherClass']);
# Now let's delete the 'MyClass' custom summary.
self.runCmd("type summary delete MyClass")
# The type format list should not show 'MyClass' at this point.
self.expect("type summary list", matching=False,
substrs = ['MyClass'])
self.runCmd("type summary add --summary-string \"a test\" MyClass")
self.expect("frame variable object2",
substrs = ['a test']);
self.expect("frame variable *object2",
substrs = ['a test']);
self.expect("frame variable object",
substrs = ['a test']);
self.expect("frame variable *object",
substrs = ['a test']);
self.runCmd("type summary add --summary-string \"a test\" MyClass -C no")
self.expect("frame variable *object2",
substrs = ['*object2 = {',
'MyClass = a test',
'backup = ']);
self.expect("frame variable object2", matching=False,
substrs = ['a test']);
self.expect("frame variable object",
substrs = ['a test']);
self.expect("frame variable *object",
substrs = ['a test']);
# Now check that the synth for CFString works
self.runCmd("script from CFString import *")
self.runCmd("type synth add -l CFStringSynthProvider NSString")
self.expect('frame variable str -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'A rather short ASCII NSString object is here'])
self.expect('frame variable str2 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'A rather short UTF8 NSString object is here'])
self.expect('frame variable str3 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'A string made with the at sign is here'])
self.expect('frame variable str4 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'This is string number 4 right here'])
self.expect('frame variable str5 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'{{1, 1}, {5, 5}}'])
self.expect('frame variable str6 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'1ST'])
self.expect('frame variable str7 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'\\xcf\\x83xx'])
self.expect('frame variable str8 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'hasVeryLongExtensionThisTime'])
self.expect('frame variable str9 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'a very much boring task to write a string this way!!\\xcf\\x83'])
self.expect('frame variable str10 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'This is a Unicode string \\xcf\\x83 number 4 right here'])
self.expect('frame variable str11 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'NSCFString'])
self.expect('frame variable processName -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'a.out'])
self.expect('frame variable str12 -P 1 -Y',
substrs = ['mutable =',
'inline = ',
'explicit = ',
'content = ',
'Process Name: a.out Process Id:'])
# check that access to synthetic children by name works
self.expect("frame variable str12->mutable",
substrs = ['(int) mutable = 0'])
# delete the synth and set a summary
self.runCmd("type synth delete NSString")
self.runCmd("type summary add -F CFString_SummaryProvider NSString")
self.expect('frame variable str',
substrs = ['A rather short ASCII NSString object is here'])
self.expect('frame variable str2',
substrs = ['A rather short UTF8 NSString object is here'])
self.expect('frame variable str3',
substrs = ['A string made with the at sign is here'])
self.expect('frame variable str4',
substrs = ['This is string number 4 right here'])
self.expect('frame variable str5',
substrs = ['{{1, 1}, {5, 5}}'])
self.expect('frame variable str6',
substrs = ['1ST'])
self.expect('frame variable str7',
substrs = ['\\xcf\\x83xx'])
self.expect('frame variable str8',
substrs = ['hasVeryLongExtensionThisTime'])
self.expect('frame variable str9',
substrs = ['a very much boring task to write a string this way!!\\xcf\\x83'])
self.expect('frame variable str10',
substrs = ['This is a Unicode string \\xcf\\x83 number 4 right here'])
self.expect('frame variable str11',
substrs = ['NSCFString'])
self.expect('frame variable processName',
substrs = ['a.out'])
self.expect('frame variable str12',
substrs = ['Process Name: a.out Process Id:'])
self.expect('frame variable dyn_test', matching=False,
substrs = ['Process Name: a.out Process Id:'])
self.expect('frame variable dyn_test -d run-target -T',
substrs = ['(id, dynamic type:',
'Process Name: a.out Process Id:'])
self.expect('frame variable dyn_test -d run-target',
substrs = ['(id)',
'Process Name: a.out Process Id:'])
# check that we can format stuff out of the expression parser
self.expect('expression ((id)@"Hello")', matching=False,
substrs = ['Hello'])
self.expect('expression -d true -- ((id)@"Hello")',
substrs = ['Hello'])
self.expect('expr -d true -- label1',
substrs = ['Process Name'])
self.expect('expr -d true -- @"Hello"',
substrs = ['Hello'])
if __name__ == '__main__':
import atexit
lldb.SBDebugger.Initialize()
atexit.register(lambda: lldb.SBDebugger.Terminate())
unittest2.main()