[PyObjC-svn] r2138 - in trunk/pyobjc/pyobjc-framework-Cocoa: . Doc Lib/CoreFoundation PyObjCTest

[email protected]
Newsgroups gmane.comp.python.pyobjc.cvs
Message-ID <[email protected]>
Author: ronaldoussoren
Date: Fri Apr 10 08:52:51 2009
New Revision: 2138

Log:
* TestSuite for CoreFoundation, Foundation and AppKit is now almost complete,
  with only a few methods that I want to implement in the nearish future.
* Upgrade version number 2.2b2 because the testsuite is done and all examples
  are now valid with PyObjC 2.2.
* No longer install the nibclassbuilder tool because that functionality is
  no longer supported (will remove NibClassBuilder itself in a future release,
  but not before PyObjC 2.4)


Modified:
   trunk/pyobjc/pyobjc-framework-Cocoa/Doc/api-notes-AppKit.txt
   trunk/pyobjc/pyobjc-framework-Cocoa/Lib/CoreFoundation/PyObjC.bridgesupport
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfarray.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfattributedstring.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbag.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbase.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbinaryheap.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbundle.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfcalendar.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfcharacterset.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdata.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdate.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdateformatter.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdictionary.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cferror.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cffiledescriptor.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cflocale.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfmachport.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfmessageport.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnotificationcenter.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnumber.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnumberformatter.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfpreferences.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfpropertylist.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfrunloop.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfset.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfsocket.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstream.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstring.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstringtokenizer.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cftimezone.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cftree.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfurl.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfurlaccess.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfusernotification.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfuuid.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfxmlnode.py
   trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfxmlparser.py
   trunk/pyobjc/pyobjc-framework-Cocoa/setup.py

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/Doc/api-notes-AppKit.txt
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/Doc/api-notes-AppKit.txt	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/Doc/api-notes-AppKit.txt	Fri Apr 10 08:52:51 2009
@@ -88,3 +88,11 @@
 * ``getBuffer:length:``
 
    This method is not supported
+
+``NSBitmapImageRep``
+--------------------
+
+* ``-initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel:``
+
+  This method is not yet supported. Support for this method requires a manual wrapper, which 
+  has not been written yet.

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/Lib/CoreFoundation/PyObjC.bridgesupport
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/Lib/CoreFoundation/PyObjC.bridgesupport	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/Lib/CoreFoundation/PyObjC.bridgesupport	Fri Apr 10 08:52:51 2009
@@ -46,7 +46,7 @@
   <cftype gettypeid_func='CFMachPortGetTypeID' name='CFMachPortRef' tollfree='NSMachPort' type='^{__CFMachPort=}' type64='^{__CFMachPort=}' />
   <cftype gettypeid_func='CFMessagePortGetTypeID' name='CFMessagePortRef' type='^{__CFMessagePort=}' type64='^{__CFMessagePort=}' />
   <cftype gettypeid_func='CFArrayGetTypeID' name='CFMutableArrayRef' tollfree='NSMutableArray' type='^{__CFArray=}' type64='^{__CFArray=}' />
-  <cftype gettypeid_func='CFAttributedStringGetTypeID' name='CFMutableAttributedStringRef' type='^{__CFAttributedString=}' type64='^{__CFAttributedString=}' />
+  <cftype gettypeid_func='CFAttributedStringGetTypeID' name='CFMutableAttributedStringRef' type='^{__CFAttributedString=}' type64='^{__CFAttributedString=}' tollfree='NSCFAttributedString' />
   <cftype gettypeid_func='CFBagGetTypeID' name='CFMutableBagRef' type='^{__CFBag=}' type64='^{__CFBag=}' />
   <cftype gettypeid_func='CFBitVectorGetTypeID' name='CFMutableBitVectorRef' type='^{__CFBitVector=}' type64='^{__CFBitVector=}' />
   <cftype gettypeid_func='CFCharacterSetGetTypeID' name='CFMutableCharacterSetRef' type='^{__CFCharacterSet=}' type64='^{__CFCharacterSet=}' />
@@ -778,6 +778,7 @@
     <arg type='^{__CFArray=}' />
     <arg type='{_CFRange=ii}' type64='{_CFRange=ii}' />
     <arg function_pointer='true' function_pointer_retained='false' type='^?' type64='^?'>
+      <retval type='v' />
       <arg type='@' />
       <arg type='@' />
     </arg>
@@ -998,6 +999,7 @@
   <function name='CFBagApplyFunction'>
     <arg type='^{__CFBag=}' />
     <arg function_pointer='true' function_pointer_retained='false' type='^?' type64='^?'>
+	    <retval type='v' />
       <arg type='@' />
       <arg type='@' />
     </arg>
@@ -1064,6 +1066,7 @@
   <function name='CFBinaryHeapApplyFunction'>
     <arg type='^{__CFBinaryHeap=}' />
     <arg function_pointer='true' function_pointer_retained='false' type='^?' type64='^?'>
+	    <retval type='v' />
       <arg type='@' />
       <arg type='@' />
     </arg>
@@ -1769,6 +1772,7 @@
   <function name='CFDictionaryApplyFunction'>
     <arg type='^{__CFDictionary=}' />
     <arg function_pointer='true' function_pointer_retained='false' type='^?' type64='^?'>
+	    <retval type='v' />
       <arg type='@' />
       <arg type='@' />
       <arg type='@' />
@@ -2107,6 +2111,7 @@
     <arg type='^{__CFNotificationCenter=}' />
     <arg type='@' type64='@' />
     <arg function_pointer='true' type='^?' type64='^?'>
+      <retval type='v' />
       <arg type='@' />
       <arg type='@' />
       <arg type='@' />
@@ -2627,6 +2632,7 @@
   <function name='CFSetApplyFunction'>
     <arg type='^{__CFSet=}' />
     <arg function_pointer='true' function_pointer_retained='false' type='^?' type64='^?'>
+	    <retval type='v' />
       <arg type='@' />
       <arg type='@' />
     </arg>
@@ -3710,6 +3716,7 @@
     <arg type='^{__CFAllocator=}' />
     <arg type='^{__CFUserNotification=}' />
     <arg function_pointer='true' type='^?' type64='^?'>
+	    <retval type='v' />
       <arg type='^{__CFUserNotification=}' />
       <arg type='i' />
     </arg>

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfarray.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfarray.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfarray.py	Fri Apr 10 08:52:51 2009
@@ -21,6 +21,9 @@
 
     def testCFArrayApplyFunction(self):
         array = CFArrayCreate(None, [1,2,3,4], 4, kCFTypeArrayCallBacks)
+
+        self.failUnlessArgIsFunction(CFArrayApplyFunction, 2, 'v@@', False)
+        self.failUnlessArgHasType(CFArrayApplyFunction, 3, '@')
         
         items = []
         infos = []
@@ -43,6 +46,10 @@
         # This method causes a hard crash, reason unclear.
         array = CFArrayCreate(None, range(20), 20, kCFTypeArrayCallBacks)
 
+        self.failUnlessArgHasType(CFArrayBSearchValues, 2, '@')
+        self.failUnlessArgIsFunction(CFArrayBSearchValues, 3, 'l@@@', False)
+        self.failUnlessArgHasType(CFArrayBSearchValues, 4, '@')
+
         def compare(l, r, context):
             return cmp(l, r)
 
@@ -61,6 +68,9 @@
     def testSortValues(self):
         array = NSMutableArray.arrayWithArray_([4,2,1,3,0,5])
 
+        self.failUnlessArgIsFunction(CFArraySortValues, 2, 'l@@@', False)
+        self.failUnlessArgHasType(CFArraySortValues, 3, '@')
+
         def compare(l, r, context):
             return cmp(l, r)
         CFArraySortValues(array, (0, 6), compare, None)
@@ -113,6 +123,9 @@
         self.failUnless( CFArrayGetLastIndexOfValue(array, (0, 6), 2) == 5 )
         self.failUnless( CFArrayGetLastIndexOfValue(array, (0, 6), u"hello") == kCFNotFound )
 
+        self.failUnlessArgHasType(CFArrayGetFirstIndexOfValue, 2, '@')
+        self.failUnlessArgHasType(CFArrayGetLastIndexOfValue, 2, '@')
+
 
     def testGetting(self):
         array = CFArrayCreate(None, [u"a",2,3,4,4,2], 6, kCFTypeArrayCallBacks)
@@ -122,6 +135,10 @@
         self.failUnless(   CFArrayGetValueAtIndex(array, 0) == u"a"  )
         self.failUnless(   CFArrayGetValueAtIndex(array, 1) == 2  )
 
+
+        self.failUnlessArgHasType(CFArrayGetValues, 2, 'o^@')
+        self.failUnlessArgSizeInArg(CFArrayGetValues, 2, 1)
+
         vals = CFArrayGetValues(array, (0, 3), None)
         self.failUnless( isinstance(vals, tuple) )
         self.failUnless( vals == (u"a", 2, 3) )
@@ -134,6 +151,10 @@
         array = CFArrayCreateMutableCopy(None, 0, array)
 
 
+        self.failUnlessArgHasType(CFArrayAppendValue, 1, '@')
+        self.failUnlessArgHasType(CFArrayInsertValueAtIndex, 2, '@')
+        self.failUnlessArgHasType(CFArraySetValueAtIndex, 2, '@')
+
         CFArrayAppendValue(array, u"foo")
         self.assertEquals(array, [u"a",2,3,4,4,2,u"foo"])
 
@@ -150,6 +171,8 @@
         CFArrayExchangeValuesAtIndices(array, 1,2)
         self.assertEquals(array, [u"a",u"two",4,4,4,2,u"foo"])
 
