1# encoding: utf-8 2""" 3Test lldb data formatter subsystem. 4""" 5 6 7import lldb 8from lldbsuite.test.decorators import * 9from lldbsuite.test.lldbtest import * 10from lldbsuite.test import lldbutil 11 12from ObjCDataFormatterTestCase import ObjCDataFormatterTestCase 13 14 15class ObjCDataFormatterExpr(ObjCDataFormatterTestCase): 16 def test_expr_with_run_command(self): 17 """Test common cases of expression parser <--> formatters interaction.""" 18 self.build() 19 self.target, process, thread, bkpt = lldbutil.run_to_source_breakpoint( 20 self, "// Set break point at this line.", lldb.SBFileSpec("main.m", False) 21 ) 22 23 # The stop reason of the thread should be breakpoint. 24 self.expect( 25 "thread list", 26 STOPPED_DUE_TO_BREAKPOINT, 27 substrs=["stopped", "stop reason = breakpoint"], 28 ) 29 30 self.runCmd("settings set target.prefer-dynamic-value no-dynamic-values") 31 32 # This is the function to remove the custom formats in order to have a 33 # clean slate for the next test case. 34 def cleanup(): 35 self.runCmd("type format clear", check=False) 36 self.runCmd("type summary clear", check=False) 37 self.runCmd("type synth clear", check=False) 38 39 # Execute the cleanup function during test case tear down. 40 self.addTearDownHook(cleanup) 41 42 # check that the formatters are able to deal safely and correctly 43 # with ValueObjects that the expression parser returns 44 self.expect( 45 'expression ((id)@"Hello for long enough to avoid short string types")', 46 matching=False, 47 substrs=["Hello for long enough to avoid short string types"], 48 ) 49 50 self.expect( 51 'expression -d run -- ((id)@"Hello for long enough to avoid short string types")', 52 substrs=["Hello for long enough to avoid short string types"], 53 ) 54 55 self.expect("expr -d run -- label1", substrs=["Process Name"]) 56 57 self.expect( 58 'expr -d run -- @"Hello for long enough to avoid short string types"', 59 substrs=["Hello for long enough to avoid short string types"], 60 ) 61 62 self.expect( 63 'expr -d run --object-description -- @"Hello for long enough to avoid short string types"', 64 substrs=["Hello for long enough to avoid short string types"], 65 ) 66 self.expect( 67 'expr -d run --object-description -- @"Hello"', 68 matching=False, 69 substrs=['@"Hello" Hello'], 70 ) 71