[Lldb-commits] [lldb] r152186 - in /lldb/trunk: examples/summaries/cocoa/ test/functionalities/data-formatter/rdar-3534688/

Enrico Granata egranata at apple.com
Tue Mar 6 16:56:10 PST 2012


Author: enrico
Date: Tue Mar  6 18:56:09 2012
New Revision: 152186

URL: http://llvm.org/viewvc/llvm-project?rev=152186&view=rev
Log:
Fixing some of the new Python formatters to report '1 object' instead of '1 objects'

Added:
    lldb/trunk/test/functionalities/data-formatter/rdar-3534688/
    lldb/trunk/test/functionalities/data-formatter/rdar-3534688/Makefile
    lldb/trunk/test/functionalities/data-formatter/rdar-3534688/TestFormattersOneIsSingular.py
    lldb/trunk/test/functionalities/data-formatter/rdar-3534688/main.m
Modified:
    lldb/trunk/examples/summaries/cocoa/CFArray.py
    lldb/trunk/examples/summaries/cocoa/CFBag.py
    lldb/trunk/examples/summaries/cocoa/CFBinaryHeap.py
    lldb/trunk/examples/summaries/cocoa/CFDictionary.py
    lldb/trunk/examples/summaries/cocoa/NSData.py
    lldb/trunk/examples/summaries/cocoa/NSIndexSet.py
    lldb/trunk/examples/summaries/cocoa/NSSet.py

Modified: lldb/trunk/examples/summaries/cocoa/CFArray.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/summaries/cocoa/CFArray.py?rev=152186&r1=152185&r2=152186&view=diff
==============================================================================
--- lldb/trunk/examples/summaries/cocoa/CFArray.py (original)
+++ lldb/trunk/examples/summaries/cocoa/CFArray.py Tue Mar  6 18:56:09 2012
@@ -160,12 +160,14 @@
 	provider = NSArray_SynthProvider(valobj,dict);
 	if provider.invalid == False:
 	    try:
-	        summary = str(provider.num_children());
+	        summary = int(provider.num_children());
 	    except:
 	        summary = None
 	    if summary == None:
 	        summary = 'no valid array here'
-	    return summary + " objects"
+	    else:
+	        summary = str(summary) + (" objects" if summary > 1 else " object")
+	    return summary
 	return ''
 
 def __lldb_init_module(debugger,dict):

Modified: lldb/trunk/examples/summaries/cocoa/CFBag.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/summaries/cocoa/CFBag.py?rev=152186&r1=152185&r2=152186&view=diff
==============================================================================
--- lldb/trunk/examples/summaries/cocoa/CFBag.py (original)
+++ lldb/trunk/examples/summaries/cocoa/CFBag.py Tue Mar  6 18:56:09 2012
@@ -119,9 +119,11 @@
 		else:
 			if provider.sys_params.is_64_bit:
 				summary = summary & ~0x1fff000000000000
-		if summary == 1:
-			return '1 item'
-		return str(summary) + " items"
+			if summary == 1:
+				summary = '1 item'
+			else:
+				summary = str(summary) + ' items'
+		return summary
 	return ''
 
 def __lldb_init_module(debugger,dict):

Modified: lldb/trunk/examples/summaries/cocoa/CFBinaryHeap.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/summaries/cocoa/CFBinaryHeap.py?rev=152186&r1=152185&r2=152186&view=diff
==============================================================================
--- lldb/trunk/examples/summaries/cocoa/CFBinaryHeap.py (original)
+++ lldb/trunk/examples/summaries/cocoa/CFBinaryHeap.py Tue Mar  6 18:56:09 2012
@@ -113,9 +113,11 @@
 		else:
 			if provider.sys_params.is_64_bit:
 				summary = summary & ~0x1fff000000000000
-		if summary == 1:
-			return '1 item'
-		return str(summary) + " items"
+			if summary == 1:
+				return '1 item'
+			else:
+				summary = str(summary) + ' items'
+		return summary
 	return ''
 
 def __lldb_init_module(debugger,dict):

Modified: lldb/trunk/examples/summaries/cocoa/CFDictionary.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/summaries/cocoa/CFDictionary.py?rev=152186&r1=152185&r2=152186&view=diff
==============================================================================
--- lldb/trunk/examples/summaries/cocoa/CFDictionary.py (original)
+++ lldb/trunk/examples/summaries/cocoa/CFDictionary.py Tue Mar  6 18:56:09 2012
@@ -176,12 +176,12 @@
 	provider = GetSummary_Impl(valobj);
 	if provider != None:
 	    try:
-	        summary = str(provider.num_children());
+	        summary = provider.num_children();
 	    except:
 	        summary = None
 	    if summary == None:
 	        summary = 'no valid dictionary here'
-	    return summary + " key/value pairs"
+	    return str(summary) + (" key/value pairs" if summary > 1 else " key/value pair")
 	return ''
 
 def CFDictionary_SummaryProvider2 (valobj,dict):