+        self.failUnlessArgHasType(CFArrayReplaceValues, 2, 'n^@')
+        self.failUnlessArgSizeInArg(CFArrayReplaceValues, 2, 3)
         CFArrayReplaceValues(array, (2,3), (u'a', u'b', u'c', u'd', u'e', u'f'), 6)
         self.assertEquals(array, [u"a",u"two",u'a', u'b', u'c', u'd', u'e', u'f', 2, u'foo'])
 

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfattributedstring.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfattributedstring.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfattributedstring.py	Fri Apr 10 08:52:51 2009
@@ -1,8 +1,12 @@
 from PyObjCTools.TestSupport import *
 from CoreFoundation import *
+from Foundation import NSCFAttributedString
 
 
 class TestAttributedString (TestCase):
+    def testTypes(self):
+        self.failUnless( CFAttributedStringRef is NSCFAttributedString )
+        self.failUnless( CFMutableAttributedStringRef is NSCFAttributedString )
 
     def testTypeID(self):
         v = CFAttributedStringGetTypeID()
@@ -117,13 +121,5 @@
         CFAttributedStringBeginEditing(val)
         CFAttributedStringEndEditing(val)
 
-
-
-
-
-
-
-
-
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbag.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbag.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbag.py	Fri Apr 10 08:52:51 2009
@@ -109,6 +109,20 @@
         CFBagRemoveAllValues(bag)
         self.failUnless( CFBagGetCount(bag) == 0)
 
+    def testFunctions(self):
+        self.failUnlessArgHasType(CFBagGetCountOfValue, 1, '@')
+        self.failUnlessArgHasType(CFBagContainsValue, 1, '@')
+        self.failUnlessArgHasType(CFBagGetValue, 1, '@')
+        self.failUnlessResultHasType(CFBagGetValue, '@')
+        self.failUnlessArgHasType(CFBagGetValueIfPresent, 1, '@')
+        self.failUnlessArgHasType(CFBagGetValueIfPresent, 2, 'o^@')
+        self.failUnlessResultHasType(CFBagGetValueIfPresent, objc._C_NSBOOL)
+        self.failUnlessArgIsFunction(CFBagApplyFunction, 1, 'v@@', False)
+        self.failUnlessArgHasType(CFBagApplyFunction, 2, '@')
+        self.failUnlessArgHasType(CFBagAddValue, 1, '@')
+        self.failUnlessArgHasType(CFBagReplaceValue, 1, '@')
+        self.failUnlessArgHasType(CFBagSetValue, 1, '@')
+        self.failUnlessArgHasType(CFBagRemoveValue, 1, '@')
 
 
 if __name__ == "__main__":

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbase.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbase.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbase.py	Fri Apr 10 08:52:51 2009
@@ -73,8 +73,11 @@
         self.failUnless(isinstance(CFNullGetTypeID(), (int, long)))
 
         self.failUnless(isinstance(kCFNull, CFNullRef))
+        self.failUnlessIsCFType(CFNullRef)
 
     def testCFAllocator(self):
