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