public void RollBackFromDeath() { var timeline = new Timeline(BuildStorageOfType); timeline.Mark(); var obj = timeline.AddToTimeline(BuildObject); timeline.Mark(); int maximumValue = 10; obj.SomeValue = maximumValue; for (int i = 0; i < maximumValue; i++) { obj.LotsOfValues.Add(i); } var changeMarker = timeline.Mark(); timeline.RemoveFromTimeline(obj.HistoryId); timeline.Mark(); Assert.IsTrue(timeline.HasObjectEverExisted(obj.HistoryId)); Assert.IsFalse(timeline.DoesObjectExistCurrently(obj.HistoryId)); timeline.RollBackTo(changeMarker); var restoredObj = timeline.IdToObject <MockHistoryObject>(obj.HistoryId); Assert.IsNotNull(restoredObj); Assert.AreNotSame(obj, restoredObj); Assert.AreEqual(obj.HistoryId, restoredObj.HistoryId); Assert.AreEqual(maximumValue, restoredObj.SomeValue); Assert.AreEqual(maximumValue, restoredObj.LotsOfValues.Count); }