1from PyObjCTools.TestSupport import *
2import os
3
4from Foundation import *
5
6class TestNSJavaSetup (TestCase):
7    @max_os_level('10.5')
8    def testConstants(self):
9        self.assertIsInstance(NSJavaClasses, unicode)
10        self.assertIsInstance(NSJavaRoot, unicode)
11        self.assertIsInstance(NSJavaPath, unicode)
12        self.assertIsInstance(NSJavaUserPath, unicode)
13        self.assertIsInstance(NSJavaLibraryPath, unicode)
14        self.assertIsInstance(NSJavaOwnVirtualMachine, unicode)
15        self.assertIsInstance(NSJavaPathSeparator, unicode)
16        self.assertIsInstance(NSJavaWillSetupVirtualMachineNotification, unicode)
17        self.assertIsInstance(NSJavaDidSetupVirtualMachineNotification, unicode)
18        self.assertIsInstance(NSJavaWillCreateVirtualMachineNotification, unicode)
19        self.assertIsInstance(NSJavaDidCreateVirtualMachineNotification, unicode)
20    @max_os_level('10.5')
21    def testFunctions(self):
22        v = NSJavaNeedsVirtualMachine({})
23        self.assertIs(v, False)
24        v = NSJavaProvidesClasses({})
25        self.assertIs(v, False)
26        v = NSJavaNeedsToLoadClasses({})
27        self.assertIs(v, False)
28        vm = NSJavaSetup({})
29        self.assertIsInstance(vm, objc.objc_object)
30        v = NSJavaSetupVirtualMachine()
31        self.assertIsInstance(v, objc.objc_object)
32        v = NSJavaObjectNamedInPath("java.lang.Object", None)
33        self.assertIsInstance(v, objc.objc_object)
34        v, vm = NSJavaClassesFromPath(None, ['java.lang.Object'], True, None)
35        self.assertIsInstance(v, NSArray)
36        self.assertEqual(len(v), 1)
37        self.assertIsInstance(vm, objc.objc_object)
38        v, vm = NSJavaClassesForBundle(NSBundle.mainBundle(), True, None)
39        self.assertIsInstance(v, NSArray)
40        self.assertEqual(len(v), 0)
41        self.assertIsInstance(vm, objc.objc_object)
42        vm = NSJavaBundleSetup(NSBundle.mainBundle(), {})
43        self.assertIsInstance(vm, objc.objc_object)
44        # FIXME: NSJavaBundleCleanup gives an exception
45        # This seems to be related to the way we call these APIs and I don't
46        # plan to fix is (there is no problem with PyObjC or the Foundation
47        # wrappers)
48        fd = os.dup(2)
49        x = os.open('/dev/null', os.O_WRONLY)
50        os.dup2(x, 2)
51        os.close(x)
52        try:
53            try:
54                NSJavaBundleCleanup(NSBundle.mainBundle(), {})
55            except ValueError:
56                pass
57        finally:
58            os.dup2(fd, 2)
59
60
61if __name__ == "__main__":
62    main()
63