public void AddUndoRedo()
		{
			int maxSize = 10;
			CommandHistory history = new CommandHistory(maxSize);

			// Add 4 commands
			TestCommand1 cmd1 = new TestCommand1();
			TestCommand2 cmd2 = new TestCommand2();
			TestCommand3 cmd3 = new TestCommand3();
			TestCommand4 cmd4 = new TestCommand4();

			history.AddCommand(cmd1);
			history.AddCommand(cmd2);
			history.AddCommand(cmd3);
			history.AddCommand(cmd4);

			Assert.AreEqual(4, history.NumCommands);

			// Undo all commands we've added 
			history.Undo();
			Assert.AreEqual("Unexecuted TestCommand4", _message);
			history.Undo();
			Assert.AreEqual("Unexecuted TestCommand3", _message);
			history.Undo();
			Assert.AreEqual("Unexecuted TestCommand2", _message);
			history.Undo();
			Assert.AreEqual("Unexecuted TestCommand1", _message);

			// Try to undo two extra times, even though we should be at the beginning
			_message = String.Empty;
			history.Undo();
			Assert.AreEqual(String.Empty, _message);
			history.Undo();
			Assert.AreEqual(String.Empty, _message);

			// Redo all commands we've added
			history.Redo();
			Assert.AreEqual("Executed TestCommand1", _message);
			history.Redo();
			Assert.AreEqual("Executed TestCommand2", _message);
			history.Redo();
			Assert.AreEqual("Executed TestCommand3", _message);
			history.Redo();
			Assert.AreEqual("Executed TestCommand4", _message);

			// Try to redo two extra times, even though we should be at the end
			_message = String.Empty;
			history.Redo();
			Assert.AreEqual(String.Empty, _message);
			history.Redo();
			Assert.AreEqual(String.Empty, _message);

			// Add another command
			TestCommand5 cmd5 = new TestCommand5();
			history.AddCommand(cmd5);

			Assert.AreEqual(5, history.NumCommands);

			// Undo a couple times
			history.Undo();
			Assert.AreEqual("Unexecuted TestCommand5", _message);
			history.Undo();
			Assert.AreEqual("Unexecuted TestCommand4", _message);
			history.Undo();
			Assert.AreEqual("Unexecuted TestCommand3", _message);

			// Now add a new command
			TestCommand6 cmd6 = new TestCommand6();
			history.AddCommand(cmd6);

			Assert.AreEqual(3, history.NumCommands);
			
			// Try to redo again
			_message = String.Empty;
			history.Redo();
			Assert.AreEqual(String.Empty, _message);

			// Undo again
			history.Undo();
			Assert.AreEqual("Unexecuted TestCommand6", _message);
			history.Undo();
			Assert.AreEqual("Unexecuted TestCommand2", _message);
		}
示例#2
0
        public void AddUndoRedo()
        {
            int            maxSize = 10;
            CommandHistory history = new CommandHistory(maxSize);

            // Add 4 commands
            TestCommand1 cmd1 = new TestCommand1();
            TestCommand2 cmd2 = new TestCommand2();
            TestCommand3 cmd3 = new TestCommand3();
            TestCommand4 cmd4 = new TestCommand4();

            history.AddCommand(cmd1);
            history.AddCommand(cmd2);
            history.AddCommand(cmd3);
            history.AddCommand(cmd4);

            Assert.AreEqual(4, history.NumCommands);

            // Undo all commands we've added
            history.Undo();
            Assert.AreEqual("Unexecuted TestCommand4", _message);
            history.Undo();
            Assert.AreEqual("Unexecuted TestCommand3", _message);
            history.Undo();
            Assert.AreEqual("Unexecuted TestCommand2", _message);
            history.Undo();
            Assert.AreEqual("Unexecuted TestCommand1", _message);

            // Try to undo two extra times, even though we should be at the beginning
            _message = String.Empty;
            history.Undo();
            Assert.AreEqual(String.Empty, _message);
            history.Undo();
            Assert.AreEqual(String.Empty, _message);

            // Redo all commands we've added
            history.Redo();
            Assert.AreEqual("Executed TestCommand1", _message);
            history.Redo();
            Assert.AreEqual("Executed TestCommand2", _message);
            history.Redo();
            Assert.AreEqual("Executed TestCommand3", _message);
            history.Redo();
            Assert.AreEqual("Executed TestCommand4", _message);

            // Try to redo two extra times, even though we should be at the end
            _message = String.Empty;
            history.Redo();
            Assert.AreEqual(String.Empty, _message);
            history.Redo();
            Assert.AreEqual(String.Empty, _message);

            // Add another command
            TestCommand5 cmd5 = new TestCommand5();

            history.AddCommand(cmd5);

            Assert.AreEqual(5, history.NumCommands);

            // Undo a couple times
            history.Undo();
            Assert.AreEqual("Unexecuted TestCommand5", _message);
            history.Undo();
            Assert.AreEqual("Unexecuted TestCommand4", _message);
            history.Undo();
            Assert.AreEqual("Unexecuted TestCommand3", _message);

            // Now add a new command
            TestCommand6 cmd6 = new TestCommand6();

            history.AddCommand(cmd6);

            Assert.AreEqual(3, history.NumCommands);

            // Try to redo again
            _message = String.Empty;
            history.Redo();
            Assert.AreEqual(String.Empty, _message);

            // Undo again
            history.Undo();
            Assert.AreEqual("Unexecuted TestCommand6", _message);
            history.Undo();
            Assert.AreEqual("Unexecuted TestCommand2", _message);
        }