@@ -193,10 +193,12 @@
 			summary = None
 		if summary == None:
 			summary = 'no valid dictionary here'
+		else:
 		# needed on OSX Mountain Lion
-		elif provider.sys_params.is_64_bit:
-			summary = summary & ~0x0f1f000000000000
-		return str(summary) + " key/value pairs"
+			if provider.sys_params.is_64_bit:
+				summary = summary & ~0x0f1f000000000000
+			summary = str(summary) + (" key/value pairs" if summary > 1 else " key/value pair")
+		return summary
 	return ''
 
 def __lldb_init_module(debugger,dict):

Modified: lldb/trunk/examples/summaries/cocoa/NSData.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/summaries/cocoa/NSData.py?rev=152186&r1=152185&r2=152186&view=diff
==============================================================================
--- lldb/trunk/examples/summaries/cocoa/NSData.py (original)
+++ lldb/trunk/examples/summaries/cocoa/NSData.py Tue Mar  6 18:56:09 2012
@@ -103,9 +103,12 @@
 	        summary = None
 	    if summary == None:
 	        summary = 'no valid data here'
-	    if summary == 1:
-	        return '1 byte'
-	    return str(summary) + " bytes"
+	    else:
+	        if summary == 1:
+	           summary = '1 byte'
+	        else:
+	           summary = str(summary) + ' bytes'
+	    return summary
 	return ''
 
 def __lldb_init_module(debugger,dict):

Modified: lldb/trunk/examples/summaries/cocoa/NSIndexSet.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/summaries/cocoa/NSIndexSet.py?rev=152186&r1=152185&r2=152186&view=diff
==============================================================================
--- lldb/trunk/examples/summaries/cocoa/NSIndexSet.py (original)
+++ lldb/trunk/examples/summaries/cocoa/NSIndexSet.py Tue Mar  6 18:56:09 2012
@@ -121,7 +121,7 @@
 		if summary == None:
 			summary = 'no valid set here'
 		else:
-			summary = str(summary) + ' objects'
+			summary = str(summary) + (' objects' if summary > 1 else ' object')
 		return summary
 	return ''
 

Modified: lldb/trunk/examples/summaries/cocoa/NSSet.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/summaries/cocoa/NSSet.py?rev=152186&r1=152185&r2=152186&view=diff
==============================================================================
--- lldb/trunk/examples/summaries/cocoa/NSSet.py (original)
+++ lldb/trunk/examples/summaries/cocoa/NSSet.py Tue Mar  6 18:56:09 2012
@@ -203,7 +203,9 @@
 	    #    summary = None
 	    if summary == None:
 	        summary = 'no valid set here'
-	    return str(summary) + ' objects'
+	    else:
+	        summary = str(summary) + (' objects' if summary > 1 else ' object')
+	    return summary
 	return ''
 
 def NSSet_SummaryProvider2 (valobj,dict):
@@ -222,8 +224,9 @@
 			summary = 'no valid set here'
 		else:
 			if provider.sys_params.is_64_bit:
-				summary = int(summary) & ~0x1fff000000000000
-		return str(summary) + ' objects'
+				summary = summary & ~0x1fff000000000000
+		 	summary = str(summary) + (' objects' if summary > 1 else ' object')
+		return summary
 	return ''
 
 

Added: lldb/trunk/test/functionalities/data-formatter/rdar-3534688/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/rdar-3534688/Makefile?rev=152186&view=auto
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/rdar-3534688/Makefile (added)
+++ lldb/trunk/test/functionalities/data-formatter/rdar-3534688/Makefile Tue Mar  6 18:56:09 2012
@@ -0,0 +1,9 @@
+LEVEL = ../../../make
+
+OBJC_SOURCES := main.m
+
+CFLAGS_EXTRAS += -w
+
+include $(LEVEL)/Makefile.rules
+
+LDFLAGS += -framework Foundation

