from Foundation import * from PyObjCTools.TestSupport import * import Foundation class TestHelper (NSObject): def incFoo_(self, foo): foo[0] += 1 class TestNSUndoManager(TestCase): def testUndoManager(self): x = TestHelper.new() m = NSUndoManager.new() l = [ 0 ] m.prepareWithInvocationTarget_(x).incFoo_(l) m.undo() self.assertEqual(l[0], 1) def __del__(self, objc=objc): objc.recycleAutoreleasePool() ## Undo Integer test ## From David Eppstein # test ability of int argument to pass through undo and then # be used as parameter to another routine expecting an int # # the actual routine I want to use is # NSTableView.editColumn_row_withEvent_select_ # but that involves setting up a UI; instead use NSIndexSpecifier if hasattr(Foundation, 'NSIndexSpecifier'): class TestUndoInt(TestCase): class UndoInt(NSObject): undo = NSUndoManager.alloc().init() idx = NSIndexSpecifier.alloc().init() idx.setIndex_(0) def test_(self,i): self.undo.prepareWithInvocationTarget_(self).test_(self.idx.index()) self.idx.setIndex_(i) def testUndoInt(self): # test that undo works x = TestUndoInt.UndoInt.alloc().init() x.test_(3) assert(x.idx.index() == 3) x.undo.undo() assert(x.idx.index() == 0) ## end Undo Integer test class TestSubclassingUndo(TestCase): # Bugreport: 678759 Subclassing NSUndoManager fails def testSubclass(self): class UndoSubclass (NSUndoManager): pass x = TestHelper.new() m = UndoSubclass.new() l = [ 0 ] m.prepareWithInvocationTarget_(x).incFoo_(l) m.undo() self.assertEqual(l[0], 1) def testConstants(self): self.assertIsInstance(NSUndoManagerCheckpointNotification, unicode) self.assertIsInstance(NSUndoManagerWillUndoChangeNotification, unicode) self.assertIsInstance(NSUndoManagerWillRedoChangeNotification, unicode) self.assertIsInstance(NSUndoManagerDidUndoChangeNotification, unicode) self.assertIsInstance(NSUndoManagerDidRedoChangeNotification, unicode) self.assertIsInstance(NSUndoManagerDidOpenUndoGroupNotification, unicode) self.assertIsInstance(NSUndoManagerWillCloseUndoGroupNotification, unicode) self.assertEqual(NSUndoCloseGroupingRunLoopOrdering, 350000) def testMethods(self): self.assertResultIsBOOL(NSUndoManager.isUndoRegistrationEnabled) self.assertResultIsBOOL(NSUndoManager.groupsByEvent) self.assertArgIsBOOL(NSUndoManager.setGroupsByEvent_, 0) self.assertResultIsBOOL(NSUndoManager.canUndo) self.assertResultIsBOOL(NSUndoManager.canRedo) self.assertResultIsBOOL(NSUndoManager.isUndoing) self.assertResultIsBOOL(NSUndoManager.isRedoing) self.assertArgIsSEL(NSUndoManager.registerUndoWithTarget_selector_object_, 1, b'v@:@') if __name__ == '__main__': main( )