public void OnThreadUnsafeObject_WhenChangesPerformedOnNestedAndUndoPerformedFormOtherThread_ExceptionIsThrown()
        {
            ThreadUnsafeTrackedObject root = new ThreadUnsafeTrackedObject();

            root.Nested = new NestedTrackedObject();

            var restorePoint = ObjectTracker.SetRestorePoint(root);

            root.Nested.S1 = "asd";
            root.Nested.S2 = "dfg";

            try
            {
                Task.Factory.StartNew(() => ObjectTracker.UndoTo(root, restorePoint)).Wait();
            }
            catch (AggregateException aggrExc)
            {
                if (aggrExc.InnerExceptions.Count == 1)
                {
                    throw aggrExc.InnerExceptions[0];
                }
                else
                {
                    throw;
                }
            }
        }
        public void OnThreadUnsafeObject_WhenUndoPerformedFormTheSameThread_Success()
        {
            ThreadUnsafeTrackedObject root = new ThreadUnsafeTrackedObject();

            var restorePoint = ObjectTracker.SetRestorePoint(root);

            root.S1 = "asd";
            root.S2 = "dfg";

            ObjectTracker.UndoTo(root, restorePoint);

            Assert.AreEqual(null, root.S1);
            Assert.AreEqual(null, root.S2);
        }
        public void OnThreadUnsafeObject_WhenChangesPerformedOnNestedAndUndoPerformedFormTheSameThread_Success()
        {
            ThreadUnsafeTrackedObject root = new ThreadUnsafeTrackedObject();
            root.Nested = new NestedTrackedObject();

            var restorePoint = ObjectTracker.SetRestorePoint(root);

            root.Nested.S1 = "asd";
            root.Nested.S2 = "dfg";

            ObjectTracker.UndoTo( root, restorePoint );

            Assert.AreEqual(null, root.Nested.S1);
            Assert.AreEqual(null, root.Nested.S1);
        }
        public void OnThreadUnsafeObject_WhenChangesPerformedOnNestedAndUndoPerformedFormOtherThread_ExceptionIsThrown()
        {
            ThreadUnsafeTrackedObject root = new ThreadUnsafeTrackedObject();
            root.Nested = new NestedTrackedObject();

            var restorePoint = ObjectTracker.SetRestorePoint(root);

            root.Nested.S1 = "asd";
            root.Nested.S2 = "dfg";

            try
            {
                Task.Factory.StartNew(() => ObjectTracker.UndoTo(root, restorePoint)).Wait();
            }
            catch (AggregateException aggrExc)
            {
                if (aggrExc.InnerExceptions.Count == 1) throw aggrExc.InnerExceptions[0];
                else throw;
            }
        }