Enrico Granata fa6b278f9c Add the ability for formatter categories to be bound to one or more languages
What that does is it restricts formatters in those categories to only match to types coming from "compatible" source languages

llvm-svn: 247872
2015-09-17 00:14:50 +00:00

97 lines
3.3 KiB
Python

"""
Test lldb data formatter subsystem.
"""
import os, time
import unittest2
import lldb
from lldbtest import *
import lldbutil
class DataFormatterDisablingTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
@skipUnlessDarwin
@dsym_test
def test_with_dsym_and_run_command(self):
"""Test data formatter commands."""
self.buildDsym()
self.data_formatter_commands()
@dwarf_test
@expectedFailureWindows("llvm.org/pr24462") # Data formatters have problems on Windows
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.cpp', '// Set break point at this line.')
def data_formatter_commands(self):
"""Check that we can properly disable all data formatter categories."""
self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True)
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 category enable *', check=False)
# Execute the cleanup function during test case tear down.
self.addTearDownHook(cleanup)
#self.runCmd('type category enable system VectorTypes libcxx gnu-libstdc++ CoreGraphics CoreServices AppKit CoreFoundation objc default', check=False)
self.expect('type category list', substrs = ['system','enabled',])
self.expect("frame variable numbers",
substrs = ['[0] = 1', '[3] = 1234'])
self.expect('frame variable string1', substrs = ['hello world'])
# now disable them all and check that nothing is formatted
self.runCmd('type category disable *')
self.expect("frame variable numbers", matching=False,
substrs = ['[0] = 1', '[3] = 1234'])
self.expect('frame variable string1', matching=False, substrs = ['hello world'])
self.expect('type category list', substrs = ['system','disabled',])
# now enable and check that we are back to normal
self.runCmd("type category enable *")
self.expect('type category list', substrs = ['system','enabled'])
self.expect("frame variable numbers",
substrs = ['[0] = 1', '[3] = 1234'])
self.expect('frame variable string1', substrs = ['hello world'])
self.expect('type category list', substrs = ['system','enabled'])
# last check - our cleanup will re-enable everything
self.runCmd('type category disable *')
self.expect('type category list', substrs = ['system','disabled'])
if __name__ == '__main__':
import atexit
lldb.SBDebugger.Initialize()
atexit.register(lambda: lldb.SBDebugger.Terminate())
unittest2.main()