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