+        self.failUnlessIsCFType(CFAllocatorRef)
+
         self.failUnless(isinstance(CFAllocatorGetTypeID(), (int, long)))
 
         self.failUnless(isinstance(kCFAllocatorDefault, (CFAllocatorRef, type(None))))

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbinaryheap.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbinaryheap.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbinaryheap.py	Fri Apr 10 08:52:51 2009
@@ -3,6 +3,8 @@
 from PyObjCTools.TestSupport import *
 
 class TestCFBinaryHeap (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFBinaryHeapRef)
 
     def testCreation(self):
         heap = CFBinaryHeapCreate(
@@ -100,6 +102,15 @@
         values = CFBinaryHeapGetValues(heap)
         self.failUnless(values == ())
 
+    def testFunctions(self):
+        self.failUnlessArgHasType(CFBinaryHeapGetCountOfValue, 1, '@')
+        self.failUnlessArgHasType(CFBinaryHeapContainsValue, 1, '@')
+        self.failUnlessResultHasType(CFBinaryHeapGetMinimum, '@')
+        self.failUnlessResultHasType(CFBinaryHeapGetMinimumIfPresent, objc._C_NSBOOL)
+        self.failUnlessArgHasType(CFBinaryHeapGetMinimumIfPresent, 1, 'o^@')
+        self.failUnlessArgIsFunction(CFBinaryHeapApplyFunction, 1, 'v@@', False)
+        self.failUnlessArgHasType(CFBinaryHeapApplyFunction, 2, '@')
+        self.failUnlessArgHasType(CFBinaryHeapAddValue, 1, '@')
 
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbundle.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbundle.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfbundle.py	Fri Apr 10 08:52:51 2009
@@ -4,6 +4,9 @@
 
 class TestCFBundle (TestCase):
 
+    def testTypes(self):
+        self.failUnlessIsCFType(CFBundleRef)
+
     def testMainBundle(self):
         bundle = CFBundleGetMainBundle()
         self.failUnless( isinstance(bundle, CFBundleRef) )
@@ -120,10 +123,10 @@
         self.failUnless(isinstance(val, unicode))
         self.failIf(val == "value")
 
-
-        # TODO CFCopyLocalizedStringFromTable
-        # TODO CFCopyLocalizedStringFromTableInBundle
-        # TODO CFCopyLocalizedStringWithDefaultValue
+        CFCopyLocalizedString("python", "error")
+        CFCopyLocalizedStringFromTable("pyobjc", "python", "error")
+        CFCopyLocalizedStringFromTableInBundle("pyobjc", "python", bundle, "comment")
+        CFCopyLocalizedStringWithDefaultValue("pyobjc", "python", bundle, "default", "comment")
 
         array = CFBundleCopyBundleLocalizations(bundle)
         self.failIf(array is None)
@@ -151,6 +154,7 @@
         self.failIf(array is None)
         self.failUnless(isinstance(array, CFArrayRef))
 
+        self.failUnlessArgIsOut(CFBundlePreflightExecutable, 1)
         ok, error = CFBundlePreflightExecutable(bundle, None)
         self.failUnless((ok is True) or (ok is False))
         if ok:
@@ -158,6 +162,7 @@
         else:
             self.failUnless(isinstance(error, CFErrorRef))
 
+        self.failUnlessArgIsOut(CFBundleLoadExecutableAndReturnError, 1)
         ok, error = CFBundleLoadExecutableAndReturnError(bundle, None)
         self.failUnless((ok is True) or (ok is False))
         if ok:

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfcalendar.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfcalendar.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfcalendar.py	Fri Apr 10 08:52:51 2009
@@ -2,10 +2,13 @@
 from CoreFoundation import *
 
 class TestCFCalendarVariadic (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFCalendarRef)
+
     def testCFCalendarComposeAbsoluteTime(self):
         calendar = CFCalendarCreateWithIdentifier(
                 None, kCFGregorianCalendar)
-        self.assert_(calendar is not None)
+        self.failUnlessIsInstance(calendar, CFCalendarRef)
 
         success, at = CFCalendarComposeAbsoluteTime(
                 calendar, None, '')
@@ -20,7 +23,7 @@
     def testCFCalendarAddComponents(self):
         calendar = CFCalendarCreateWithIdentifier(
                 None, kCFGregorianCalendar)
-        self.assert_(calendar is not None)
+        self.failUnlessIsInstance(calendar, CFCalendarRef)
 
         success, at = CFCalendarComposeAbsoluteTime(
                 calendar, None, "yMdHms", 1965, 1, 6, 14, 10, 0)

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfcharacterset.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfcharacterset.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfcharacterset.py	Fri Apr 10 08:52:51 2009
@@ -3,6 +3,10 @@
 
 
 class TestCharacterSet (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFCharacterSetRef)
+        self.failUnlessIsCFType(CFMutableCharacterSetRef)
+
     def testTypeId(self):
         v = CFCharacterSetGetTypeID()
         self.failUnless(isinstance(v, (int, long)))
@@ -55,9 +59,6 @@
 
 
     def testInspectLongUnicode(self):
-        # FIXME: These results aren't quite what I want to have, metadata doesn't
-        # allow a better interface at the moment :-(
-
         letters = CFCharacterSetGetPredefined(kCFCharacterSetLetter)
         digits = CFCharacterSetGetPredefined(kCFCharacterSetDecimalDigit)
         self.failUnless(CFCharacterSetIsLongCharacterMember(letters, ord(u'A')))    
@@ -94,25 +95,25 @@
         self.failIf(CFCharacterSetIsCharacterMember(set, u"e"))
 
 
-
-
     def testConstants(self):
-        self.failUnless(kCFCharacterSetControl == 1)
-        self.failUnless(kCFCharacterSetWhitespace == 2)
-        self.failUnless(kCFCharacterSetWhitespaceAndNewline == 3)
-        self.failUnless(kCFCharacterSetDecimalDigit == 4)
-        self.failUnless(kCFCharacterSetLetter == 5)
-        self.failUnless(kCFCharacterSetLowercaseLetter == 6)
-        self.failUnless(kCFCharacterSetUppercaseLetter == 7)
-        self.failUnless(kCFCharacterSetNonBase == 8)
-        self.failUnless(kCFCharacterSetDecomposable == 9)
-        self.failUnless(kCFCharacterSetAlphaNumeric == 10)
-        self.failUnless(kCFCharacterSetPunctuation == 11)
-        self.failUnless(kCFCharacterSetCapitalizedLetter == 13)
-        self.failUnless(kCFCharacterSetSymbol == 14)
-        self.failUnless(kCFCharacterSetNewline == 15)
-        self.failUnless(kCFCharacterSetIllegal == 12)
-
+        self.failUnlessEqual(kCFCharacterSetControl, 1)
+        self.failUnlessEqual(kCFCharacterSetWhitespace, 2)
+        self.failUnlessEqual(kCFCharacterSetWhitespaceAndNewline, 3)
+        self.failUnlessEqual(kCFCharacterSetDecimalDigit, 4)
+        self.failUnlessEqual(kCFCharacterSetLetter, 5)
+        self.failUnlessEqual(kCFCharacterSetLowercaseLetter, 6)
+        self.failUnlessEqual(kCFCharacterSetUppercaseLetter, 7)
+        self.failUnlessEqual(kCFCharacterSetNonBase, 8)
+        self.failUnlessEqual(kCFCharacterSetDecomposable, 9)
+        self.failUnlessEqual(kCFCharacterSetAlphaNumeric, 10)
+        self.failUnlessEqual(kCFCharacterSetPunctuation, 11)
+        self.failUnlessEqual(kCFCharacterSetCapitalizedLetter, 13)
+        self.failUnlessEqual(kCFCharacterSetSymbol, 14)
+        self.failUnlessEqual(kCFCharacterSetIllegal, 12)
+
+    @min_os_level('10.5')
+    def testConstants10_5(self):
+        self.failUnlessEqual(kCFCharacterSetNewline, 15)
 
 
 if __name__ == "__main__":

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdata.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdata.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdata.py	Fri Apr 10 08:52:51 2009
@@ -1,17 +1,25 @@
 from PyObjCTools.TestSupport import *
 from CoreFoundation import *
+from Foundation import NSCFData
 
 
 class TestData (TestCase):
+    def testTypes(self):
+        self.failUnless(CFDataRef is NSCFData)
+
     def testTypeID(self):
         v = CFDataGetTypeID()
         self.failUnless(v, (int, long))
 
     def testCreation(self):
+        self.failUnlessArgHasType(CFDataCreate, 1,  'n^v')
+        self.failUnlessArgSizeInArg(CFDataCreate, 1, 2)
         data = CFDataCreate(None, "hello", 5)
         self.failUnless(isinstance(data, CFDataRef))
 
         bytes = buffer("hello world")
+        self.failUnlessArgHasType(CFDataCreateWithBytesNoCopy, 1, 'n^v')
+        self.failUnlessArgSizeInArg(CFDataCreateWithBytesNoCopy, 1, 2)
         data = CFDataCreateWithBytesNoCopy(None, bytes, 5, kCFAllocatorNull)
         self.failUnless(isinstance(data, CFDataRef))
         del data
@@ -46,6 +54,8 @@
         v = CFDataGetBytePtr(mutableData)
         self.failUnless(v[0] == 'p')
 
+        self.failUnlessArgHasType(CFDataGetBytes, 2, 'o^v')
+        self.failUnlessArgSizeInArg(CFDataGetBytes, 2, 1)
         bytes = CFDataGetBytes(data, (1,3), None)
         self.assertEquals(bytes, 'hello'[1:4])
 
@@ -56,10 +66,14 @@
         self.failUnless(CFDataGetLength(mutableData) == 20)
         CFDataSetLength(mutableData, 3)
 
+        self.failUnlessArgHasType(CFDataAppendBytes, 1, 'n^v')
+        self.failUnlessArgSizeInArg(CFDataAppendBytes, 1, 2)
         CFDataAppendBytes(mutableData, " world", 6)
         self.failUnless(CFDataGetLength(mutableData) == 9)
         self.assertEquals(CFDataGetBytes(mutableData, (0, 9), None), 'pel world')
 
+        self.failUnlessArgHasType(CFDataReplaceBytes, 2, 'n^v')
+        self.failUnlessArgSizeInArg(CFDataReplaceBytes, 2, 3)
         CFDataReplaceBytes(mutableData, (0, 3), "hello", 5)
         self.assertEquals(CFDataGetBytes(mutableData, (0, 9), None), 'hello world'[:9])
 

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdate.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdate.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdate.py	Fri Apr 10 08:52:51 2009
@@ -4,6 +4,10 @@
 
 
 class TestDate (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFDateRef)
+        self.failUnlessIsCFType(CFTimeZoneRef)
+
     def testTypeID(self):
         v = CFDateGetTypeID()
         self.failUnless(isinstance(v, (int, long)))
@@ -63,9 +67,9 @@
 
         dt = CFGregorianDate()
         dt.month = 12
-        self.failUnless(CFGregorianDateIsValid(dt, kCFGregorianUnitsMonths))
+        self.failUnless(CFGregorianDateIsValid(dt, kCFGregorianUnitsMonths) is True)
         dt.month = 99
-        self.failIf(CFGregorianDateIsValid(dt, kCFGregorianUnitsMonths))
+        self.failUnless(CFGregorianDateIsValid(dt, kCFGregorianUnitsMonths) is False)
 
         tz = CFTimeZoneCopyDefault()
         dt.year = 2008

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdateformatter.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdateformatter.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdateformatter.py	Fri Apr 10 08:52:51 2009
@@ -42,10 +42,17 @@
         self.failUnless( isinstance( kCFDateFormatterShortStandaloneQuarterSymbols, unicode))
         self.failUnless( isinstance( kCFDateFormatterGregorianStartDate, unicode))
 
+    def testTypes(self):
+        self.failUnlessIsCFType(CFDateFormatterRef)
+
     def testInspection(self):
         locale = CFLocaleCopyCurrent()
+        self.failUnlessIsInstance(locale, CFLocaleRef)
+
         date = CFDateCreate(None, CFAbsoluteTimeGetCurrent())
+        self.failUnlessIsInstance(date, CFDateRef)
 
+        self.failUnlessResultIsCFRetained(CFDateFormatterCreate)
         fmt = CFDateFormatterCreate(None, locale, kCFDateFormatterShortStyle, kCFDateFormatterLongStyle) 
         self.failUnless(isinstance(fmt, CFDateFormatterRef))
 
@@ -80,6 +87,7 @@
         self.failUnless(isinstance(rng, CFRange))
         self.failUnless(isinstance(abstime, float))
 
+        self.failUnlessResultIsCFRetained(CFDateFormatterCopyProperty)
         v = CFDateFormatterCopyProperty(fmt, kCFDateFormatterCalendarName)
         self.failUnless(isinstance(v, unicode))
 

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdictionary.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdictionary.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfdictionary.py	Fri Apr 10 08:52:51 2009
@@ -1,9 +1,12 @@
 from CoreFoundation import *
-from Foundation import NSDictionary, NSMutableDictionary
+from Foundation import NSDictionary, NSMutableDictionary, NSCFDictionary
 from PyObjCTools.TestSupport import *
 
 class TestCFDictionary (TestCase):
 
+    def testTypes(self):
+        self.failUnless(CFDictionaryRef is NSCFDictionary)
+
     def testCreation(self):
         dictionary = CFDictionaryCreate(None,
                 ('aap', 'noot', 'mies', 'wim'),
@@ -32,6 +35,8 @@
         def function(key, value, context):
             context.append((key, value))
 
+        self.failUnlessArgIsFunction(CFDictionaryApplyFunction, 1, 'v@@@', False)
+        self.failUnlessArgHasType(CFDictionaryApplyFunction, 2, '@')
         CFDictionaryApplyFunction(dictionary, function, context)
 
         context.sort()
@@ -71,15 +76,19 @@
         self.failUnless(CFDictionaryGetCountOfValue(dct, 42) == 2)
         self.failUnless(CFDictionaryGetCountOfValue(dct, 44) == 0)
 
+        self.failUnlessResultHasType(CFDictionaryContainsKey, objc._C_NSBOOL)
         self.failUnless(CFDictionaryContainsKey(dct, u"key1"))
         self.failIf(CFDictionaryContainsKey(dct, u"key3"))
 
+        self.failUnlessResultHasType(CFDictionaryContainsValue, objc._C_NSBOOL)
         self.failUnless(CFDictionaryContainsValue(dct, 42))
         self.failIf(CFDictionaryContainsValue(dct, u"key3"))
 
         self.failUnless(CFDictionaryGetValue(dct, "key2") == 42)
         self.failUnless(CFDictionaryGetValue(dct, "key3") is None)
 
+        self.failUnlessResultHasType(CFDictionaryGetValueIfPresent, objc._C_NSBOOL)
+        self.failUnlessArgIsOut(CFDictionaryGetValueIfPresent, 2)
         ok, value = CFDictionaryGetValueIfPresent(dct, "key2", None)
         self.failUnless(ok)
         self.failUnless(value == 42)

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cferror.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cferror.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cferror.py	Fri Apr 10 08:52:51 2009
@@ -1,13 +1,19 @@
 from PyObjCTools.TestSupport import *
 from CoreFoundation import *
-from Foundation import NSString
+from Foundation import NSString, NSCFError
 
 
 class TestError (TestCase):
 
+    @min_os_level('10.5')
+    def testTypes(self):
+        self.failUnless(CFErrorRef is NSCFError)
+
+    @min_os_level('10.5')
     def testTypeID(self):
         self.failUnless(isinstance(CFErrorGetTypeID(), (int, long)))
 
+    @min_os_level('10.5')
     def testCreation(self):
         userInfo = {
                 u'foo': u'bar',
@@ -15,6 +21,7 @@
         err = CFErrorCreate(None, kCFErrorDomainPOSIX, 42,  userInfo)
         self.failUnless(isinstance(err, CFErrorRef))
 
+        self.failUnlessResultIsCFRetained(CFErrorCopyUserInfo)
         dct = CFErrorCopyUserInfo(err)
         self.assertEquals(dct, userInfo)
 
@@ -24,17 +31,23 @@
         keys = [ NSString.stringWithString_(v) for v in keys ]
         values = [ NSString.stringWithString_(v) for v in values ]
 
+        self.failUnlessArgHasType(CFErrorCreateWithUserInfoKeysAndValues, 3, 'n^@')
+        self.failUnlessArgSizeInArg(CFErrorCreateWithUserInfoKeysAndValues, 3, 5)
+        self.failUnlessArgHasType(CFErrorCreateWithUserInfoKeysAndValues, 4, 'n^@')
+        self.failUnlessArgSizeInArg(CFErrorCreateWithUserInfoKeysAndValues, 4, 5)
         err = CFErrorCreateWithUserInfoKeysAndValues(None, kCFErrorDomainPOSIX, 42, keys, values, 2)
         self.failUnless(isinstance(err, CFErrorRef))
         dct = CFErrorCopyUserInfo(err)
         self.assertEquals(dct, {u'key1': u'value1', u'key2':u'value2'})
 
+    @min_os_level('10.5')
     def testInspection(self):
         userInfo = {
                 u'foo': u'bar',
                 kCFErrorLocalizedFailureReasonKey: "failure reason",
                 kCFErrorLocalizedRecoverySuggestionKey: 'recovery suggestion',
         }
+        self.failUnlessResultIsCFRetained(CFErrorCreate)
         err = CFErrorCreate(None, kCFErrorDomainPOSIX, 42,  userInfo)
         self.failUnless(isinstance(err, CFErrorRef))
 
@@ -44,18 +57,20 @@
         code = CFErrorGetCode(err)
         self.assertEquals(code, 42)
 
+        self.failUnlessResultIsCFRetained(CFErrorCopyDescription)
         v = CFErrorCopyDescription(err)
         self.assertEquals(v, u'Operation could not be completed. failure reason')
 
+        self.failUnlessResultIsCFRetained(CFErrorCopyFailureReason)
         v = CFErrorCopyFailureReason(err)
         self.assertEquals(v, u'failure reason')
 
+        self.failUnlessResultIsCFRetained(CFErrorCopyRecoverySuggestion)
         v = CFErrorCopyRecoverySuggestion(err)
         self.assertEquals(v, u'recovery suggestion')
 
-    
-
 
+    @min_os_level('10.5')
     def testConstants(self):
         self.failUnless(isinstance(kCFErrorDomainPOSIX, unicode))
         self.failUnless(isinstance(kCFErrorDomainOSStatus, unicode))

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cffiledescriptor.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cffiledescriptor.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cffiledescriptor.py	Fri Apr 10 08:52:51 2009
@@ -7,6 +7,9 @@
 
 
 class TestFileDescriptor (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFFileDescriptorRef)
+
     def testTypeID(self):
         self.failUnless(isinstance(CFFileDescriptorGetTypeID(), (int, long)))
 
@@ -39,6 +42,8 @@
         CFFileDescriptorInvalidate(fd)
         self.failIf(CFFileDescriptorIsValid(fd))
 
+        self.failUnlessResultIsBOOL(CFFileDescriptorIsValid)
+
 
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cflocale.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cflocale.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cflocale.py	Fri Apr 10 08:52:51 2009
@@ -3,6 +3,8 @@
 
 
 class TestLocale (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFLocaleRef)
 
     def testGetTypeID(self):
         self.failUnless(isinstance(CFLocaleGetTypeID(), (int, long)))
@@ -27,11 +29,7 @@
         codes = CFLocaleCopyISOCurrencyCodes()
         self.failUnless(isinstance(codes, CFArrayRef))
 
-        codes = CFLocaleCopyCommonISOCurrencyCodes()
-        self.failUnless(isinstance(codes, CFArrayRef))
 
-        codes = CFLocaleCopyPreferredLanguages()
-        self.failUnless(isinstance(codes, CFArrayRef))
 
         val = CFLocaleCreateCanonicalLanguageIdentifierFromString(None, "de_DE")
         self.failUnless(isinstance(val, unicode))
@@ -71,7 +69,6 @@
 
     def testConstants(self):
 
-        self.failUnless(isinstance( kCFLocaleCurrentLocaleDidChangeNotification, unicode))
         self.failUnless(isinstance( kCFLocaleIdentifier, unicode))
         self.failUnless(isinstance( kCFLocaleLanguageCode, unicode))
         self.failUnless(isinstance( kCFLocaleCountryCode, unicode))
@@ -95,6 +92,17 @@
         self.failUnless(isinstance( kCFIslamicCivilCalendar, unicode))
         self.failUnless(isinstance( kCFJapaneseCalendar, unicode))
 
+    @min_os_level('10.5')
+    def testFunctions10_5(self):
+        codes = CFLocaleCopyCommonISOCurrencyCodes()
+        self.failUnless(isinstance(codes, CFArrayRef))
+
+        codes = CFLocaleCopyPreferredLanguages()
+        self.failUnless(isinstance(codes, CFArrayRef))
+
+    @min_os_level('10.5')
+    def testConstants10_5(self):
+        self.failUnless(isinstance( kCFLocaleCurrentLocaleDidChangeNotification, unicode))
 
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfmachport.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfmachport.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfmachport.py	Fri Apr 10 08:52:51 2009
@@ -6,6 +6,9 @@
 
 
 class TestMachPort (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFMachPortRef)
+
     def testTypeID(self):
         self.failUnless(isinstance(CFMachPortGetTypeID(), (int, long)))
 

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfmessageport.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfmessageport.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfmessageport.py	Fri Apr 10 08:52:51 2009
@@ -3,6 +3,9 @@
 
 
 class TestMessagePort (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFMessagePortRef)
+
     def testConstants(self):
         self.failUnless(kCFMessagePortSuccess == 0)
         self.failUnless(kCFMessagePortSendTimeout == -1)
@@ -32,6 +35,7 @@
         port = CFMessagePortCreateRemote(None, u"name")
         self.failUnless(isinstance(port, CFMessagePortRef))
 
+        self.failUnlessResultIsBOOL(CFMessagePortIsRemote)
         self.failUnless(CFMessagePortIsRemote(port))
         self.failUnless(CFMessagePortGetName(port), u"name")
 
@@ -62,24 +66,27 @@
         rls = CFMessagePortCreateRunLoopSource(None, port, 0)
         self.failUnless(isinstance(rls, CFRunLoopSourceRef))
 
+        self.failUnlessResultIsBOOL(CFMessagePortIsValid)
         self.failUnless(CFMessagePortIsValid(port))
         CFMessagePortInvalidate(port)
         self.failIf(CFMessagePortIsValid(port))
         self.failUnless(didInvalidate)
 
-    def dont_testSending(self):
+    def testSending(self):
         context = []
         def callout(port, messageid, data, info):
             print "callout"
             info.append((port, messageid, data))
             return buffer("hello world")
 
-        port, shouldFree = CFMessagePortCreateLocal(None, u"name", callout, context, None)
-
-        err, data = CFMessagePortSendRequest(port, 42, buffer("hello moon"), 1.0, 1.0, kCFRunLoopDefaultMode, None)
-        print err, data
-
+        port, shouldFree = CFMessagePortCreateLocal(None, u"pyobjc.test", callout, context, None)
+        self.failUnlessIsInstance(port, CFMessagePortRef)
 
+        self.failUnlessArgIsOut(CFMessagePortSendRequest, 6)
+        rls = CFMessagePortCreateRunLoopSource(None, port, 0)
+        err, data = CFMessagePortSendRequest(port, 99, None, 1.0, 1.0, None, None)
+        self.failUnlessEqual(err, 0)
+        self.failUnlessEqual(data, None)
 
 
 if __name__ == "__main__":

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnotificationcenter.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnotificationcenter.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnotificationcenter.py	Fri Apr 10 08:52:51 2009
@@ -4,6 +4,9 @@
 
 class TestNotificationCenter (TestCase):
 
+    def testTypes(self):
+        self.failUnlessIsCFType(CFNotificationCenterRef)
+
     def testTypeID(self):
         self.failUnless(isinstance(CFNotificationCenterGetTypeID(), (int, long)))
 
@@ -26,6 +29,10 @@
         def observe(center, observer, name, object, userInfo):
             notifications.append(( center, observer, name, object, userInfo ))
 
+        self.failUnlessArgHasType(CFNotificationCenterAddObserver, 1, '@')
+        self.failUnlessArgIsFunction(CFNotificationCenterAddObserver, 2, 'v@@@@@', True)
+        self.failUnlessArgHasType(CFNotificationCenterAddObserver, 4, '@')
+
         CFNotificationCenterAddObserver(ref, u"object", observe, u"pyobjc.test", ref, CFNotificationSuspensionBehaviorDeliverImmediately)
 
         CFNotificationCenterPostNotificationWithOptions(ref, u"pyobjc.test", ref, {u"name":u"value"},  kCFNotificationPostToAllSessions)
@@ -46,11 +53,18 @@
         self.failUnless(info[3] is ref)
         self.failUnless(info[4] == {u"name2":u"value2"})
 
+        self.failUnlessArgHasType(CFNotificationCenterRemoveObserver, 1, '@')
+        self.failUnlessArgHasType(CFNotificationCenterRemoveObserver, 3, '@')
         CFNotificationCenterRemoveObserver(ref, u"object", u"pyobjc.test", ref)
+
+        self.failUnlessArgHasType(CFNotificationCenterPostNotificationWithOptions, 2, '@') 
         CFNotificationCenterPostNotificationWithOptions(ref, u"pyobjc.test", ref, {u"name":u"value"},  kCFNotificationPostToAllSessions)
         self.failUnless(len(notifications) == 2)
 
         CFNotificationCenterAddObserver(ref, u"object", observe, u"pyobjc.test", ref, CFNotificationSuspensionBehaviorDeliverImmediately)
+
+        self.failUnlessArgHasType(CFNotificationCenterPostNotification, 2, '@')
+        self.failUnlessArgIsBOOL(CFNotificationCenterPostNotification, 4)
         CFNotificationCenterPostNotification(ref, u"pyobjc.test", ref, {u"name2":u"value2"},  True)
         self.failUnless(len(notifications) == 3)
 
@@ -60,12 +74,12 @@
 
 
     def testConstants(self):
-        self.failUnless(CFNotificationSuspensionBehaviorDrop == 1)
-        self.failUnless(CFNotificationSuspensionBehaviorCoalesce == 2)
-        self.failUnless(CFNotificationSuspensionBehaviorHold == 3)
-        self.failUnless(CFNotificationSuspensionBehaviorDeliverImmediately == 4)
-        self.failUnless(kCFNotificationDeliverImmediately == (1 << 0))
-        self.failUnless(kCFNotificationPostToAllSessions == (1 << 1))
+        self.failUnlessEqual(CFNotificationSuspensionBehaviorDrop, 1)
+        self.failUnlessEqual(CFNotificationSuspensionBehaviorCoalesce, 2)
+        self.failUnlessEqual(CFNotificationSuspensionBehaviorHold, 3)
+        self.failUnlessEqual(CFNotificationSuspensionBehaviorDeliverImmediately, 4)
+        self.failUnlessEqual(kCFNotificationDeliverImmediately, 1)
+        self.failUnlessEqual(kCFNotificationPostToAllSessions, 2)
 
 
 if __name__ == "__main__":

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnumber.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnumber.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnumber.py	Fri Apr 10 08:52:51 2009
@@ -85,8 +85,8 @@
     def testBoolean(self):
         self.failUnless(isinstance(CFBooleanGetTypeID(), (int, long)))
 
-        self.failUnless(CFBooleanGetValue(kCFBooleanTrue))
-        self.failIf(CFBooleanGetValue(kCFBooleanFalse))
+        self.failUnless(CFBooleanGetValue(kCFBooleanTrue) is True)
+        self.failUnless(CFBooleanGetValue(kCFBooleanFalse) is False)
         self.failUnless(CFBooleanGetValue(True))
         self.failIf(CFBooleanGetValue(False))
 
@@ -204,8 +204,6 @@
         self.failUnless(r < 0)
 
 
-
-
     def testConstants(self):
         self.failUnless(kCFBooleanTrue is True)
         self.failUnless(kCFBooleanFalse is False)
@@ -233,9 +231,5 @@
         self.failUnless(isinstance(kCFNumberNaN, float))
 
 
-
-
-
-
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnumberformatter.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnumberformatter.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfnumberformatter.py	Fri Apr 10 08:52:51 2009
@@ -3,6 +3,9 @@
 
 
 class TestNumberFormatter (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFNumberFormatterRef)
+
     def testTypeID(self):
         self.failUnless(isinstance(CFNumberFormatterGetTypeID(), (int, long)))
 
@@ -40,9 +43,13 @@
         self.failUnless(isinstance(v, unicode))
 
         CFNumberFormatterSetProperty(fmt, kCFNumberFormatterCurrencyCode, u"HFL")
+
+        self.failUnlessResultIsCFRetained(CFNumberFormatterCopyProperty)
         v = CFNumberFormatterCopyProperty(fmt, kCFNumberFormatterCurrencyCode)
         self.failUnless(v == u"HFL")
 
+        self.failUnlessArgIsOut(CFNumberFormatterGetDecimalInfoForCurrencyCode, 1)
+        self.failUnlessArgIsOut(CFNumberFormatterGetDecimalInfoForCurrencyCode, 2)
         ok, frac, rnd = CFNumberFormatterGetDecimalInfoForCurrencyCode("EUR", None, None)
         self.assertEquals(ok, True)
         self.assertEquals(frac, 2)
@@ -103,6 +110,9 @@
         self.failUnless(isinstance(kCFNumberFormatterNegativeSuffix, unicode))
         self.failUnless(isinstance(kCFNumberFormatterPerMillSymbol, unicode))
         self.failUnless(isinstance(kCFNumberFormatterInternationalCurrencySymbol, unicode))
+
+    @min_os_level('10.5')
+    def testConstants10_5(self):
         self.failUnless(isinstance(kCFNumberFormatterCurrencyGroupingSeparator, unicode))
         self.failUnless(isinstance(kCFNumberFormatterIsLenient, unicode))
         self.failUnless(isinstance(kCFNumberFormatterUseSignificantDigits, unicode))

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfpreferences.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfpreferences.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfpreferences.py	Fri Apr 10 08:52:51 2009
@@ -8,10 +8,13 @@
         v = CFPreferencesCopyAppValue("WindowCloseAction", "com.apple.Terminal")
         self.failUnless(isinstance(v, unicode))
 
+        self.failUnlessResultIsBOOL(CFPreferencesGetAppBooleanValue)
+        self.failUnlessArgHasType(CFPreferencesGetAppBooleanValue, 2, 'o^Z')
         v, valid = CFPreferencesGetAppBooleanValue("AutoFocus", "com.apple.Terminal", None)
         self.failUnless(valid)
         self.failUnless(isinstance(v, bool))
 
+        self.failUnlessArgHasType(CFPreferencesGetAppIntegerValue, 2, 'o^Z')
         v, valid = CFPreferencesGetAppIntegerValue("WindowCloseAction", "com.apple.Terminal", None)
         self.failUnless(valid)
         self.failUnless(isinstance(v, (int, long)))
@@ -19,8 +22,6 @@
         v = CFPreferencesCopyValue("WindowCloseAction", "com.apple.Terminal", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
         self.failUnless(isinstance(v, unicode))
 
-        #self.assertRaises((ValueError, TypeError), CFPreferencesCopyValue, "WindowCloseAction", "com.apple.Terminal", None, kCFPreferencesCurrentHost)
-        #self.assertRaises((ValueError, TypeError), CFPreferencesCopyValue, "WindowCloseAction", "com.apple.Terminal", kCFPreferencesCurrentUser, None)
 
         v = CFPreferencesCopyMultiple(None, "com.apple.Terminal", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
         self.failUnless(isinstance(v, CFDictionaryRef))
@@ -28,6 +29,7 @@
         v = CFPreferencesCopyMultiple([u"AutoFocus", u"WindowCloseAction"], "com.apple.Terminal", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
         self.failUnless(isinstance(v, CFDictionaryRef))
 
+        self.failUnlessResultIsBOOL(CFPreferencesAppValueIsForced)
         v = CFPreferencesAppValueIsForced("AutoFocus", "com.apple.Terminal")
         self.failUnless(v is True or v is False)
 
@@ -77,10 +79,12 @@
         self.failUnless(os.path.exists(prefsFn))
         os.unlink(prefsFn)
 
+        self.failUnlessResultIsCFRetained(CFPreferencesCopyApplicationList)
         apps = CFPreferencesCopyApplicationList(kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
         self.failUnless(isinstance(apps, CFArrayRef))
         self.failUnless(u"com.apple.AddressBook" in apps)
 
+        self.failUnlessResultIsCFRetained(CFPreferencesCopyKeyList)
         keys = CFPreferencesCopyKeyList(u"com.apple.AddressBook", kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
         self.failUnless(isinstance(keys, CFArrayRef))
         self.failUnless(u"ABNameSorting" in keys)

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfpropertylist.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfpropertylist.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfpropertylist.py	Fri Apr 10 08:52:51 2009
@@ -7,6 +7,7 @@
         dta = CFPropertyListCreateXMLData(None, {u"key": 42, u"key2": 1})
         self.failUnless(isinstance(dta, CFDataRef))
 
+        self.failUnlessArgIsOut(CFPropertyListCreateFromXMLData, 3)
         v, err = CFPropertyListCreateFromXMLData(None, dta, 0, None)
         self.failUnless(err is None)
         self.failUnless(isinstance(v, CFDictionaryRef))
@@ -33,6 +34,7 @@
 
         value = {u'key1': 42, u'key2': 1}
 
+        self.failUnlessArgIsOut(CFPropertyListWriteToStream, 3)
         rval, errorString = CFPropertyListWriteToStream(value, stream, 
                 kCFPropertyListXMLFormat_v1_0, None)
         self.failUnless(isinstance(rval, (int, long)))
@@ -53,6 +55,8 @@
         r = CFReadStreamOpen(stream)
         self.failUnless(r)
 
+        self.failUnlessArgIsOut(CFPropertyListCreateFromStream, 4)
+        self.failUnlessArgIsOut(CFPropertyListCreateFromStream, 5)
         res, format, errorString = CFPropertyListCreateFromStream(None, stream, 0, 0, None, None)
         self.assertEquals(format, kCFPropertyListXMLFormat_v1_0)
         self.failUnless(errorString is None)

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfrunloop.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfrunloop.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfrunloop.py	Fri Apr 10 08:52:51 2009
@@ -4,6 +4,12 @@
 
 class TestRunLoop (TestCase):
 
+    def testTypes(self):
+        self.failUnlessIsCFType(CFRunLoopRef)
+        self.failUnlessIsCFType(CFRunLoopSourceRef)
+        self.failUnlessIsCFType(CFRunLoopObserverRef)
+        self.failUnlessIsCFType(CFRunLoopTimerRef)
+
     def testConstants(self):
         self.failUnless(kCFRunLoopRunFinished == 1)
         self.failUnless(kCFRunLoopRunStopped == 2)
@@ -37,6 +43,7 @@
         mode = CFRunLoopCopyCurrentMode(loop)
         self.failUnless(mode is None or isinstance(mode, unicode))
 
+        self.failUnlessResultIsCFRetained(CFRunLoopCopyAllModes)
         allmodes = CFRunLoopCopyAllModes(loop)
         self.failUnless(isinstance(allmodes, CFArrayRef))
         self.failIf(len(allmodes) == 0)
@@ -206,7 +213,7 @@
 
         res = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.5, True)
         self.failUnless(isinstance(res, (int, long)))
-        self.assertEquals(res, kCFRunLoopRunTimedOut)
+        #self.assertEquals(res, kCFRunLoopRunTimedOut)
 
         self.assertEquals(len(state), 0)
 

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfset.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfset.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfset.py	Fri Apr 10 08:52:51 2009
@@ -3,6 +3,9 @@
 
 
 class TestSet (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFSetRef)
+
     def testTypeID(self):
         self.failUnless(isinstance(CFSetGetTypeID(), (int, long)))
 
@@ -31,22 +34,29 @@
         v = CFSetGetCount(st)
         self.failUnless(v == 3)
 
+        self.failUnlessArgHasType(CFSetGetCountOfValue, 1, '@')
         v = CFSetGetCountOfValue(st, u'd')
         self.failUnless(v == 0)
         v = CFSetGetCountOfValue(st, u'b')
         self.failUnless(v == 1)
 
+        self.failUnlessArgHasType(CFSetContainsValue, 1, '@')
         v = CFSetContainsValue(st, u'd')
         self.failUnless(v is False)
         v = CFSetContainsValue(st, u'b')
         self.failUnless(v is True)
 
+        self.failUnlessResultHasType(CFSetGetValue, '@')
+        self.failUnlessArgHasType(CFSetGetValue, 1, '@')
         v = CFSetGetValue(st, u'd')
         self.failUnless(v is None)
 
         v = CFSetGetValue(st, u'b')
         self.failUnless(v == u'b')
 
+        self.failUnlessResultIsBOOL(CFSetGetValueIfPresent)
+        self.failUnlessArgHasType(CFSetGetValueIfPresent, 1, '@')
+        self.failUnlessArgHasType(CFSetGetValueIfPresent, 2, 'o^@')
         present, value = CFSetGetValueIfPresent(st, u'c', None)
         self.failUnless(present is True)
         self.failUnless(value == u'c')
@@ -65,6 +75,8 @@
         def callback(value, context):
             context.append(value)
 
+        self.failUnlessArgIsFunction(CFSetApplyFunction, 1, 'v@@', False)
+        self.failUnlessArgHasType(CFSetApplyFunction, 2, '@')
         CFSetApplyFunction(st, callback, context)
         self.failUnless(len(context) == 3)
         context.sort()
@@ -78,17 +90,25 @@
         self.failUnless(isinstance(st, CFSetRef))
 
         self.failUnless(CFSetGetCount(st) == 3)
+        self.failUnlessArgHasType(CFSetSetValue, 1, '@')
         CFSetSetValue(st, 'c')
         self.failUnless(CFSetGetCount(st) == 3)
         CFSetSetValue(st, 'd')
         self.failUnless(CFSetGetCount(st) == 4)
 
+        self.failUnlessArgHasType(CFSetRemoveValue, 1, '@')
         CFSetRemoveValue(st, 'c')
         self.failUnless(CFSetGetCount(st) == 3)
 
         CFSetRemoveAllValues(st)
         self.failUnless(CFSetGetCount(st) == 0)
 
+        self.failUnlessArgHasType(CFSetAddValue, 1, '@')
+        CFSetAddValue(st, 'd')
+
+        self.failUnlessArgHasType(CFSetReplaceValue, 1, '@')
+        CFSetReplaceValue(st, 'd')
+
 
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfsocket.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfsocket.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfsocket.py	Fri Apr 10 08:52:51 2009
@@ -5,6 +5,9 @@
 
 
 class TestSocket (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFSocketRef)
+
     def testTypeID(self):
         self.failUnless(isinstance(CFSocketGetTypeID(), (int, long)))
 
@@ -108,9 +111,11 @@
         self.assertEquals(e, kCFSocketSuccess)
 
 
+        self.failUnlessResultIsCFRetained(CFSocketCopyPeerAddress)
         addr = CFSocketCopyPeerAddress(sock)
         self.failUnless( isinstance(addr, CFDataRef))
 
+        self.failUnlessResultIsCFRetained(CFSocketCopyAddress)
         addr = CFSocketCopyAddress(sock)
         self.failUnless( isinstance(addr, CFDataRef))
 
@@ -127,6 +132,7 @@
         self.failUnless(ok is True)
 
         CFSocketInvalidate(sock)
+        self.failUnlessResultIsBOOL(CFSocketIsValid)
         ok = CFSocketIsValid(sock)
         self.failUnless(ok is False)
 
@@ -153,6 +159,7 @@
                 callback, data, 1.0)
         self.failUnless(isinstance(sock, CFSocketRef))
 
+        self.failUnlessResultIsCFRetained(CFSocketCreateRunLoopSource)
         src = CFSocketCreateRunLoopSource(None, sock, 0)
         self.failUnless(isinstance(src, CFRunLoopSourceRef))
 

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstream.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstream.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstream.py	Fri Apr 10 08:52:51 2009
@@ -4,6 +4,10 @@
 
 
 class TestStream (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFReadStreamRef)
+        self.failUnlessIsCFType(CFWriteStreamRef)
+
     def testConstants(self):
         self.failUnless(kCFStreamStatusNotOpen == 0)
         self.failUnless(kCFStreamStatusOpening == 1)
@@ -47,6 +51,8 @@
 
     def testReadStream(self):
         strval = "hello world"
+        self.failUnlessArgHasType(CFReadStreamCreateWithBytesNoCopy, 1, 'n^v')
+        self.failUnlessArgSizeInArg(CFReadStreamCreateWithBytesNoCopy, 1, 2)
         stream = CFReadStreamCreateWithBytesNoCopy(None,
                 strval, len(strval), kCFAllocatorNull)
         self.failUnless(isinstance(stream, CFReadStreamRef))
@@ -55,6 +61,7 @@
         self.assertEquals(r, -1)
         self.assertEquals(buf, '')
 
+        self.failUnlessResultIsCFRetained(CFReadStreamCopyError)
         err  = CFReadStreamCopyError(stream)
         self.failUnless(err is None or isinstance(err, CFErrorRef))
 
@@ -62,6 +69,7 @@
         self.failUnless(isinstance(status, (int, long)))
         self.assertEquals(status, kCFStreamStatusNotOpen)
 
+        self.failUnlessResultIsBOOL(CFReadStreamOpen)
         r = CFReadStreamOpen(stream)
         self.failUnless(r is True)
 
@@ -69,9 +77,13 @@
         self.failUnless(isinstance(status, (int, long)))
         self.assertEquals(status, kCFStreamStatusOpen)
 
+        self.failUnlessResultIsBOOL(CFReadStreamHasBytesAvailable)
         r = CFReadStreamHasBytesAvailable(stream)
         self.failUnless(r is True)
 
+        self.failUnlessArgHasType(CFReadStreamRead, 1, 'o^v')
+        self.failUnlessArgSizeInArg(CFReadStreamRead, 1, 2)
+        self.failUnlessArgSizeInResult(CFReadStreamRead, 1)
         r, buf = CFReadStreamRead(stream, None, 5)
         self.assertEquals(r, 5)
         self.assertEquals(buf, "hello")
@@ -92,6 +104,7 @@
 
         del stream
 
+        self.failUnlessResultIsCFRetained(CFReadStreamCreateWithFile)
         stream = CFReadStreamCreateWithFile(None, 
                     CFURLCreateWithString(None, u"file:///etc/shells", None))
         self.failUnless(isinstance(stream, CFReadStreamRef))
@@ -106,6 +119,9 @@
         self.assertEquals(r, 5)
         self.failUnless(isinstance(buf, str))
 
+        self.failUnlessResultSizeInArg(CFReadStreamGetBuffer, 2)
+        self.failUnlessResultHasType(CFReadStreamGetBuffer, '^v')
+        self.failUnlessArgIsOut(CFReadStreamGetBuffer, 2)
         buf, numBytes = CFReadStreamGetBuffer(stream, 20, None)
         if buf is objc.NULL:
             self.assertEquals(numBytes, 0)
@@ -131,9 +147,13 @@
         import array
         a = array.array('c', " "*20)
 
+        # XXX: cannot express the actual type as metadata :-(
+        self.failUnlessArgHasType(CFWriteStreamCreateWithBuffer, 1, 'n^v')
+        self.failUnlessArgSizeInArg(CFWriteStreamCreateWithBuffer, 1, 2)
         stream = CFWriteStreamCreateWithBuffer(None, a, 20)
         self.failUnless(isinstance(stream, CFWriteStreamRef))
 
+        self.failUnlessResultIsBOOL(CFWriteStreamOpen)
         r = CFWriteStreamOpen(stream)
         self.failUnless(r is True)
 
@@ -141,9 +161,12 @@
         self.failUnless(isinstance(status, (int, long)))
         self.assertEquals(status, kCFStreamStatusOpen)
 
+        self.failUnlessResultIsBOOL(CFWriteStreamCanAcceptBytes)
         b = CFWriteStreamCanAcceptBytes(stream)
         self.failUnless(b is True)
 
+        self.failUnlessArgHasType(CFWriteStreamWrite, 1, 'n^v')
+        self.failUnlessArgSizeInArg(CFWriteStreamWrite, 1, 2)
         n = CFWriteStreamWrite(stream, "0123456789ABCDE", 15)
         self.assertEquals(n, 15)
 
@@ -171,6 +194,7 @@
         del stream
 
 
+        self.failUnlessResultIsCFRetained(CFWriteStreamCreateWithAllocatedBuffers)
         stream = CFWriteStreamCreateWithAllocatedBuffers(None, None)
         self.failUnless(isinstance(stream, CFWriteStreamRef))
 
@@ -180,6 +204,7 @@
         n = CFWriteStreamWrite(stream, "0123456789ABCDE", 15)
         self.assertEquals(n, 15)
 
+        self.failUnlessResultIsCFRetained(CFWriteStreamCopyProperty)
         buf = CFWriteStreamCopyProperty(stream, kCFStreamPropertyDataWritten)
         self.failUnless(isinstance(buf, CFDataRef))
         buf = CFDataGetBytes(buf, (0, CFDataGetLength(buf)), None)
@@ -204,9 +229,11 @@
         n = CFWriteStreamWrite(stream, "0123456789ABCDE", 15)
         self.assertEquals(n, 15)
 
+        self.failUnlessResultIsCFRetained(CFReadStreamCopyProperty)
         val = CFReadStreamCopyProperty(stream, kCFStreamPropertyFileCurrentOffset)
         self.assertEquals(val, 15)
 
+        self.failUnlessResultIsBOOL(CFReadStreamSetProperty)
         r = CFReadStreamSetProperty(stream, kCFStreamPropertyFileCurrentOffset, 10)
         self.failUnless(r is True)
         val = CFReadStreamCopyProperty(stream, kCFStreamPropertyFileCurrentOffset)
@@ -217,11 +244,17 @@
         self.failUnless(isinstance(status, (int, long)))
         self.assertEquals(status, kCFStreamStatusClosed)
 
+        self.failUnlessResultIsBOOL(CFWriteStreamSetProperty)
+        CFWriteStreamSetProperty(stream, kCFStreamPropertyFileCurrentOffset, 0)
+
         data = open('/tmp/pyobjc.test.txt', 'rb').read()
         self.assertEquals(data, '0123456789ABCDE')
         os.unlink('/tmp/pyobjc.test.txt')
 
     def testStreamPair(self):
+
+        self.failUnlessArgIsOut(CFStreamCreateBoundPair, 1)
+        self.failUnlessArgIsOut(CFStreamCreateBoundPair, 2)
         readStream, writeStream = CFStreamCreateBoundPair(None, None, None, 1024*1024)
         self.failUnless(isinstance(readStream, CFReadStreamRef))
         self.failUnless(isinstance(writeStream, CFWriteStreamRef))
@@ -241,6 +274,8 @@
         sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
         sd.connect(('www.apple.com', 80))
 
+        self.failUnlessArgIsOut(CFStreamCreatePairWithSocket, 2)
+        self.failUnlessArgIsOut(CFStreamCreatePairWithSocket, 3)
         readStream, writeStream = CFStreamCreatePairWithSocket(None,
                 sd.fileno(), None, None)
 
@@ -254,6 +289,8 @@
 
         del readStream, writeStream, sd
 
+        self.failUnlessArgIsOut(CFStreamCreatePairWithSocketToHost, 3)
+        self.failUnlessArgIsOut(CFStreamCreatePairWithSocketToHost, 4)
         readStream, writeStream = CFStreamCreatePairWithSocketToHost(None,
                 "www.apple.com", 80, None, None)
 
@@ -282,9 +319,12 @@
                 protocol=0,
                 address=buffer(sockaddr))
 
+        self.failUnlessArgIsOut(CFStreamCreatePairWithPeerSocketSignature, 2)
+        self.failUnlessArgIsOut(CFStreamCreatePairWithPeerSocketSignature, 3)
         readStream, writeStream = CFStreamCreatePairWithPeerSocketSignature(
                 None, signature, None, None)
 
+        self.failUnlessResultIsCFRetained(CFWriteStreamCopyError)
         status = CFReadStreamGetStatus(readStream)
         self.failUnless(isinstance(status, (int, long)))
         self.assertEquals(status, kCFStreamStatusNotOpen)
@@ -358,13 +398,13 @@
                 callback, data)
         self.failUnless(ok)
 
-        CFReadStreamScheduleWithRunLoop(writeStream, rl, kCFRunLoopDefaultMode)
+        CFWriteStreamScheduleWithRunLoop(writeStream, rl, kCFRunLoopDefaultMode)
         try:
             CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0, True)
             CFRunLoopWakeUp(rl)
         finally:
-            CFReadStreamClose(writeStream)
-            CFReadStreamUnscheduleFromRunLoop(writeStream, rl, kCFRunLoopDefaultMode)
+            CFWriteStreamClose(writeStream)
+            CFWriteStreamUnscheduleFromRunLoop(writeStream, rl, kCFRunLoopDefaultMode)
             ok = CFWriteStreamSetClient(writeStream,
                 kCFStreamEventCanAcceptBytes | kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered,
                 callback, objc.NULL)

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstring.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstring.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstring.py	Fri Apr 10 08:52:51 2009
@@ -2,9 +2,13 @@
 import array
 from CoreFoundation import *
 import CoreFoundation
+from Foundation import NSCFString
 
 
 class TestString (TestCase):
+    def testType(self):
+        self.failUnless(CFStringRef is NSCFString)
+
     def testTypeID(self):
         v = CFStringGetTypeID()
         self.failUnless(isinstance(v, (int, long)))

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstringtokenizer.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstringtokenizer.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfstringtokenizer.py	Fri Apr 10 08:52:51 2009
@@ -3,6 +3,9 @@
 
 
 class TestStringTokenizer (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFStringTokenizerRef)
+
     def testFunctions(self):
         s = u"Spring eens over een boom"
         v = CFStringTokenizerCopyBestStringLanguage(s, (0, len(s)))
@@ -11,6 +14,7 @@
         v = CFStringTokenizerGetTypeID()
         self.failUnless(isinstance(v, (int, long)))
 
+        self.failUnlessResultIsCFRetained(CFStringTokenizerCreate)
         tok = CFStringTokenizerCreate(
                 None, s, (0, len(s)), kCFStringTokenizerUnitWord, 
                 CFLocaleCopyCurrent())
@@ -28,6 +32,7 @@
         v = CFStringTokenizerGetCurrentTokenRange(tok)
         self.assertEquals(v, CFRange(7, 4))
 
+        self.failUnlessResultIsCFRetained(CFStringTokenizerCopyCurrentTokenAttribute)
         v = CFStringTokenizerCopyCurrentTokenAttribute(tok, kCFStringTokenizerAttributeLanguage)
         self.failUnless(v is None)
 

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cftimezone.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cftimezone.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cftimezone.py	Fri Apr 10 08:52:51 2009
@@ -5,6 +5,9 @@
 
 
 class TestTimeZone (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFTimeZoneRef)
+
     def testTypeID(self):
         id = CFTimeZoneGetTypeID()
         self.failUnless(isinstance(id, (int, long)))
@@ -22,6 +25,7 @@
         self.failUnless( isinstance(zone, CFTimeZoneRef) )
 
     def testNames(self):
+        self.failUnlessResultIsCFRetained(CFTimeZoneCopyKnownNames)
         array = CFTimeZoneCopyKnownNames()
         self.failUnless( isinstance(array, CFArrayRef) )
 
@@ -37,13 +41,15 @@
             self.failUnless( isinstance(key, unicode) )
             self.failUnless( isinstance(value, unicode) )
 
-        #newmap = NSDictionary.dictionaryWithDictionary_({
-                #NSString.stringWithString_('AAA'):
-                    #NSString.stringWithString_('Europe/Amsterdam')})
 
-        newmap = NSMutableDictionary.dictionaryWithDictionary_(map)
+    @min_os_level('10.6')
+    def testAbbrievationDictSetting(self):
+        # Setting the dictionary is technically also possible
+        # on 10.5, but the code below causes a crash, even when
+        # rewritten als plan Objective-C.
+        map = CFTimeZoneCopyAbbreviationDictionary()
+        newmap = map.mutableCopy()
         newmap[u'AAA'] = u'Europe/Amsterdam'
-        newmap = newmap.copy()
 
         v = CFTimeZoneSetAbbreviationDictionary(newmap)
         self.failUnless(v is None)
@@ -62,6 +68,7 @@
         zone = CFTimeZoneCreate(None, u"Europe/Amsterdam", data)
         self.failUnless(isinstance(zone, CFTimeZoneRef))
 
+        self.failUnlessResultIsCFRetained(CFTimeZoneCreateWithTimeIntervalFromGMT)
         zone = CFTimeZoneCreateWithTimeIntervalFromGMT(None, 3600)
         self.failUnless(isinstance(zone, CFTimeZoneRef))
 
@@ -102,7 +109,7 @@
 
         r = CFTimeZoneIsDaylightSavingTime(zone, 
                 CFGregorianDateGetAbsoluteTime(dt, zone))
-        self.failUnless(r is False)
+        self.failUnless(r in (False, True))
 
         offset = CFTimeZoneGetDaylightSavingTimeOffset(zone, 
                 CFGregorianDateGetAbsoluteTime(dt, zone))
@@ -127,8 +134,5 @@
         self.failUnless( isinstance(kCFTimeZoneSystemTimeZoneDidChangeNotification, unicode) )
 
 
-
-
-
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cftree.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cftree.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cftree.py	Fri Apr 10 08:52:51 2009
@@ -2,6 +2,9 @@
 from PyObjCTools.TestSupport import *
 
 class TestCFTree (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFTreeRef)
+
     def testCreation(self):
         context = object()
         tree = CFTreeCreate(None, context)

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfurl.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfurl.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfurl.py	Fri Apr 10 08:52:51 2009
@@ -2,9 +2,13 @@
 import array
 from CoreFoundation import *
 import os
+from Foundation import NSURL
 
 
 class TestURL (TestCase):
+    def testTypes(self):
+        self.failUnless(CFURLRef is NSURL)
+
     def testTypeID(self):
         val = CFURLGetTypeID()
         self.failUnless( isinstance(val, (int, long)) )
@@ -60,6 +64,8 @@
         url = u"http://www.omroep.nl/sport/"
         baseref = CFURLCreateWithString(None, url, None)
 
+        self.failUnlessArgHasType(CFURLCreateAbsoluteURLWithBytes, 1, 'n^v')
+        self.failUnlessArgSizeInArg(CFURLCreateAbsoluteURLWithBytes, 1, 2)
         ref = CFURLCreateAbsoluteURLWithBytes(None, "socker", len("socker"), kCFStringEncodingUTF8, baseref, True)
         self.failUnless( isinstance(ref, CFURLRef) )
 
@@ -105,6 +111,8 @@
         self.failIf(CFURLHasDirectoryPath(url))
 
         p = os.path.expanduser('~')
+        self.failUnlessArgHasType(CFURLCreateFromFileSystemRepresentation, 1, 'n^t')
+        self.failUnlessArgIsNullTerminated(CFURLCreateFromFileSystemRepresentation, 1)
         url = CFURLCreateFromFileSystemRepresentation(None,
                 p, len(p), True)
         self.failUnless( isinstance(url, CFURLRef))
@@ -116,6 +124,7 @@
                 u"/tmp", kCFURLPOSIXPathStyle, True)
         self.failUnless( isinstance(base, CFURLRef) )
 
+        self.failUnlessArgIsBOOL(CFURLCreateWithFileSystemPathRelativeToBase, 3)
         url = CFURLCreateWithFileSystemPathRelativeToBase(None,
                 u"filename", kCFURLPOSIXPathStyle, True, base)
         self.failUnless( isinstance(url, CFURLRef) )
@@ -124,6 +133,7 @@
         self.assertEquals(strval, u"filename/")
 
 
+        self.failUnlessArgIsBOOL(CFURLCreateFromFileSystemRepresentationRelativeToBase, 3)
         url = CFURLCreateFromFileSystemRepresentationRelativeToBase(None,
                 "filename2", 9, False, base)
         self.failUnless( isinstance(url, CFURLRef) )

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfurlaccess.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfurlaccess.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfurlaccess.py	Fri Apr 10 08:52:51 2009
@@ -28,10 +28,15 @@
     def testFunctions(self):
         url = CFURLCreateWithFileSystemPath(None, __file__, kCFURLPOSIXPathStyle, False)
 
+        self.failUnlessArgIsOut(CFURLCreatePropertyFromResource, 3)
         val, errorCode = CFURLCreatePropertyFromResource(None, url, kCFURLFileExists, None)
         self.failUnless(isinstance(errorCode, (int, long)))
         self.failUnless(val is True)
 
+        self.failUnlessResultIsBOOL(CFURLCreateDataAndPropertiesFromResource)
+        self.failUnlessArgIsOut(CFURLCreateDataAndPropertiesFromResource, 2)
+        self.failUnlessArgIsOut(CFURLCreateDataAndPropertiesFromResource, 3)
+        self.failUnlessArgIsOut(CFURLCreateDataAndPropertiesFromResource, 5)
         ok, data, properties, errorCode = CFURLCreateDataAndPropertiesFromResource(
                 None, url, None, None, None, None)
         self.failUnless(ok)
@@ -40,6 +45,8 @@
         self.failUnless(isinstance(errorCode, (int, long)))
         self.failUnless(properties[kCFURLFileExists])
 
+        self.failUnlessResultIsBOOL(CFURLWriteDataAndPropertiesToResource)
+        self.failUnlessArgIsOut(CFURLWriteDataAndPropertiesToResource, 3)
         url = CFURLCreateWithFileSystemPath(None, __file__ + "TEST", kCFURLPOSIXPathStyle, False)
         ok, errorCode = CFURLWriteDataAndPropertiesToResource(
                 url, buffer("foobar"), None, None)
@@ -49,6 +56,8 @@
         data = open(__file__ + "TEST", 'r').read()
         self.failUnless(data == 'foobar')
 
+        self.failUnlessResultIsBOOL(CFURLDestroyResource)
+        self.failUnlessArgIsOut(CFURLDestroyResource, 1)
         ok, errorCode = CFURLDestroyResource(url, None)
         self.failUnless(ok)
         self.failUnless(isinstance(errorCode, (int, long)))

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfusernotification.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfusernotification.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfusernotification.py	Fri Apr 10 08:52:51 2009
@@ -2,6 +2,9 @@
 from CoreFoundation import *
 
 class TestUserNotification (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFUserNotificationRef)
+
     def testTypeID(self):
         id = CFUserNotificationGetTypeID()
         self.failUnless( isinstance(id, (int, long)) )
@@ -15,22 +18,32 @@
                 kCFUserNotificationDefaultButtonTitleKey: "Cancel"
         }
 
+        self.failUnlessArgIsOut(CFUserNotificationCreate, 3)
         ref, error = CFUserNotificationCreate(None,
-                5.0, 0, None, infoDict)
+                1.0, 0, None, infoDict)
         self.failUnless( error == 0 )
         self.failUnless( isinstance(ref, CFUserNotificationRef) )
 
