public void AutoPersistHelperDisconnects()
        {
            (new TestScheduler()).With(sched => {
                var fixture    = new TestFixture();
                var manualSave = new Subject <Unit>();

                int timesSaved = 0;
                var disp       = fixture.AutoPersist(x => { timesSaved++; return(Observable.Return(Unit.Default)); }, manualSave, TimeSpan.FromMilliseconds(100));

                // No changes = no saving
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(0, timesSaved);

                // Change = one save
                fixture.IsNotNullString = "Foo";
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(1, timesSaved);

                // Two changes after dispose = no save
                disp.Dispose();
                fixture.IsNotNullString = "Foo";
                fixture.IsNotNullString = "Bar";
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(1, timesSaved);

                // Trigger save after dispose = no save
                manualSave.OnNext(Unit.Default);
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(1, timesSaved);
            });
        }
        public void AutoPersistHelperSavesOnInterval()
        {
            (new TestScheduler()).With(sched => {
                var fixture    = new TestFixture();
                var manualSave = new Subject <Unit>();

                int timesSaved = 0;
                fixture.AutoPersist(x => { timesSaved++; return(Observables.Unit); }, manualSave, TimeSpan.FromMilliseconds(100));

                // No changes = no saving
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(0, timesSaved);

                // Change = one save
                fixture.IsNotNullString = "Foo";
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(1, timesSaved);

                // Two fast changes = one save
                fixture.IsNotNullString = "Foo";
                fixture.IsNotNullString = "Bar";
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(2, timesSaved);

                // Trigger save twice = one save
                manualSave.OnNext(Unit.Default);
                manualSave.OnNext(Unit.Default);
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(3, timesSaved);
            });
        }
Esempio n. 3
0
        public void AutoPersistHelperSavesOnInterval()
        {
            (new TestScheduler()).With(sched => {
                var fixture = new TestFixture();
                var manualSave = new Subject<Unit>();

                int timesSaved = 0;
                fixture.AutoPersist(x => { timesSaved++; return Observable.Return(Unit.Default); }, manualSave, TimeSpan.FromMilliseconds(100));

                // No changes = no saving
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(0, timesSaved);

                // Change = one save
                fixture.IsNotNullString = "Foo";
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(1, timesSaved);

                // Two fast changes = one save
                fixture.IsNotNullString = "Foo";
                fixture.IsNotNullString = "Bar";
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(2, timesSaved);

                // Trigger save twice = one save
                manualSave.OnNext(Unit.Default);
                manualSave.OnNext(Unit.Default);
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(3, timesSaved);
            });
        }
Esempio n. 4
0
        public void AutoPersistHelperShouldntTriggerOnNonPersistableProperties() =>
        new TestScheduler().With(scheduler =>
        {
            var fixture    = new TestFixture();
            var manualSave = new Subject <Unit>();

            var timesSaved = 0;
            fixture.AutoPersist(
                _ =>
            {
                timesSaved++;
                return(Observables.Unit);
            },
                manualSave,
                TimeSpan.FromMilliseconds(100));

            // No changes = no saving
            scheduler.AdvanceByMs(2 * 100);
            Assert.Equal(0, timesSaved);

            // Change to not serialized = no saving
            fixture.NotSerialized = "Foo";
            scheduler.AdvanceByMs(2 * 100);
            Assert.Equal(0, timesSaved);
        });
Esempio n. 5
0
        public void AutoPersistHelperShouldntTriggerOnNonPersistableProperties()
        {
            (new TestScheduler()).With(sched => {
                var fixture = new TestFixture();
                var manualSave = new Subject<Unit>();

                int timesSaved = 0;
                fixture.AutoPersist(x => { timesSaved++; return Observable.Return(Unit.Default); }, manualSave, TimeSpan.FromMilliseconds(100));

                // No changes = no saving
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(0, timesSaved);

                // Change to not serialized = no saving
                fixture.NotSerialized = "Foo";
                sched.AdvanceByMs(2 * 100);
                Assert.Equal(0, timesSaved);
            });
        }