Added: lldb/trunk/test/functionalities/data-formatter/rdar-3534688/TestFormattersOneIsSingular.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/rdar-3534688/TestFormattersOneIsSingular.py?rev=152186&view=auto
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/rdar-3534688/TestFormattersOneIsSingular.py (added)
+++ lldb/trunk/test/functionalities/data-formatter/rdar-3534688/TestFormattersOneIsSingular.py Tue Mar  6 18:56:09 2012
@@ -0,0 +1,107 @@
+"""
+Test lldb data formatter subsystem.
+"""
+
+import os, time
+import unittest2
+import lldb
+from lldbtest import *
+import datetime
+
+class DataFormatterOneIsSingularTestCase(TestBase):
+
+    mydir = os.path.join("functionalities", "data-formatter", "rdar-3534688")
+
+    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
+    def test_one_is_singular_with_dsym_and_run_command(self):
+        """Test that 1 item is not as reported as 1 items."""
+        self.buildDsym()
+        self.oneness_data_formatter_commands()
+
+    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
+    def test_one_is_singular_with_dwarf_and_run_command(self):
+        """Test that 1 item is not as reported as 1 items."""
+        self.buildDwarf()
+        self.oneness_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.m', '// Set break point at this line.')
+
+    def oneness_data_formatter_commands(self):
+        """Test that 1 item is not as reported as 1 items."""
+        self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
+
+        self.expect("breakpoint set -f main.m -l %d" % self.line,
+                    BREAKPOINT_CREATED,
+            startstr = "Breakpoint created: 1: file ='main.m', line = %d, locations = 1" %
+                        self.line)
+
+        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 format clear', check=False)
+            self.runCmd('type summary clear', check=False)
+            self.runCmd('type synth clear', check=False)
+            self.runCmd('type category disable CoreFoundation', check=False)
+            self.runCmd('type category disable CoreGraphics', check=False)
+            self.runCmd('type category disable CoreServices', check=False)
+            self.runCmd('type category disable AppKit', check=False)
+
+        # Execute the cleanup function during test case tear down.
+        self.addTearDownHook(cleanup)
+
+        # Now enable AppKit and check we are displaying Cocoa classes correctly
+        self.runCmd("type category enable AppKit")
+        self.expect('frame variable key',
+                    substrs = ['1 object'])
+        self.expect('frame variable key', matching=False,
+                    substrs = ['1 objects'])
+        self.expect('frame variable value',
+                    substrs = ['1 object'])
+        self.expect('frame variable value', matching=False,
+                    substrs = ['1 objects'])
+        self.expect('frame variable dict',
+                    substrs = ['1 key/value pair'])
+        self.expect('frame variable dict', matching=False,
+                    substrs = ['1 key/value pairs'])
+        self.expect('frame variable mutable_bag_ref',
+                    substrs = ['1 item'])
+        self.expect('frame variable mutable_bag_ref', matching=False,
+                    substrs = ['1 items'])
+        self.expect('frame variable nscounted_set',
+                    substrs = ['1 object'])
+        self.expect('frame variable nscounted_set', matching=False,
+                    substrs = ['1 objects'])
+        self.expect('frame variable imset',
+                    substrs = ['1 object'])
+        self.expect('frame variable imset', matching=False,
+                    substrs = ['1 objects'])
+        self.expect('frame variable binheap_ref',
+                    substrs = ['1 item'])
+        self.expect('frame variable binheap_ref', matching=False,
+                    substrs = ['1 items'])
+        self.expect('frame variable nsset',
+                    substrs = ['1 object'])
+        self.expect('frame variable nsset', matching=False,
+                    substrs = ['1 objects'])
+        self.expect('frame variable immutableData',
+                    substrs = ['1 byte'])
+        self.expect('frame variable immutableData', matching=False,
+                    substrs = ['1 bytes'])
+
+
+if __name__ == '__main__':
+    import atexit
+    lldb.SBDebugger.Initialize()
+    atexit.register(lambda: lldb.SBDebugger.Terminate())
+    unittest2.main()

Added: lldb/trunk/test/functionalities/data-formatter/rdar-3534688/main.m
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/rdar-3534688/main.m?rev=152186&view=auto
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/rdar-3534688/main.m (added)
+++ lldb/trunk/test/functionalities/data-formatter/rdar-3534688/main.m Tue Mar  6 18:56:09 2012
@@ -0,0 +1,42 @@
+//===-- main.m ------------------------------------------------*- ObjC -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#import <Foundation/Foundation.h>
+
+int main (int argc, const char * argv[])
+{
+    
+    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+    
+
+	NSArray* key = [NSArray arrayWithObjects:@"foo",nil];
+	NSArray* value = [NSArray arrayWithObjects:@"key",nil];
+	NSDictionary *dict = [NSDictionary dictionaryWithObjects:value forKeys:key];
+
+    CFMutableBagRef mutable_bag_ref = CFBagCreateMutable(NULL, 15, NULL);
+    CFBagSetValue(mutable_bag_ref, CFSTR("Hello world"));
+
+    NSCountedSet *nscounted_set = [[NSCountedSet alloc] initWithCapacity:5];
+    [nscounted_set addObject:@"foo"];
+
+    NSMutableIndexSet *imset = [[NSMutableIndexSet alloc] init];
+    [imset addIndex:4];
+
+    CFBinaryHeapRef binheap_ref = CFBinaryHeapCreate(NULL, 15, &kCFStringBinaryHeapCallBacks, NULL);
+    CFBinaryHeapAddValue(binheap_ref, CFSTR("Hello world"));
+
+    NSSet* nsset = [[NSSet alloc] initWithObjects:@"foo",nil];
+
+    NSData *immutableData = [[NSData alloc] initWithBytes:"HELLO" length:1];
+
+
+    [pool drain];// Set break point at this line.
+    return 0;
+}
+





More information about the lldb-commits mailing list