[PyObjC-svn] r2065 - in trunk/pyobjc/pyobjc-framework-Quartz: . Lib/Quartz/CoreGraphics Modules PyObjCTest

[email protected]
Newsgroups gmane.comp.python.pyobjc.cvs
Message-ID <[email protected]>
Author: ronaldoussoren
Date: Sun Mar  1 11:05:47 2009
New Revision: 2065

Log:
Some more tests and bugfixes


Modified:
   trunk/pyobjc/pyobjc-framework-Quartz/Lib/Quartz/CoreGraphics/PyObjC.bridgesupport
   trunk/pyobjc/pyobjc-framework-Quartz/Lib/Quartz/CoreGraphics/__init__.py
   trunk/pyobjc/pyobjc-framework-Quartz/Modules/_callbacks.m
   trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgcontext.py
   trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgdisplayconfiguration.py
   trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgdisplayfade.py
   trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgimage.py
   trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgremoteoperation.py
   trunk/pyobjc/pyobjc-framework-Quartz/setup.py

Modified: trunk/pyobjc/pyobjc-framework-Quartz/Lib/Quartz/CoreGraphics/PyObjC.bridgesupport
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Quartz/Lib/Quartz/CoreGraphics/PyObjC.bridgesupport	(original)
+++ trunk/pyobjc/pyobjc-framework-Quartz/Lib/Quartz/CoreGraphics/PyObjC.bridgesupport	Sun Mar  1 11:05:47 2009
@@ -3026,14 +3026,14 @@
     <arg type='S' />
     <arg type='i' />
   </function>
-  <function name='CGPostMouseEvent' variadic='true'>
+  <function name='CGPostMouseEvent' variadic='true' c_array_length_in_arg='2'>
     <retval type='i' />
     <arg type='{CGPoint=ff}' type64='{CGPoint=ff}' />
     <arg type='i' />
     <arg type='I' />
     <arg type='i' />
   </function>
-  <function name='CGPostScrollWheelEvent' variadic='true'>
+  <function name='CGPostScrollWheelEvent' variadic='true' c_array_length_in_arg='0'>
     <retval type='i' />
     <arg type='I' />
     <arg type='i' />
@@ -3171,7 +3171,12 @@
   <function name='CGRestorePermanentDisplayConfiguration' />
   <function comment='manual wrapper' name='CGScreenRegisterMoveCallback'>
     <retval type='i' />
-    <arg type='^?' type64='^?' />
+    <arg type='^?' type64='^?' function_pointer='true' >
+	    <retval type='v' />
+	    <arg type='I' />
+	    <arg type='I' />
+	    <arg type='^v' />
+    </arg>
     <arg type='^v' type64='^v' />
   </function>
   <function comment='manual wrapper' name='CGScreenUnregisterMoveCallback'>

Modified: trunk/pyobjc/pyobjc-framework-Quartz/Lib/Quartz/CoreGraphics/__init__.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Quartz/Lib/Quartz/CoreGraphics/__init__.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Quartz/Lib/Quartz/CoreGraphics/__init__.py	Sun Mar  1 11:05:47 2009
@@ -60,5 +60,7 @@
 kCGAssistiveTechHighWindowLevel = CGWindowLevelForKey(kCGAssistiveTechHighWindowLevelKey)
 kCGMaximumWindowLevel = CGWindowLevelForKey(kCGMaximumWindowLevelKey)
 
+CGSetLocalEventsFilterDuringSupressionState = CGSetLocalEventsFilterDuringSuppressionState
+
 # Some useful tools
 from Quartz.CoreGraphics._contextmanager import *   

Modified: trunk/pyobjc/pyobjc-framework-Quartz/Modules/_callbacks.m
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Quartz/Modules/_callbacks.m	(original)
+++ trunk/pyobjc/pyobjc-framework-Quartz/Modules/_callbacks.m	Sun Mar  1 11:05:47 2009
@@ -970,8 +970,10 @@
 		if (info->list[i].callback == NULL) {
 			info->list[i].callback = callback;
 			info->list[i].user_info = user_info;
+			info->list[i].real_info = real_info;
 			Py_INCREF(callback);
 			Py_INCREF(user_info);
+			Py_INCREF(real_info);
 			return 0;
 		}
 	}
@@ -983,6 +985,13 @@
 			PyErr_NoMemory();
 			return -1;
 		}
