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