public void TestDeletionsUndoRedo() { // Ensure the recorder is in its default states. Assert.AreEqual(false, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); // Add models into workspace, make sure they exist. workspace.AddModel(new DummyModel(1, 10)); workspace.AddModel(new DummyModel(2, 20)); Assert.AreNotEqual(null, workspace.GetModel(1)); Assert.AreNotEqual(null, workspace.GetModel(2)); // Make sure we can now undo. Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); // Delete the inserted models and make sure they're gone. workspace.RemoveModels(new int[] { 1, 2 }); Assert.AreEqual(null, workspace.GetModel(1)); Assert.AreEqual(null, workspace.GetModel(2)); // Make sure we can now undo. Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); recorder.Undo(); // Undo the deletion (undo's still possible). Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(true, recorder.CanRedo); // Make sure the deletion has been undone. Assert.AreNotEqual(null, workspace.GetModel(1)); Assert.AreNotEqual(null, workspace.GetModel(2)); recorder.Undo(); // Undo the creation. Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(true, recorder.CanRedo); // Make sure the creation of '2' has been undone. Assert.AreNotEqual(null, workspace.GetModel(1)); Assert.AreEqual(null, workspace.GetModel(2)); recorder.Undo(); // Undo the creation. Assert.AreEqual(false, recorder.CanUndo); Assert.AreEqual(true, recorder.CanRedo); // Make sure the creation of '1' has been undone. Assert.AreEqual(null, workspace.GetModel(1)); Assert.AreEqual(null, workspace.GetModel(2)); recorder.Redo(); // Redo the creation of '1'. Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(true, recorder.CanRedo); // Make sure the creation of '1' has been redone. Assert.AreNotEqual(null, workspace.GetModel(1)); Assert.AreEqual(null, workspace.GetModel(2)); recorder.Redo(); // Redo the creation of '2'. Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(true, recorder.CanRedo); // Make sure the creation of '2' has been redone. Assert.AreNotEqual(null, workspace.GetModel(1)); Assert.AreNotEqual(null, workspace.GetModel(2)); recorder.Redo(); // Redo the deletion. Assert.AreEqual(true, recorder.CanUndo); Assert.AreEqual(false, recorder.CanRedo); // Make sure the model has been deleted. Assert.AreEqual(null, workspace.GetModel(1)); Assert.AreEqual(null, workspace.GetModel(2)); }