+		info->list[0].callback = callback;
+		info->list[0].user_info = user_info;
+		info->list[0].real_info = real_info;
+		Py_INCREF(callback);
+		Py_INCREF(user_info);
+		Py_INCREF(real_info);
+		info->count = 1;
 	} else {
 		struct callback_struct* tmp;
 
@@ -994,6 +1003,10 @@
 		info->list = tmp;
 		info->list[info->count].callback = callback;
 		info->list[info->count].user_info = user_info;
+		info->list[info->count].real_info = real_info;
+		Py_INCREF(callback);
+		Py_INCREF(user_info);
+		Py_INCREF(real_info);
 		info->count++;
 	}
 	return 0;
@@ -1019,7 +1032,7 @@
 
 		return info->list[i].real_info;
 	}
-	PyErr_SetString(PyExc_ValueError, "Cannot found callback info");
+	PyErr_SetString(PyExc_ValueError, "Cannot find callback info");
 	return NULL;
 }
 
@@ -1095,9 +1108,10 @@
 {
 	PyObject* callback;
 	PyObject* userinfo;
+	CGError err;
 
 
-	if (PyArg_ParseTuple(args, "OO", &callback, &userinfo)) {
+	if (!PyArg_ParseTuple(args, "OO", &callback, &userinfo)) {
 		return NULL;
 	}
 	if (!PyCallable_Check(callback)) {
@@ -1106,13 +1120,15 @@
 	}
 
 	PyObject* real_info = Py_BuildValue("OO", callback, userinfo);
-	
+
+	err = -1;
 	PyObjC_DURING
-		CGDisplayRegisterReconfigurationCallback(
+		err = CGDisplayRegisterReconfigurationCallback(
 			m_CGDisplayReconfigurationCallBack, real_info);
 
 
 	PyObjC_HANDLER
+		err = -1;
 		PyObjCErr_FromObjC(localException);
 
 	PyObjC_ENDHANDLER
@@ -1123,7 +1139,7 @@
 	}
 
 	if (insert_callback_info(&display_reconfig_callback, 
-				callback, userinfo, real_info) < 0) {
+				callback, userinfo, real_info) == -1) {
 		CGDisplayRemoveReconfigurationCallback(
 			m_CGDisplayReconfigurationCallBack,
 			real_info);
@@ -1131,8 +1147,7 @@
 		return NULL;
 	}
 
-	Py_INCREF(Py_None);
-	return Py_None;
+	return PyObjC_ObjCToPython(@encode(CGError), &err);
 }
 
 static PyObject*
@@ -1153,8 +1168,9 @@
 		return NULL;
 	}
 
+	CGError err = -1;
 	PyObjC_DURING
