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.new() 20 self.failUnlessArgIsBOOL(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.assertEquals(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 self.assertEquals(after, before) 50 51 def testMethods(self): 52 self.failUnlessArgIsBOOL(NSTimer.timerWithTimeInterval_invocation_repeats_, 2) 53 self.failUnlessArgIsBOOL(NSTimer.scheduledTimerWithTimeInterval_invocation_repeats_, 2) 54 self.failUnlessArgIsBOOL(NSTimer.timerWithTimeInterval_target_selector_userInfo_repeats_, 4) 55 self.failUnlessArgIsSEL(NSTimer.timerWithTimeInterval_target_selector_userInfo_repeats_, 2, 'v@:@') 56 self.failUnlessArgIsBOOL(NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_, 4) 57 self.failUnlessArgIsSEL(NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_, 2, 'v@:@') 58 59 self.failUnlessArgIsBOOL(NSTimer.initWithFireDate_interval_target_selector_userInfo_repeats_, 5) 60 self.failUnlessArgIsSEL(NSTimer.initWithFireDate_interval_target_selector_userInfo_repeats_, 3, 'v@:@') 61 62 self.failUnlessResultIsBOOL(NSTimer.isValid) 63 64if __name__ == '__main__': 65 main( ) 66