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 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 RollForwardToTheEnd() { var timeline = new Timeline(BuildStorageOfType); timeline.Mark(); var obj = timeline.AddToTimeline(BuildObject); var creationTime = 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(creationTime); timeline.RollForwardTo(new TimeMarker(100)); Assert.AreEqual(maximumValue - 1, obj.SomeValue); var expected = Enumerable.Range(0, maximumValue); Assert.That( obj.LotsOfValues, Is.EquivalentTo(expected)); }