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 ObjCDataFormatterNSPlain(ObjCDataFormatterTestCase): 16*99451b44SJordan Rupprecht 17*99451b44SJordan Rupprecht def test_plain_objc_with_run_command(self): 18*99451b44SJordan Rupprecht """Test basic ObjC formatting behavior.""" 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 self.runCmd("type summary add --summary-string \"${var%@}\" MyClass") 41*99451b44SJordan Rupprecht 42*99451b44SJordan Rupprecht self.expect("frame variable object2", substrs=['MyOtherClass']) 43*99451b44SJordan Rupprecht 44*99451b44SJordan Rupprecht self.expect("frame variable *object2", substrs=['MyOtherClass']) 45*99451b44SJordan Rupprecht 46*99451b44SJordan Rupprecht # Now let's delete the 'MyClass' custom summary. 47*99451b44SJordan Rupprecht self.runCmd("type summary delete MyClass") 48*99451b44SJordan Rupprecht 49*99451b44SJordan Rupprecht # The type format list should not show 'MyClass' at this point. 50*99451b44SJordan Rupprecht self.expect("type summary list", matching=False, substrs=['MyClass']) 51*99451b44SJordan Rupprecht 52*99451b44SJordan Rupprecht self.runCmd("type summary add --summary-string \"a test\" MyClass") 53*99451b44SJordan Rupprecht 54*99451b44SJordan Rupprecht self.expect( 55*99451b44SJordan Rupprecht "frame variable *object2", 56*99451b44SJordan Rupprecht substrs=['*object2 =', 'MyClass = a test', 'backup = ']) 57*99451b44SJordan Rupprecht 58*99451b44SJordan Rupprecht self.expect( 59*99451b44SJordan Rupprecht "frame variable object2", matching=False, substrs=['a test']) 60*99451b44SJordan Rupprecht 61*99451b44SJordan Rupprecht self.expect("frame variable object", substrs=['a test']) 62*99451b44SJordan Rupprecht 63*99451b44SJordan Rupprecht self.expect("frame variable *object", substrs=['a test']) 64*99451b44SJordan Rupprecht 65*99451b44SJordan Rupprecht self.expect( 66*99451b44SJordan Rupprecht 'frame variable myclass', substrs=['(Class) myclass = NSValue']) 67*99451b44SJordan Rupprecht self.expect( 68*99451b44SJordan Rupprecht 'frame variable myclass2', 69*99451b44SJordan Rupprecht substrs=['(Class) myclass2 = ', 'NS', 'String']) 70*99451b44SJordan Rupprecht self.expect( 71*99451b44SJordan Rupprecht 'frame variable myclass3', substrs=['(Class) myclass3 = Molecule']) 72*99451b44SJordan Rupprecht self.expect( 73*99451b44SJordan Rupprecht 'frame variable myclass4', 74*99451b44SJordan Rupprecht substrs=['(Class) myclass4 = NSMutableArray']) 75*99451b44SJordan Rupprecht self.expect( 76*99451b44SJordan Rupprecht 'frame variable myclass5', substrs=['(Class) myclass5 = nil']) 77