public void MarkClearsForwardHistory() { var timeline = new Timeline(BuildStorageOfType); var firstMark = timeline.Mark(); var obj = timeline.AddToTimeline(BuildObject); timeline.Mark(); timeline.RemoveFromTimeline(obj.HistoryId); var thirdMark = timeline.Mark(); timeline.RollBackTo(firstMark); Assert.IsTrue(timeline.HasObjectEverExisted(obj.HistoryId)); Assert.IsFalse(timeline.DoesObjectExistCurrently(obj.HistoryId)); timeline.AddToTimeline(BuildObject); timeline.Mark(); Assert.IsFalse(timeline.HasObjectEverExisted(obj.HistoryId)); Assert.IsFalse(timeline.DoesObjectExistCurrently(obj.HistoryId)); timeline.RollForwardTo(thirdMark); Assert.IsFalse(timeline.HasObjectEverExisted(obj.HistoryId)); Assert.IsFalse(timeline.DoesObjectExistCurrently(obj.HistoryId)); }
public void RollForwardWithLocalChange() { var timeline = new Timeline(BuildStorageOfType); timeline.Mark(); var obj = timeline.AddToTimeline(BuildObject); timeline.Mark(); obj.SomeValue = 1; obj.LotsOfValues.Add(2); var firstChange = timeline.Mark(); obj.SomeValue = 2; obj.LotsOfValues.Add(4); var secondChange = timeline.Mark(); timeline.RollBackTo(firstChange); obj.SomeValue = 3; obj.LotsOfValues.Add(8); var otherObj = timeline.AddToTimeline(BuildObject); timeline.RollForwardTo(secondChange); Assert.AreEqual(2, obj.SomeValue); Assert.That( obj.LotsOfValues, Is.EquivalentTo(new[] { 2, 4 })); Assert.IsFalse(timeline.DoesObjectExistCurrently(otherObj.HistoryId)); Assert.IsFalse(timeline.HasObjectEverExisted(otherObj.HistoryId)); }
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); }
public void RollBackToBeforeBeginning() { var timeline = new Timeline(BuildStorageOfType); timeline.Mark(); var obj = timeline.AddToTimeline(BuildObject); timeline.Mark(); var objectChangeMarkers = new List <TimeMarker>(); int maximumValue = 10; for (int i = 0; i < maximumValue; i++) { obj.SomeValue = i; obj.LotsOfValues.Add(i); var marker = timeline.Mark(); objectChangeMarkers.Add(marker); } timeline.RollBackTo(TimeMarker.TheBeginOfTime); Assert.IsTrue(timeline.HasObjectEverExisted(obj.HistoryId)); Assert.IsFalse(timeline.DoesObjectExistCurrently(obj.HistoryId)); // Remember that the obj has been cut from the timeline but because // we have a reference to it, it's not dead yet. However the storage // should have been rolled back Assert.AreEqual(0, obj.SomeValue); Assert.AreEqual(0, obj.LotsOfValues.Count); }
public void AddToTimelineWithoutMark() { var timeline = new Timeline(BuildStorageOfType); timeline.Mark(); var obj = timeline.AddToTimeline(BuildObject); Assert.IsNotNull(obj); Assert.IsTrue(timeline.HasObjectEverExisted(obj.HistoryId)); Assert.IsTrue(timeline.DoesObjectExistCurrently(obj.HistoryId)); }
public void DeleteFromTimelineAtSameTimeAsCreation() { var timeline = new Timeline(BuildStorageOfType); timeline.Mark(); var obj = timeline.AddToTimeline <MockHistoryObject>(BuildObject); timeline.RemoveFromTimeline(obj.HistoryId); Assert.IsFalse(timeline.HasObjectEverExisted(obj.HistoryId)); Assert.IsFalse(timeline.DoesObjectExistCurrently(obj.HistoryId)); }
public void RemoveFromTimelineBeforeMark() { var timeline = new Timeline(BuildStorageOfType); timeline.Mark(); var obj = timeline.AddToTimeline(BuildObject); timeline.Mark(); timeline.RemoveFromTimeline(obj.HistoryId); Assert.IsTrue(timeline.HasObjectEverExisted(obj.HistoryId)); Assert.IsFalse(timeline.DoesObjectExistCurrently(obj.HistoryId)); }