pyobjc / pyobjc-framework-Cocoa / PyObjCTest / test_cfmachport.py

"""
FIXME: None of these tests actually use the MachPort
"""
from PyObjCTools.TestSupport import *
from CoreFoundation import *


class TestMachPort (TestCase):
    def testTypes(self):
        self.assertIsCFType(CFMachPortRef)

    def testTypeID(self):
        self.assertIsInstance(CFMachPortGetTypeID(), (int, long))

    def testCreate(self):
        class Context: pass
        context = Context()

        def callout(port, msg, size, info):
            pass

        # This one cannot be tested without bindings to the low-level mach_port API's
        #port, shouldFree = CFMachPortCreateWithPort(None, 1, callout, context, None)
        #self.assertIsInstance(port, CFMachPortRef)
        #self.assertIs(shouldFree is True or shouldFree, False)
        port, shouldFree = CFMachPortCreate(None, callout, context, None)
        self.assertIsInstance(port, CFMachPortRef)
        self.assertIs(shouldFree is True or shouldFree, False)
        idx = CFMachPortGetPort(port)
        self.assertIsInstance(idx, (int, long))
        ctx = CFMachPortGetContext(port, None)
        self.assertIs(ctx, context)
        cb = CFMachPortGetInvalidationCallBack(port)
        self.assertIs(cb, None)
        global didInvalidate
        didInvalidate=False
        def invalidate(port, info):
            global didInvalidate
            didInvalidate = True

        CFMachPortSetInvalidationCallBack(port, invalidate)
        cb = CFMachPortGetInvalidationCallBack(port)
        self.assertIs(invalidate, cb)
        rls = CFMachPortCreateRunLoopSource(None, port, 0)
        self.assertIsInstance(rls, CFRunLoopSourceRef)
        self.assertTrue(CFMachPortIsValid(port))
        CFMachPortInvalidate(port)
        self.assertFalse(CFMachPortIsValid(port))
        self.assertTrue(didInvalidate)

if __name__ == "__main__":
    main()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.