1from PyObjCTools.TestSupport import * 2import gc 3 4from objc import * 5from Foundation import * 6 7class PythonClass (object): 8 def __init__(self): 9 self.fireCount = 0 10 11 def fire_(self, timer): 12 self.fireCount += 1 13 14 15class TestNSTimer(TestCase): 16 17 def _testHelp(self): 18 obj = PythonClass() 19 pool = NSAutoreleasePool.alloc().init() 20 self.assertArgIsBOOL(NSTimer.timerWithTimeInterval_target_selector_userInfo_repeats_, 4) 21 timer = NSTimer.timerWithTimeInterval_target_selector_userInfo_repeats_( 22 0.1, obj, 'fire:', None, False) 23 NSRunLoop.currentRunLoop().addTimer_forMode_( 24 timer, NSDefaultRunLoopMode) 25 NSRunLoop.currentRunLoop().runUntilDate_( 26 NSDate.dateWithTimeIntervalSinceNow_(0.5)) 27 timer.invalidate() 28 self.assertEqual(obj.fireCount, 1) 29 30 del timer 31 del pool 32 33 def testPythonLeakage(self): 34 35 # Ignore first run, this has some side-effects that would 36 # taint the result. 37 self._testHelp() 38 39 # Now run the test again in a loop to detect leakage 40 gc.collect() 41 before = len(gc.get_objects()) 42 43 for i in range(10): 44 self._testHelp() 45 46 gc.collect() 47 after = len(gc.get_objects()) 48 49 for i in range(10): 50 self._testHelp() 51 52 gc.collect() 53 after2 = len(gc.get_objects()) 54 55 self.assertEqual(after, before, "%d - %d - %d"%(before, after, after2)) 56 57 def testMethods(self): 58 self.assertArgIsBOOL(NSTimer.timerWithTimeInterval_invocation_repeats_, 2) 59 self.assertArgIsBOOL(NSTimer.scheduledTimerWithTimeInterval_invocation_repeats_, 2) 60 self.assertArgIsBOOL(NSTimer.timerWithTimeInterval_target_selector_userInfo_repeats_, 4) 61 self.assertArgIsSEL(NSTimer.timerWithTimeInterval_target_selector_userInfo_repeats_, 2, b'v@:@') 62 self.assertArgIsBOOL(NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_, 4) 63 self.assertArgIsSEL(NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_, 2, b'v@:@') 64 65 self.assertArgIsBOOL(NSTimer.initWithFireDate_interval_target_selector_userInfo_repeats_, 5) 66 self.assertArgIsSEL(NSTimer.initWithFireDate_interval_target_selector_userInfo_repeats_, 3, b'v@:@') 67 68 self.assertResultIsBOOL(NSTimer.isValid) 69 70if __name__ == '__main__': 71 main( ) 72