[PyObjC-svn] r2065 - in trunk/pyobjc/pyobjc-framework-Quartz: . Lib/Quartz/CoreGraphics Modules PyObjCTest
[email protected] Sun, 01 Mar 2009 11:05:47 -0600
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