-		CGDisplayRemoveReconfigurationCallback(
+		err = CGDisplayRemoveReconfigurationCallback(
 			m_CGDisplayReconfigurationCallBack,
 			real_info);
 
@@ -1169,8 +1185,7 @@
 
 	remove_callback_info(&display_reconfig_callback, callback, userinfo);
 
-	Py_INCREF(Py_None);
-	return Py_None;
+	return PyObjC_ObjCToPython(@encode(CGError), &err);
 }
 
 /*
@@ -1346,7 +1361,7 @@
 	PyObject* userinfo;
 
 
-	if (PyArg_ParseTuple(args, "OO", &callback, &userinfo)) {
+	if (!PyArg_ParseTuple(args, "OO", &callback, &userinfo)) {
 		return NULL;
 	}
 	if (!PyCallable_Check(callback)) {
@@ -1356,8 +1371,9 @@
 
 	PyObject* real_info = Py_BuildValue("OO", callback, userinfo);
 	
+	CGError err = -1;
 	PyObjC_DURING
-		CGRegisterScreenRefreshCallback(
+		err = CGRegisterScreenRefreshCallback(
 			m_CGScreenRefreshCallback, real_info);
 
 	PyObjC_HANDLER
@@ -1379,8 +1395,7 @@
 		return NULL;
 	}
 
-	Py_INCREF(Py_None);
-	return Py_None;
+	return PyObjC_ObjCToPython(@encode(CGError), &err);
 }
 
 static PyObject*

Modified: trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgcontext.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgcontext.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgcontext.py	Sun Mar  1 11:05:47 2009
@@ -321,8 +321,24 @@
                             kCGPatternTilingConstantSpacing, True, drawPattern)
             self.failUnlessIsInstance(pattern, CGPatternRef)
 
-            CGContextSetFillPattern(context, pattern)
-            CGContextSetStrokePattern(context, pattern)
+            CGContextSetFillColorSpace(context, CGColorSpaceCreatePattern(None))
+            CGContextSetStrokeColorSpace(context, CGColorSpaceCreatePattern(None))
+            CGContextSetFillPattern(context, pattern, (1.0,1.0,1.0,1.0))
+            CGContextSetStrokePattern(context, pattern, (1.0,1.0,1.0,1.0))
+
+            provider = CGDataProviderCreateWithCFData(buffer(
+                            open('/System/Library/CoreServices/DefaultDesktop.jpg', 'rb').read()))
+            image = CGImageCreateWithJPEGDataProvider(provider, None, True, kCGRenderingIntentDefault)
+            self.failUnlessIsInstance(image, CGImageRef)
+
+            CGContextDrawImage(context, ((0, 0), (70, 50)), image)
+            CGContextDrawTiledImage(context, ((0, 0), (10, 10)), image)
+
+            provider = CGDataProviderCreateWithCFData(buffer("1" * 4 * 20 * 10))
+            mask = CGImageMaskCreate(20, 10, 8, 32, 80, provider, None, True)
+            self.failUnlessIsInstance(mask, CGImageRef)
+
+            CGContextClipToMask(context, CGRectMake(0, 0, 50, 90), mask)
 
         finally:
             CGContextEndPage(context)
@@ -331,9 +347,6 @@
                 os.unlink("/tmp/pyobjc.test.pdf")
 
     def testMissing(self):
-        self.fail("CGContextClipToMask")
-        self.fail("CGContextDrawImage")
-        self.fail("CGContextDrawTiledImage")
         self.fail("CGContextShowGlyphsAtPositions")
         self.fail("CGContextShowGlyphs")
         self.fail("CGContextShowGlyphsAtPoint")

Modified: trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgdisplayconfiguration.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgdisplayconfiguration.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgdisplayconfiguration.py	Sun Mar  1 11:05:47 2009
@@ -3,8 +3,148 @@
 from Quartz.CoreGraphics import *
 
 class TestCGDisplayConfiguration (TestCase):
-    def testIncomplete(self):
-        self.fail("Add header tests for <CoreGraphics/CGDisplayConfiguration.h>")
+
+    def testTypes(self):
+        self.failUnlessIsOpaquePointer(CGDisplayConfigRef)
+
+        err, config = CGBeginDisplayConfiguration(None)
+        self.failUnlessEqual(err, 0)
+        self.failUnlessIsInstance(config, CGDisplayConfigRef)
+
+        err = CGConfigureDisplayOrigin(config,
+                CGMainDisplayID(), 0, 0)
+        self.failUnlessEqual(err, 0)
+
+        err = CGConfigureDisplayMode(config,
+                CGMainDisplayID(), CGDisplayAvailableModes(CGMainDisplayID())[0])
+        self.failUnlessEqual(err, 0)
+
+        err = CGConfigureDisplayStereoOperation(config,
+                CGMainDisplayID(), False, False)
+        self.failUnlessEqual(err, 0)
+
+        err = CGConfigureDisplayMirrorOfDisplay(config,
+                CGMainDisplayID(), CGMainDisplayID())
+        self.failUnlessIsInstance(err, (int, long))
+
+        err = CGCancelDisplayConfiguration(config)
+        self.failUnlessEqual(err, 0)
+        config = None
+
+        myInfo = object()
+        info = []
+        def reconfig(display, flags, userInfo):
+            self.failUnlessIsInstance(display, (int, long))
+            self.failUnlessIsInstance(flags, (int, long))
+            self.failUnless(userInfo is myInfo)
+            info.append((display, flags, userInfo))
+
+        try:
+            err, config = CGBeginDisplayConfiguration(None)
+            self.failUnlessEqual(err, 0)
+            self.failUnlessIsInstance(config, CGDisplayConfigRef)
+
+            err = CGConfigureDisplayMode(config,
+                    CGMainDisplayID(), CGDisplayAvailableModes(CGMainDisplayID())[0])
+
+            err = CGDisplayRegisterReconfigurationCallback(reconfig, myInfo)
+            self.failUnlessEqual(err, 0)
+
+            CGCompleteDisplayConfiguration(config, kCGConfigureForAppOnly)
+
+            self.failUnless(len(info) > 0)
+      
+        finally:
+            err = CGDisplayRemoveReconfigurationCallback(reconfig, myInfo)
+            self.failUnlessEqual(err, 0)
+            l = len(info)
+
+            CGRestorePermanentDisplayConfiguration()
+
+            self.failUnlessEqual(len(info), l)
+
+        err = CGDisplaySetStereoOperation(CGMainDisplayID(), False, False, kCGConfigureForAppOnly)
+        self.failUnlessIsInstance(err, (int, long))
+
+        v = CGDisplayIsActive(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+        
+        v = CGDisplayIsAsleep(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayIsOnline(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayIsMain(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayIsBuiltin(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayIsInMirrorSet(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayIsAlwaysInMirrorSet(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayIsInHWMirrorSet(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayMirrorsDisplay(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayIsStereo(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayPrimaryDisplay(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayUnitNumber(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayVendorNumber(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayModelNumber(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplaySerialNumber(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayIOServicePort(CGMainDisplayID())
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGDisplayScreenSize(CGMainDisplayID())
+        self.failUnlessIsInstance(v, CGSize)
+
+        v = CGDisplayRotation(CGMainDisplayID())
+        self.failUnlessIsInstance(v, float)
+
+        v = CGDisplayCopyColorSpace(CGMainDisplayID())
+        self.failUnlessIsInstance(v, CGColorSpaceRef)
+
+
+    def testContents(self):
+        self.failUnlessEqual(kCGConfigureForAppOnly, 0)
+        self.failUnlessEqual(kCGConfigureForSession, 1)
+        self.failUnlessEqual(kCGConfigurePermanently, 2)
+
+        self.failUnlessEqual(kCGDisplayBeginConfigurationFlag, (1 << 0))
+        self.failUnlessEqual(kCGDisplayMovedFlag, (1 << 1))
+        self.failUnlessEqual(kCGDisplaySetMainFlag, (1 << 2))
+        self.failUnlessEqual(kCGDisplaySetModeFlag, (1 << 3))
+        self.failUnlessEqual(kCGDisplayAddFlag, (1 << 4))
+        self.failUnlessEqual(kCGDisplayRemoveFlag, (1 << 5))
+        self.failUnlessEqual(kCGDisplayEnabledFlag, (1 << 8))
+        self.failUnlessEqual(kCGDisplayDisabledFlag, (1 << 9))
+        self.failUnlessEqual(kCGDisplayMirrorFlag, (1 << 10))
+        self.failUnlessEqual(kCGDisplayUnMirrorFlag, (1 << 11))
+        self.failUnlessEqual(kCGDisplayDesktopShapeChangedFlag, (1 << 12))
+
+        
+
+
+
 
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgdisplayfade.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgdisplayfade.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgdisplayfade.py	Sun Mar  1 11:05:47 2009
@@ -9,8 +9,32 @@
         self.failUnlessEqual(kCGDisplayBlendSolidColor, 1.0)
         self.failUnlessEqual(kCGMaxDisplayReservationInterval, 15.0)
 
-    def testIncomplete(self):
-        self.fail("Add header tests for <CoreGraphics/CGDisplayFade.h>")
+    def testFunctions(self):
+        err, config = CGBeginDisplayConfiguration(None)
+        self.failUnlessEqual(err, 0)
+        self.failUnlessIsInstance(config, CGDisplayConfigRef)
+
+        err = CGConfigureDisplayFadeEffect(config,
+                0.1, 0.1, 1.0, 1.0, 1.0)
+        self.failUnlessEqual(err, 0)
+
+        err, token = CGAcquireDisplayFadeReservation(1.0, None)
+        self.failUnlessEqual(err, 0)
+        self.failUnlessIsInstance(token, (int, long))
+
+        err = CGDisplayFade(token,
+                0.5, 0.0, 1.0, 1.0, 1.0, 1.0, 1)
+        self.failUnlessEqual(err, 0)
+
+        err = CGReleaseDisplayFadeReservation(token)
+        self.failUnlessEqual(err, 0)
+
+        v = CGDisplayFadeOperationInProgress()
+        self.failUnlessIsInstance(v, (int, long))
+
+
+
+
 
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgimage.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgimage.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgimage.py	Sun Mar  1 11:05:47 2009
@@ -1,10 +1,142 @@
 
 from PyObjCTools.TestSupport import *
 from Quartz.CoreGraphics import *
+import sys
 
 class TestCGImage (TestCase):
-    def testIncomplete(self):
-        self.fail("Add header tests for <CoreGraphics/CGImage.h>")
+    def testConstants(self):
+        self.failUnlessEqual(kCGImageAlphaNone, 0)
+        self.failUnlessEqual(kCGImageAlphaPremultipliedLast, 1)
+        self.failUnlessEqual(kCGImageAlphaPremultipliedFirst, 2)
+        self.failUnlessEqual(kCGImageAlphaLast, 3)
+        self.failUnlessEqual(kCGImageAlphaFirst, 4)
+        self.failUnlessEqual(kCGImageAlphaNoneSkipLast, 5)
+        self.failUnlessEqual(kCGImageAlphaNoneSkipFirst, 6)
+        self.failUnlessEqual(kCGImageAlphaOnly, 7)
+
+        self.failUnlessEqual(kCGBitmapAlphaInfoMask, 0x1F)
+        self.failUnlessEqual(kCGBitmapFloatComponents, (1 << 8))
+        self.failUnlessEqual(kCGBitmapByteOrderMask, 0x7000)
+        self.failUnlessEqual(kCGBitmapByteOrderDefault, (0 << 12))
+        self.failUnlessEqual(kCGBitmapByteOrder16Little, (1 << 12))
+        self.failUnlessEqual(kCGBitmapByteOrder32Little, (2 << 12))
+        self.failUnlessEqual(kCGBitmapByteOrder16Big, (3 << 12))
+        self.failUnlessEqual(kCGBitmapByteOrder32Big, (4 << 12))
+
+        if sys.byteorder == 'big':
+            self.failUnlessEqual(kCGBitmapByteOrder16Host, kCGBitmapByteOrder16Big)
+            self.failUnlessEqual(kCGBitmapByteOrder32Host, kCGBitmapByteOrder32Big)
+        else:
+            self.failUnlessEqual(kCGBitmapByteOrder16Host, kCGBitmapByteOrder16Little)
+            self.failUnlessEqual(kCGBitmapByteOrder32Host, kCGBitmapByteOrder32Little)
+
+    def testFunctions(self):
+        self.failUnlessIsInstance(CGImageGetTypeID(), (int, long))
+
+        provider = CGDataProviderCreateWithCFData(buffer("1" * 4 * 100 * 80))
+        self.failUnlessArgHasType(CGImageCreate, 9, objc._C_BOOL)
+        self.failUnlessResultIsCFRetained(CGImageCreate)
+        image = CGImageCreate(100, 80, 8, 32, 400, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast,
+                provider, None, False, kCGRenderingIntentDefault)
+        self.failUnlessIsInstance(image, CGImageRef)
+
+        image2 = CGImageCreate(100, 80, 8, 32, 400, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipLast,
+                provider, [0, 1, 0, 1, 0, 1], False, kCGRenderingIntentDefault)
+        self.failUnlessIsInstance(image2, CGImageRef)
+
+        provider = CGDataProviderCreateWithCFData(buffer("1" * 4 * 20 * 10))
+        self.failUnlessArgHasType(CGImageMaskCreate, 7, objc._C_BOOL)
+        self.failUnlessResultIsCFRetained(CGImageMaskCreate)
+        mask = CGImageMaskCreate(20, 10, 8, 32, 80, provider, None, True)
+        self.failUnlessIsInstance(mask, CGImageRef)
+
+        self.failUnlessResultIsCFRetained(CGImageCreateCopy)
+        v = CGImageCreateCopy(image)
+        self.failUnlessIsInstance(v, CGImageRef)
+
+        provider = CGDataProviderCreateWithCFData(buffer(
+            open('/System/Library/CoreServices/DefaultDesktop.jpg', 'rb').read()))
+        self.failUnlessResultIsCFRetained(CGImageCreateWithJPEGDataProvider)
+        self.failUnlessArgHasType(CGImageCreateWithJPEGDataProvider, 2, objc._C_BOOL)
+        v = CGImageCreateWithJPEGDataProvider(provider, None, True, kCGRenderingIntentDefault)
+        self.failUnlessIsInstance(v, CGImageRef)
+
+        provider = CGDataProviderCreateWithCFData(buffer(
+            open('/System/Library//CoreServices/Installer.app/Contents/PlugIns/Summary.bundle/Contents/Resources/Success.png', 'rb').read()))
+        self.failUnlessResultIsCFRetained(CGImageCreateWithPNGDataProvider)
+        self.failUnlessArgHasType(CGImageCreateWithPNGDataProvider, 2, objc._C_BOOL)
+        v = CGImageCreateWithPNGDataProvider(provider, None, True, kCGRenderingIntentDefault)
+        self.failUnlessIsInstance(v, CGImageRef)
+
+        self.failUnlessResultIsCFRetained(CGImageCreateWithImageInRect)
+        v = CGImageCreateWithImageInRect(image, ((10, 10), (30, 40))) 
+        self.failUnlessIsInstance(v, CGImageRef)
+
+        self.failUnlessResultIsCFRetained(CGImageCreateWithMask)
+        v = CGImageCreateWithMask(image, mask)
+        self.failUnlessIsInstance(v, CGImageRef)
+
+        
+        self.failUnlessResultIsCFRetained(CGImageCreateWithMaskingColors)
+        v = CGImageCreateWithMaskingColors(image2, [0,255]*4)
+        self.failUnlessIsInstance(v, CGImageRef)
+
+        self.failUnlessResultIsCFRetained(CGImageCreateCopyWithColorSpace)
+        v = CGImageCreateCopyWithColorSpace(image, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB))
+        self.failUnlessIsInstance(v, CGImageRef)
+
+        v = CGImageRetain(image)
+        self.failUnless(v is image)
+        CGImageRelease(image)
+
+        self.failUnlessResultHasType(CGImageIsMask, objc._C_BOOL)
+        self.failUnless(CGImageIsMask(image) is False)
+        self.failUnless(CGImageIsMask(mask) is True)
+
+        v = CGImageGetWidth(image)
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGImageGetHeight(image)
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGImageGetBitsPerComponent(image)
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGImageGetBitsPerPixel(image)
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGImageGetBytesPerRow(image)
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGImageGetColorSpace(image)
+        self.failUnlessIsInstance(v, CGColorSpaceRef)
+
+        v = CGImageGetAlphaInfo(image)
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGImageGetDataProvider(image)
+        self.failUnlessIsInstance(v, CGDataProviderRef)
+
+        v = CGImageGetDecode(image)
+        self.failUnless(v is objc.NULL)
+
+        v = CGImageGetDecode(image2)
+        self.failUnlessIsInstance(v, objc.varlist)
+        self.failUnlessEqual(v[0], 0.0)
+        self.failUnlessEqual(v[1], 1.0)
+
+        self.failUnlessResultHasType(CGImageGetShouldInterpolate, objc._C_BOOL)
+        v = CGImageGetShouldInterpolate(image)
+        self.failUnless(v is False)
+        v = CGImageGetShouldInterpolate(mask)
+        self.failUnless(v is True)
+
+        v = CGImageGetRenderingIntent(image)
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGImageGetBitmapInfo(image)
+        self.failUnlessIsInstance(v, (int, long))
+
 
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgremoteoperation.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgremoteoperation.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Quartz/PyObjCTest/test_cgremoteoperation.py	Sun Mar  1 11:05:47 2009
@@ -6,8 +6,103 @@
     def testConstants(self):
         self.failUnlessEqual(CGEventNoErr, kCGErrorSuccess)
 
-    def testIncomplete(self):
-        self.fail("Add header tests for <CoreGraphics/CGRemoteOperation.h>")
+        self.failUnlessEqual(kCGScreenUpdateOperationRefresh, 0)
+        self.failUnlessEqual(kCGScreenUpdateOperationMove, cast_int(1 << 0))
+        self.failUnlessEqual(kCGScreenUpdateOperationReducedDirtyRectangleCount, cast_int(1 << 31))
+
+        self.failUnlessEqual(kCGEventFilterMaskPermitLocalMouseEvents, 1)
+        self.failUnlessEqual(kCGEventFilterMaskPermitLocalKeyboardEvents, 2)
+        self.failUnlessEqual(kCGEventFilterMaskPermitSystemDefinedEvents, 4)
+        self.failUnlessEqual(kCGEventFilterMaskPermitAllEvents, 7)
+
+        self.failUnlessEqual(kCGEventSuppressionStateSuppressionInterval, 0)
+        self.failUnlessEqual(kCGEventSuppressionStateRemoteMouseDrag, 1)
+        self.failUnlessEqual(kCGNumberOfEventSuppressionStates, 2)
+
+        self.failUnlessEqual(kCGMouseDownEventMaskingDeadSwitchTimeout, 60.0)
+
+        self.failUnlessEqual(kCGEventSupressionStateSupressionInterval, kCGEventSuppressionStateSuppressionInterval)
+        self.failUnlessEqual(kCGEventSupressionStateRemoteMouseDrag, kCGEventSuppressionStateRemoteMouseDrag)
+        self.failUnlessEqual(kCGNumberOfEventSupressionStates, kCGNumberOfEventSuppressionStates)
+
+    def testStructs(self):
+        v = CGScreenUpdateMoveDelta()
+        self.failUnless(hasattr(v, 'dX'))
+        self.failUnless(hasattr(v, 'dY'))
+
+
+
+
+    def testFunctions(self):
+        myInfo = object()
+        callcount = [0]
+        def callbackRefresh(count, rects, info):
+            self.failUnless(info is myInfo)
+            self.failUnlessIsInstance(rects, tuple)
+            self.failUnlessIsInstance(count, (int, long))
+            for i in rects:
+                self.failUnlessIsInstance(i, CGRect)
+            callcount[0] += 1
+
+        err = CGRegisterScreenRefreshCallback(callbackRefresh, myInfo)
+        self.failUnlessEqual(err, 0)
+
+        # FIXME: should force a refresh here
+
+        CGUnregisterScreenRefreshCallback(callbackRefresh, myInfo)
+
+        # FIXME: This complete hangs the interpreter, don't have
+        # time to investigate this.
+        #
+        #err, rects, count = CGWaitForScreenRefreshRects(None, None)
+        #self.failUnlessEqual(err, 0)
+        #self.failUnlessIsInstance(rects, tuple)
+        #self.failUnlessIsInstance(count, (int, long))
+        #for i in rects:
+        #    self.failUnlessIsInstance(i, CGRect)
+
+        v = CGCursorIsVisible()
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGCursorIsDrawnInFramebuffer()
+        self.failUnlessIsInstance(v, (int, long))
+
+        v = CGPostMouseEvent((50, 50), True, 3, 0, 0, 0)
+        self.failUnlessEqual(v, 0)
+
+        v = CGPostScrollWheelEvent(3, 0, 0, 0)
+        self.failUnlessEqual(v, 0)
+
+        v = CGPostKeyboardEvent(0, 56, 1)
+        self.failUnlessEqual(v, 0)
+
+        v = CGWarpMouseCursorPosition((800, 800))
+        self.failUnlessEqual(v, 0)
+
+        v = CGInhibitLocalEvents(False)
+        self.failUnlessEqual(v, 0)
+
+        v = CGSetLocalEventsSuppressionInterval(0.1)
+        self.failUnlessEqual(v, 0)
+
+        v = CGEnableEventStateCombining(0)
+        self.failUnlessEqual(v, 0)
+
+        v  = CGSetLocalEventsFilterDuringSuppressionState(kCGEventFilterMaskPermitAllEvents, kCGEventSuppressionStateSuppressionInterval)
+        self.failUnlessEqual(v, 0)
+
+        v = CGAssociateMouseAndMouseCursorPosition(0)
+        self.failUnlessEqual(v, 0)
+
+        v = CGWindowServerCFMachPort()
+        self.failUnlessIsInstance(v, CFMachPortRef)
+
+        self.failUnless(CGSetLocalEventsFilterDuringSupressionState is CGSetLocalEventsFilterDuringSuppressionState)
+
+
+    def testMissing(self):
+        self.fail("CGWaitForScreenUpdateRects")
+        self.fail("CGWaitForScreenRefreshRects")
 
 if __name__ == "__main__":
     main()

Modified: trunk/pyobjc/pyobjc-framework-Quartz/setup.py
==============================================================================
--- trunk/pyobjc/pyobjc-framework-Quartz/setup.py	(original)
+++ trunk/pyobjc/pyobjc-framework-Quartz/setup.py	Sun Mar  1 11:05:47 2009
@@ -11,6 +11,9 @@
 
 NOTE: The actual wrappers are subpackages of ``Quartz``, they are not toplevel
 packages to avoid name clashes with Apple provided wrappers for CoreGraphics.
+
+WARNING: Running the unittests will change your display settings during the
+testrun, which will probably mess up your window layout.
 '''
 import ez_setup
 ez_setup.use_setuptools()

------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
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.