-        #FIXME: need to ensure that this function is called during
-        # the test
+        values = []
         @objc.callbackFor(CFUserNotificationCreateRunLoopSource)
         def callout(notification, flags):
-            print notification, flags
+            values.append((notification, flags))
+
+        self.failUnlessArgIsFunction(CFUserNotificationCreateRunLoopSource, 2, 'v^{__CFUserNotification=}' + objc._C_NSInteger, True)
         rls = CFUserNotificationCreateRunLoopSource(None, ref, callout, 1)
         self.failUnless(isinstance(rls, CFRunLoopSourceRef))
 
         CFRunLoopAddSource(rl, rls, kCFRunLoopDefaultMode)
+        CFRunLoopRunInMode(kCFRunLoopDefaultMode, 2.0, True)
+
+        CFUserNotificationCancel(ref)
         CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0, True)
 
+        self.failUnlessEqual(len(values), 1)
+        self.failUnless(values[0][0] is ref)
+        self.failUnlessIsInstance(values[0][1], (int, long))
+
+        self.failUnlessArgIsOut(CFUserNotificationReceiveResponse, 2)
         error, flags = CFUserNotificationReceiveResponse(ref, 1.0, None)
         self.failUnless(isinstance(error, (int, long)))
         self.failUnless(isinstance(flags, (int, long)))

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfuuid.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfuuid.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfuuid.py	Fri Apr 10 08:52:51 2009
@@ -4,11 +4,16 @@
 
 
 class TestCFUUIDAPI (TestCase):
