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