1from Foundation import * 2from PyObjCTools.TestSupport import * 3import Foundation 4 5class TestHelper (NSObject): 6 def incFoo_(self, foo): 7 foo[0] += 1 8 9class TestNSUndoManager(TestCase): 10 def testUndoManager(self): 11 x = TestHelper.new() 12 m = NSUndoManager.new() 13 l = [ 0 ] 14 15 m.prepareWithInvocationTarget_(x).incFoo_(l) 16 m.undo() 17 18 self.assertEquals(l[0], 1) 19 20 def __del__(self, objc=objc): 21 objc.recycleAutoreleasePool() 22 23## Undo Integer test 24## From David Eppstein 25# test ability of int argument to pass through undo and then 26# be used as parameter to another routine expecting an int 27# 28# the actual routine I want to use is 29# NSTableView.editColumn_row_withEvent_select_ 30# but that involves setting up a UI; instead use NSIndexSpecifier 31 32if hasattr(Foundation, 'NSIndexSpecifier'): 33 class TestUndoInt(TestCase): 34 class UndoInt(NSObject): 35 undo = NSUndoManager.alloc().init() 36 idx = NSIndexSpecifier.alloc().init() 37 idx.setIndex_(0) 38 39 def test_(self,i): 40 self.undo.prepareWithInvocationTarget_(self).test_(self.idx.index()) 41 self.idx.setIndex_(i) 42 43 def testUndoInt(self): 44 # test that undo works 45 x = TestUndoInt.UndoInt.alloc().init() 46 x.test_(3) 47 assert(x.idx.index() == 3) 48 x.undo.undo() 49 assert(x.idx.index() == 0) 50## end Undo Integer test 51 52 53class TestSubclassingUndo(TestCase): 54 # Bugreport: 678759 Subclassing NSUndoManager fails 55 56 def testSubclass(self): 57 class UndoSubclass (NSUndoManager): 58 pass 59 60 x = TestHelper.new() 61 m = UndoSubclass.new() 62 l = [ 0 ] 63 64 m.prepareWithInvocationTarget_(x).incFoo_(l) 65 m.undo() 66 67 self.assertEquals(l[0], 1) 68 69 def testConstants(self): 70 self.failUnless(isinstance(NSUndoManagerCheckpointNotification, unicode)) 71 self.failUnless(isinstance(NSUndoManagerWillUndoChangeNotification, unicode)) 72 self.failUnless(isinstance(NSUndoManagerWillRedoChangeNotification, unicode)) 73 74 self.failUnless(isinstance(NSUndoManagerDidUndoChangeNotification, unicode)) 75 self.failUnless(isinstance(NSUndoManagerDidRedoChangeNotification, unicode)) 76 77 self.failUnless(isinstance(NSUndoManagerDidOpenUndoGroupNotification, unicode)) 78 self.failUnless(isinstance(NSUndoManagerWillCloseUndoGroupNotification, unicode)) 79 80 self.failUnlessEqual(NSUndoCloseGroupingRunLoopOrdering, 350000) 81 82 def testMethods(self): 83 self.failUnlessResultIsBOOL(NSUndoManager.isUndoRegistrationEnabled) 84 self.failUnlessResultIsBOOL(NSUndoManager.groupsByEvent) 85 self.failUnlessArgIsBOOL(NSUndoManager.setGroupsByEvent_, 0) 86 self.failUnlessResultIsBOOL(NSUndoManager.canUndo) 87 self.failUnlessResultIsBOOL(NSUndoManager.canRedo) 88 self.failUnlessResultIsBOOL(NSUndoManager.isUndoing) 89 self.failUnlessResultIsBOOL(NSUndoManager.isRedoing) 90 self.failUnlessArgIsSEL(NSUndoManager.registerUndoWithTarget_selector_object_, 1, 'v@:@') 91 92if __name__ == '__main__': 93 main( ) 94