1 2from PyObjCTools.TestSupport import * 3from LaunchServices import * 4import sys 5import os 6 7class TestLSOpen (TestCase): 8 def setUp(self): 9 self.path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'dummy.txt') 10 fp = open(self.path, 'w') 11 fp.write('test contents') 12 fp.close() 13 14 def tearDown(self): 15 if os.path.exists(self.path): 16 os.unlink(self.path) 17 18 def testConstants(self): 19 self.assertEqual(kLSLaunchDefaults, 0x00000001) 20 self.assertEqual(kLSLaunchAndPrint, 0x00000002) 21 self.assertEqual(kLSLaunchReserved2, 0x00000004) 22 self.assertEqual(kLSLaunchReserved3, 0x00000008) 23 self.assertEqual(kLSLaunchReserved4, 0x00000010) 24 self.assertEqual(kLSLaunchReserved5, 0x00000020) 25 self.assertEqual(kLSLaunchAndDisplayErrors, 0x00000040) 26 self.assertEqual(kLSLaunchInhibitBGOnly, 0x00000080) 27 self.assertEqual(kLSLaunchDontAddToRecents, 0x00000100) 28 self.assertEqual(kLSLaunchDontSwitch, 0x00000200) 29 self.assertEqual(kLSLaunchNoParams, 0x00000800) 30 self.assertEqual(kLSLaunchAsync, 0x00010000) 31 self.assertEqual(kLSLaunchStartClassic, 0x00020000) 32 self.assertEqual(kLSLaunchInClassic, 0x00040000) 33 self.assertEqual(kLSLaunchNewInstance, 0x00080000) 34 self.assertEqual(kLSLaunchAndHide, 0x00100000) 35 self.assertEqual(kLSLaunchAndHideOthers, 0x00200000) 36 self.assertEqual(kLSLaunchHasUntrustedContents, 0x00400000) 37 38 def testStructs(self): 39 v = LSApplicationParameters() 40 self.assertHasAttr(v, "version") 41 self.assertHasAttr(v, "flags") 42 self.assertHasAttr(v, "application") 43 self.assertHasAttr(v, "asyncLaunchRefCon") 44 self.assertHasAttr(v, "environment") 45 self.assertHasAttr(v, "argv") 46 self.assertHasAttr(v, "initialEvent") 47 48 @expectedFailure 49 def testUnsupportedStructs(self): 50 self.fail("LSLaunchFSRefSpec") 51 52 53 def testFunctions(self): 54 url = CFURLCreateFromFileSystemRepresentation(None, self.path, len(self.path), True) 55 56 self.assertArgIsOut(LSOpenCFURLRef, 1) 57 ok, u = LSOpenCFURLRef(url, None) 58 self.assertEquals(ok, 0) 59 self.assertIsInstance(u, CFURLRef) 60 61 self.assertArgIsIn(LSOpenItemsWithRole, 0) 62 self.assertArgSizeInArg(LSOpenItemsWithRole, 0, 1) 63 self.assertArgIsIn(LSOpenItemsWithRole, 3) 64 self.assertArgIsIn(LSOpenItemsWithRole, 4) 65 self.assertArgIsOut(LSOpenItemsWithRole, 5) 66 self.assertArgSizeInArg(LSOpenItemsWithRole, 5, 6) 67 ref = objc.FSRef.from_pathname(self.path) 68 ok, psns = LSOpenItemsWithRole([ref], 1, kLSRolesAll, None, None, None, 1) 69 self.assertEquals(ok, 0) 70 self.assertIsInstance(psns, (list, tuple)) 71 for x in psns: 72 # Actually a ProcessSerialNumber, but those aren't wrapped yet 73 self.assertIsInstance(x, tuple) 74 self.assertEquals(len(x), 2) 75 self.assertIsInstance(x[0], (int, long)) 76 self.assertIsInstance(x[1], (int, long)) 77 78 self.assertArgIsIn(LSOpenURLsWithRole, 2) 79 self.assertArgIsIn(LSOpenURLsWithRole, 3) 80 self.assertArgIsOut(LSOpenURLsWithRole, 4) 81 self.assertArgSizeInArg(LSOpenURLsWithRole, 4, 5) 82 ok, psns = LSOpenURLsWithRole([url], kLSRolesAll, None, None, None, 1) 83 self.assertEquals(ok, 0) 84 self.assertIsInstance(psns, (list, tuple)) 85 for x in psns: 86 # Actually a ProcessSerialNumber, but those aren't wrapped yet 87 self.assertIsInstance(x, tuple) 88 self.assertEquals(len(x), 2) 89 self.assertIsInstance(x[0], (int, long)) 90 self.assertIsInstance(x[1], (int, long)) 91 92 93 94 @expectedFailure 95 def testUnsupportedFunctions(self): 96 self.assertArgIsIn(LSOpenApplication, 0) 97 self.assertArgIsOut(LSOpenApplication, 1) 98 params = LSApplicationParameters( 99 version=0, 100 flags = kLSLaunchDefaults, 101 application = objc.FSRef.from_pathname('/Applications/Utilities/Terminal.app'), 102 asyncLaunchRefCon = None, 103 environment = None, 104 argv = [u"Terminal"], 105 initialEvent = None, 106 ) 107 108 # Call will fail for now, 'application' is an FSRef pointers and 109 # pyobjc-core isn't smart enough to deal with that. 110 ok, psn = LSOpenApplication(params, None) 111 self.assertEquals(ok, 0) 112 self.assertIsInstance(psn, (int, long)) 113 114 115 @expectedFailure 116 def testFSRef(self): 117 # Functions using structs we don't support, probably need 118 # manual wrappers 119 self.fail("LSOpenFromRefSpec") 120 self.fail("LSOpenFromURLSpec") 121 122if __name__ == "__main__": 123 main() 124