コード例 #1
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        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));
        }
コード例 #2
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        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));
        }
コード例 #3
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        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));
        }
コード例 #4
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        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);
        }
コード例 #5
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        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);
        }
コード例 #6
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        public void RollBackToPreviousStep()
        {
            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);
            }

            for (int i = maximumValue - 1; i >= 0; i--)
            {
                timeline.RollBackTo(objectChangeMarkers[i]);
                Assert.AreEqual(i, obj.SomeValue);

                Assert.AreEqual(i + 1, obj.LotsOfValues.Count);

                var expected = Enumerable.Range(0, i + 1);
                Assert.That(
                    obj.LotsOfValues,
                    Is.EquivalentTo(expected));
            }
        }
コード例 #7
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        public void RemoveFromTimelineWhileDeletedBeforeMark()
        {
            var timeline = new Timeline(BuildStorageOfType);

            timeline.Mark();

            var obj = timeline.AddToTimeline(BuildObject);

            timeline.Mark();

            timeline.RemoveFromTimeline(obj.HistoryId);
            Assert.DoesNotThrow(() => timeline.RemoveFromTimeline(obj.HistoryId));
        }
コード例 #8
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        public void AddToTimelineWithMark()
        {
            var timeline = new Timeline(BuildStorageOfType);

            timeline.Mark();

            var obj = timeline.AddToTimeline(BuildObject);

            timeline.Mark();

            Assert.IsTrue(timeline.HasObjectEverExisted(obj.HistoryId));
            Assert.IsTrue(timeline.DoesObjectExistCurrently(obj.HistoryId));
        }
コード例 #9
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        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));
        }
コード例 #10
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        public void MarkWithNoObjects()
        {
            var timeline  = new Timeline(BuildStorageOfType);
            var firstMark = timeline.Mark();

            Assert.Greater(firstMark, TimeMarker.TheBeginOfTime);
            Assert.AreEqual(TimeMarker.TheBeginOfTime.Next(), firstMark);
        }
コード例 #11
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        public void RemoveFromTimelineWithUnknownId()
        {
            var timeline = new Timeline(BuildStorageOfType);

            timeline.Mark();

            Assert.DoesNotThrow(() => timeline.RemoveFromTimeline(new HistoryId()));
        }
コード例 #12
0
 /// <summary>
 /// Performs application-defined tasks associated with freeing, releasing, or
 /// resetting unmanaged resources.
 /// </summary>
 public void Dispose()
 {
     if (m_ShouldStore)
     {
         if (m_Name == null)
         {
             m_Owner.Mark(m_Dependencies);
         }
         else
         {
             m_Owner.Mark(m_Name, m_Dependencies);
         }
     }
     else
     {
         m_Owner.RollBackTo(m_Owner.Current);
     }
 }
コード例 #13
0
ファイル: TimelineTest.cs プロジェクト: rafysanchez/Apollo
        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));
        }