@@ -0,0 +1,3350 @@
+package guitests;%0A%0Aimport static org.junit.Assert.assertTrue;%0A%0Aimport org.junit.Test;%0A%0A%0Aimport seedu.tasklist.commons.exceptions.IllegalValueException;%0Aimport seedu.tasklist.logic.commands.RedoCommand;%0Aimport seedu.tasklist.logic.commands.UndoCommand;%0Aimport seedu.tasklist.model.task.Name;%0Aimport seedu.tasklist.testutil.TestTask;%0Aimport seedu.tasklist.testutil.TestUtil;%0A%0A%0A%0Apublic class UndoRedoCommandTest extends TaskListGuiTest %7B%0A%0A    @Test%0A    public void assertUndoRedoAddSuccess() %7B%0A        TestTask taskToBeAdded = td.hoon;%0A        commandBox.runCommand(taskToBeAdded.getAddCommand());%0A        commandBox.runCommand(%22undo%22);%0A        TestTask%5B%5D expectedTaskList = td.getTypicalTasks();%0A        assertTrue(taskListPanel.isListMatching(expectedTaskList));%0A        assertResultMessage(String.format(UndoCommand.MESSAGE_UNDO_SUCCESS));%0A%0A        //redo%0A        commandBox.runCommand(%22redo%22);%0A        TestTask%5B%5D currentList = TestUtil.addTasksToList(td.getTypicalTasks(), td.hoon);%0A        assertTrue(taskListPanel.isListMatching(currentList));%0A        assertResultMessage(String.format(RedoCommand.MESSAGE_REDO_SUCCESS));%0A    %7D%0A%0A    /**%0A     * Test to edit the name. Beyond MVP can edit all other parameters for more coverage.%0A     * @throws IllegalValueException%0A     */%0A%0A    @Test%0A    public void assertUndoRedoEditSuccess() throws IllegalValueException %7B%0A        commandBox.runCommand(%22edit 1 Wang PC%22);%0A        commandBox.runCommand(%22undo%22);%0A        TestTask%5B%5D expectedTaskList = td.getTypicalTasks();%0A        assertTrue(taskListPanel.isListMatching(expectedTaskList));%0A        assertResultMessage(String.format(UndoCommand.MESSAGE_UNDO_SUCCESS));%0A%0A        //redo%0A        commandBox.runCommand(%22redo%22);%0A        expectedTaskList%5B0%5D.setName(new Name(%22Wang PC%22));%0A        assertTrue(taskListPanel.isListMatching(expectedTaskList));%0A        assertResultMessage(String.format(RedoCommand.MESSAGE_REDO_SUCCESS));%0A    %7D%0A%0A    @Test%0A    public void assertUndoRedoDeleteSuccess() %7B%0A        TestTask%5B%5D currentList = TestUtil.removeTaskFromList(td.getTypicalTasks(), 6);%0A        commandBox.runCommand(%22delete 6%22);%0A        commandBox.runCommand(%22undo%22);%0A        TestTask%5B%5D expectedTaskList = td.getTypicalTasks();%0A        assertTrue(taskListPanel.isListMatching(expectedTaskList));%0A        assertResultMessage(String.format(UndoCommand.MESSAGE_UNDO_SUCCESS));%0A%0A        //redo%0A        commandBox.runCommand(%22redo%22);%0A        currentList = TestUtil.removeTaskFromList(td.getTypicalTasks(), 6);%0A        assertTrue(taskListPanel.isListMatching(currentList));%0A        assertResultMessage(String.format(RedoCommand.MESSAGE_REDO_SUCCESS));%0A%0A    %7D%0A%0A    /**%0A     * Test for events where multiple undo/redo commands are entered, and go over the stack limit.%0A     */%0A    @Test%0A    public void assertUndoRedoFail() %7B%0A        TestTask taskToBeAdded = td.hoon;%0A        commandBox.runCommand(taskToBeAdded.getAddCommand());%0A        commandBox.runCommand(%22undo%22);%0A        assertResultMessage(UndoCommand.MESSAGE_UNDO_SUCCESS);%0A        commandBox.runCommand(%22undo%22);%0A        assertResultMessage(UndoCommand.MESSAGE_UNDO_FAILED);%0A%0A        commandBox.runCommand(%22redo%22);%0A        assertResultMessage(String.format(RedoCommand.MESSAGE_REDO_SUCCESS));%0A        commandBox.runCommand(%22redo%22);%0A        assertResultMessage(String.format(RedoCommand.MESSAGE_REDO_FAILED));%0A%0A    %7D%0A%7D%0A%0A%0A

Add test cases for undo/redo commands, sans for clear command,