| # encoding: utf-8 |
| """ |
| Test lldb data formatter subsystem. |
| """ |
| |
| |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| from ObjCDataFormatterTestCase import ObjCDataFormatterTestCase |
| |
| |
| class ObjCDataFormatterNSContainer(ObjCDataFormatterTestCase): |
| def test_nscontainers_with_run_command(self): |
| """Test formatters for NS container classes.""" |
| self.appkit_tester_impl(self.nscontainers_data_formatter_commands, False) |
| |
| def nscontainers_data_formatter_commands(self): |
| self.runCmd("settings set target.prefer-dynamic-value no-dynamic-values") |
| |
| self.expect( |
| "frame variable newArray nsDictionary newDictionary nscfDictionary cfDictionaryRef newMutableDictionary copyDictionary newMutableDictionaryRef cfarray_ref mutable_array_ref", |
| substrs=[ |
| "(NSArray *) newArray = ", |
| ' @"50 elements"', |
| "(NSDictionary *) nsDictionary = ", |
| " 2 key/value pairs", |
| "(NSDictionary *) newDictionary = ", |
| " 12 key/value pairs", |
| "(NSDictionary *) nscfDictionary = ", |
| " 4 key/value pairs", |
| "(CFDictionaryRef) cfDictionaryRef = ", |
| " 2 key/value pairs", |
| "(NSDictionary *) newMutableDictionary = ", |
| " 21 key/value pairs", |
| "(NSMutableDictionary *) copyDictionary = ", |
| " 21 key/value pairs", |
| "(CFMutableDictionaryRef) newMutableDictionaryRef = ", |
| " 21 key/value pairs", |
| "(CFArrayRef) cfarray_ref = ", |
| ' @"3 elements"', |
| "(CFMutableArrayRef) mutable_array_ref = ", |
| ' @"11 elements"', |
| ], |
| ) |
| |
| self.expect( |
| "frame var -d run-target copyDictionary[10]", substrs=['@"bar9"', '@"foo"'] |
| ) |
| |
| self.expect( |
| "frame variable -d run-target *nscfDictionary", |
| patterns=[ |
| "\(__NSCFDictionary\) \*nscfDictionary =", |
| 'key = 0x.* @"foo"', |
| 'value = 0x.* @"foo"', |
| 'key = 0x.* @"bar"', |
| 'value = 0x.* @"bar"', |
| 'key = 0x.* @"baz"', |
| 'value = 0x.* @"baz"', |
| 'key = 0x.* @"quux"', |
| 'value = 0x.* @"quux"', |
| ], |
| ) |
| |
| self.expect( |
| "frame variable -d run-target *cfDictionaryRef", |
| patterns=[ |
| "\(const __CFDictionary\) \*cfDictionaryRef =", |
| 'key = 0x.* @"foo"', |
| 'value = 0x.* @"foo"', |
| 'key = 0x.* @"bar"', |
| 'value = 0x.* @"bar"', |
| ], |
| ) |
| |
| self.expect( |
| "frame var nscfSet cfSetRef", |
| substrs=[ |
| "(NSSet *) nscfSet = ", |
| "2 elements", |
| "(CFSetRef) cfSetRef = ", |
| "2 elements", |
| ], |
| ) |
| |
| self.expect( |
| "frame variable -d run-target *nscfSet", |
| patterns=[ |
| "\(__NSCFSet\) \*nscfSet =", |
| '\[0\] = 0x.* @".*"', |
| '\[1\] = 0x.* @".*"', |
| ], |
| ) |
| |
| self.expect( |
| "frame variable -d run-target *cfSetRef", |
| patterns=[ |
| "\(const __CFSet\) \*cfSetRef =", |
| '\[0\] = 0x.* @".*"', |
| '\[1\] = 0x.* @".*"', |
| ], |
| ) |
| |
| self.expect( |
| "frame variable iset1 iset2 imset", |
| substrs=["4 indexes", "512 indexes", "10 indexes"], |
| ) |
| |
| self.expect( |
| "frame variable binheap_ref", |
| substrs=["(CFBinaryHeapRef) binheap_ref = ", '@"21 items"'], |
| ) |
| |
| self.expect( |
| "expression -d run -- (NSArray*)[NSArray new]", substrs=['@"0 elements"'] |
| ) |