Exemple #1
0
        public void Invoking_Redo_Should_Invoke_Redo_Action_And_Push_State_To_Undos()
        {
            int undoCount = 0;
            int redoCount = 0;
            var target    = new StackHistory();

            using (var helper = new HistoryHelper(target))
            {
                target.Snapshot(() => undoCount++, () => redoCount++);
                var undo1   = target.Undos.Peek();
                var result1 = target.Undo();
                var redo1   = target.Redos.Peek();
                var result2 = target.Redo();
                Assert.Single(target.Undos);
                Assert.Empty(target.Redos);
                Assert.True(result1);
                Assert.True(result2);
                Assert.Equal(new bool[] { true, false, true }, helper.CanUndos.ToArray());
                Assert.Equal(new bool[] { true, false }, helper.CanRedos.ToArray());
                Assert.Equal(new bool[] { true, true, true }, helper.CanClears.ToArray());

                var undo2 = target.Undos.Peek();
                Assert.Equal(undo1, undo2);
                Assert.Equal(undo1, redo1);
                Assert.Equal(1, undoCount);
                Assert.Equal(1, redoCount);
                Assert.True(result1);
            }
        }
        public void Invoking_Redo_Should_Not_Throw_When_Redos_Are_Empty()
        {
            var target = new StackHistory();

            using (var helper = new HistoryHelper(target))
            {
                var result = target.Redo();
                Assert.False(result);
                Assert.Equal(new bool[] { }, helper.CanUndos.ToArray());
                Assert.Equal(new bool[] { }, helper.CanRedos.ToArray());
                Assert.Equal(new bool[] { }, helper.CanClears.ToArray());
            }
        }
        public void First_Snapshot_Should_Push_One_Undo_State()
        {
            var target = new StackHistory();

            using (var helper = new HistoryHelper(target))
            {
                target.Snapshot(() => { }, () => { });
                Assert.Single(target.Undos);
                Assert.Empty(target.Redos);
                Assert.Equal(new bool[] { true }, helper.CanUndos.ToArray());
                Assert.Equal(new bool[] { }, helper.CanRedos.ToArray());
                Assert.Equal(new bool[] { true }, helper.CanClears.ToArray());
            }
        }
        public void Undos_And_Redos_Shuould_Be_Initialized()
        {
            var target = new StackHistory();

            using (var helper = new HistoryHelper(target))
            {
                Assert.NotNull(target.Undos);
                Assert.NotNull(target.Redos);
                Assert.Empty(target.Undos);
                Assert.Empty(target.Redos);
                Assert.False(target.IsPaused);
                Assert.Equal(new bool[] { }, helper.CanUndos.ToArray());
                Assert.Equal(new bool[] { }, helper.CanRedos.ToArray());
                Assert.Equal(new bool[] { }, helper.CanClears.ToArray());
            }
        }
        public void Snapshot_Should_Clear_Redos()
        {
            var target = new StackHistory();

            using (var helper = new HistoryHelper(target))
            {
                target.Snapshot(() => { }, () => { });
                Assert.Single(target.Undos);
                Assert.Empty(target.Redos);

                var result = target.Undo();
                Assert.Empty(target.Undos);
                Assert.Single(target.Redos);
                Assert.True(result);

                target.Snapshot(() => { }, () => { });
                Assert.Single(target.Undos);
                Assert.Empty(target.Redos);
                Assert.Equal(new bool[] { true, false, true }, helper.CanUndos.ToArray());
                Assert.Equal(new bool[] { true, false }, helper.CanRedos.ToArray());
                Assert.Equal(new bool[] { true, true, true }, helper.CanClears.ToArray());
            }
        }
        public void Dispose_Should_Release_Allocated_Resources()
        {
            var target = new StackHistory();

            using (var helper = new HistoryHelper(target))
            {
                target.Snapshot(() => { }, () => { });
                target.Snapshot(() => { }, () => { });
                var result = target.Undo();
                Assert.Single(target.Undos);
                Assert.Single(target.Redos);
                Assert.True(result);

                target.Dispose();

                Assert.Empty(target.Undos);
                Assert.Empty(target.Redos);

                Assert.Throws <ObjectDisposedException>(() => target.CanUndo.Subscribe(_ => { }));
                Assert.Throws <ObjectDisposedException>(() => target.CanRedo.Subscribe(_ => { }));
                Assert.Throws <ObjectDisposedException>(() => target.CanClear.Subscribe(_ => { }));
            }
        }
        public void Dispose_Should_Release_Allocated_Resources()
        {
            var target = new StackHistory();

            using (var helper = new HistoryHelper(target))
            {
                target.Snapshot(() => { }, () => { });
                target.Snapshot(() => { }, () => { });
                var result = target.Undo();
                Assert.Equal(1, target.Undos.Count);
                Assert.Equal(1, target.Redos.Count);
                Assert.Equal(true, result);

                target.Dispose();

                Assert.Null(target.Undos);
                Assert.Null(target.Redos);

                Assert.Throws(typeof(ObjectDisposedException), () => target.CanUndo.Subscribe(_ => { }));
                Assert.Throws(typeof(ObjectDisposedException), () => target.CanRedo.Subscribe(_ => { }));
                Assert.Throws(typeof(ObjectDisposedException), () => target.CanClear.Subscribe(_ => { }));
            }
        }