Пример #1
0
        public void LargeOperationTest()
        {
            AggregateTrackedObject root = new AggregateTrackedObject();

            root.DependentTrackedObject = new SimpleTrackedObject();

            var to = (ITrackedObject)root;

            using (ObjectTracker.StartAtomicOperation(to, "name"))
            {
                root.ChangeValuesWithDependent(1, 2, 3);
                root.ChangeValues(3, 4, 5);
                root.DependentTrackedObject.ChangeValues(6, 7, 8);
            }

            to.Tracker.Undo();

            Assert.AreEqual(0, root.P1);
            Assert.AreEqual(0, root.P2);
            Assert.AreEqual(0, root.P3);

            Assert.AreEqual(0, root.DependentTrackedObject.P1);
            Assert.AreEqual(0, root.DependentTrackedObject.P2);
            Assert.AreEqual(0, root.DependentTrackedObject.P3);
        }
Пример #2
0
        public void NamedChunkTest()
        {
            SimpleTrackedObject to = new SimpleTrackedObject();
            var sot = (ITrackedObject)to;

            using (ObjectTracker.StartAtomicOperation(sot, "name"))
            {
                to.ChangeValues(4, 5, 6);
                to.ChangeValues(7, 8, 9);
                to.ChangeValues(10, 11, 12);
            }

            sot.Tracker.Undo();
            Assert.AreEqual(0, to.P1);
            Assert.AreEqual(0, to.P2);
            Assert.AreEqual(0, to.P3);

            sot.Tracker.Redo();

            Assert.AreEqual(10, to.P1);
            Assert.AreEqual(11, to.P2);
            Assert.AreEqual(12, to.P3);

            to.ChangeValues(1, 2, 3);

            sot.Tracker.Undo();

            Assert.AreEqual(10, to.P1);
            Assert.AreEqual(11, to.P2);
            Assert.AreEqual(12, to.P3);

            sot.Tracker.Redo();

            Assert.AreEqual(1, to.P1);
            Assert.AreEqual(2, to.P2);
            Assert.AreEqual(3, to.P3);
        }