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); }); }
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); }); }
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); });
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); }); }