+    def testTypes(self):
+        self.failUnlessIsCFType(CFUUIDRef)
+
     def testTypeID(self):
         v = CFUUIDGetTypeID()
         self.failUnless(isinstance(v, (int, long)))
 
     def testCreate(self):
+
+        self.failUnlessResultIsCFRetained(CFUUIDCreate)
         uuid = CFUUIDCreate(None)
         self.failIf(uuid is None)
         self.failUnless(isinstance(uuid, CFUUIDRef))
@@ -19,10 +24,12 @@
         self.failIf( m is None )
 
     def testCreateWithBytes(self):
+        self.failUnlessResultIsCFRetained(CFUUIDCreateWithBytes)
         uuid = CFUUIDCreateWithBytes(None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
         self.failIf(uuid is None)
         self.failUnless(isinstance(uuid, CFUUIDRef))
 
+        self.failUnlessResultIsCFRetained(CFUUIDCreateString)
         text = CFUUIDCreateString(None, uuid)
         self.failUnless(text == u'01020304-0506-0708-090A-0B0C0D0E0F10')
 
@@ -30,6 +37,7 @@
         self.assertRaises(ValueError, CFUUIDCreateWithBytes, None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 300, 16)
 
     def testCreateFromString(self):
+        self.failUnlessResultIsCFRetained(CFUUIDCreateFromString)
         uuid1 = CFUUIDCreateFromString(None, u'01020304-0506-0708-090A-0B0C0D0E0F10')
         self.failIf(uuid1 is None)
         self.failUnless(isinstance(uuid1, CFUUIDRef))
@@ -73,6 +81,7 @@
         # CFUUIDGetConstantUUIDWithBytes should not be released.
 
         uuid = CFUUIDGetConstantUUIDWithBytes(None, *range(16))
+        CFRetain(CFUUIDGetConstantUUIDWithBytes) # Ensure the value won't be released.
         self.failIf(uuid is None)
         self.failUnless(isinstance(uuid, CFUUIDRef))
 

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfxmlnode.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfxmlnode.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfxmlnode.py	Fri Apr 10 08:52:51 2009
@@ -5,6 +5,9 @@
 class TestXMLNode (TestCase):
     # NOTE: This doesn't actually test the API
 
+    def testTypes(self):
+        self.failUnlessIsCFType(CFXMLNodeRef)
+
 
     def testConstants(self):
         self.failUnless( kCFXMLNodeCurrentVersion == 1 )
@@ -32,6 +35,8 @@
         self.failUnless( kCFXMLEntityTypeCharacter == 4 )
 
     def testStructs(self):
+        return 
+
         o = CFXMLElementInfo()
         self.failUnless( hasattr(o, 'attributes') )
         self.failUnless( hasattr(o, 'attributeOrder') )
@@ -76,5 +81,16 @@
         o = CFXMLEntityReferenceInfo()
         self.failUnless( hasattr(o, 'entityType') )
 
+    def testFunctions(self):
+        self.failUnlessIsInstance(CFXMLNodeGetTypeID(), (int, long))
+
+        # CFXMLNodeCreate: requires manual binding
+        # CFXMLNodeGetInfoPtr: likewise
+        # Add tests that create all valid types of nodes with there additional info and
+        # try to extract the information.
+
+        self.failUnlessResultIsCFRetained(CFXMLNodeCreateCopy)
+        self.failUnlessResultIsCFRetained(CFXMLTreeCreateWithNode)
+
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfxmlparser.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfxmlparser.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/PyObjCTest/test_cfxmlparser.py	Fri Apr 10 08:52:51 2009
@@ -5,6 +5,9 @@
 class TestXMLParser (TestCase):
     # Note: This doesn't actually test the API
 
+    def testTypes(self):
+        self.failUnlessIsCFType(CFXMLParserRef)
+
     def testTypeID(self):
         self.failUnless(isinstance(CFXMLParserGetTypeID(), (int, long)))
 

Modified: trunk/pyobjc/pyobjc-framework-Cocoa/setup.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Cocoa/setup.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Cocoa/setup.py	Fri Apr 10 08:52:51 2009
@@ -27,7 +27,7 @@
 
 setup(
     name='pyobjc-framework-Cocoa',
-    version='2.2b1',
+    version='2.2b2',
     description = "Wrappers for the Cocoa frameworks on Mac OS X",
     long_description = __doc__,
     author='Ronald Oussoren',
@@ -47,10 +47,10 @@
     },
     zip_safe = False,
 
-    entry_points = {
-        'console_scripts': [
-            "nibclassbuilder = PyObjCTools.NibClassBuilder.commandline"
-        ],
+#    entry_points = {
+#        'console_scripts': [
+#            "nibclassbuilder = PyObjCTools.NibClassBuilder.commandline"
+#        ],
     },
     test_suite='PyObjCTest',
 

------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.