public void Should_Wait_For_Request_To_Finish_And_Then_Wait_SettleNext() { var testScheduler = new TestScheduler(); var(settler, requestSettler) = CreateSettler(testScheduler, TimeSpan.FromTicks(100), TimeSpan.FromTicks(800)); testScheduler.ScheduleAbsolute(0, () => requestSettler.OnStartRequest()); testScheduler.ScheduleAbsolute(300, () => requestSettler.OnEndRequest()); var observer = testScheduler.Start(() => settler.SettleNextInternal(), 100, 100, ReactiveTest.Disposed); observer.Messages.Should().ContainInOrder( ReactiveTest.OnNext(401, Unit.Default), ReactiveTest.OnCompleted(401, Unit.Default) ); }
public async Task SetsTheEmailFieldWhenInvalidCredentialsAreProvided() { arrangeCallToPasswordManagerWithInvalidCredentials(); var observer = TestScheduler.CreateObserver <string>(); ViewModel.Email.Subscribe(observer); ViewModel.StartPasswordManager.Execute(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, Email.Empty.ToString()), ReactiveTest.OnNext(2, InvalidEmail.ToString()) ); }
public void AddOneLabelObservableTest() { // Define the actions. _scheduler.Schedule(TimeSpan.FromTicks(10), () => _defaultTestMessage.Label = MessageLabel2); var expected = new[] { ReactiveTest.OnNext(1, MessageLabel1), ReactiveTest.OnNext(10, MessageLabel2) }; var actual = _scheduler.Start(() => _defaultTestMessage.LabelChanged, 0, 0, 1000).Messages; // Assert ReactiveAssert.AreElementsEqual(expected, actual); }
public void DoesNotDisplayAnErrormessageWhenTheUserCancelsTheRequestOnTheGoogleService() { var observer = SchedulerProvider.TestScheduler.CreateObserver <string>(); ViewModel.ErrorMessage.Subscribe(observer); LoginManager.LoginWithGoogle() .Returns(Observable.Throw <ITogglDataSource>(new GoogleLoginException(true))); ViewModel.GoogleLogin(); SchedulerProvider.TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, "") ); }
public void ChangeReceiverOnceObservableTest() { // Define the actions. _scheduler.Schedule(TimeSpan.FromTicks(10), () => _defaultTestMessage.Receiver = _testReceiver2); var expected = new[] { ReactiveTest.OnNext(1, _testReceiver1), ReactiveTest.OnNext(10, _testReceiver2), }; var actual = _scheduler.Start(() => _defaultTestMessage.ReceiverChanged, 0, 0, 1000).Messages; // Assert ReactiveAssert.AreElementsEqual(expected, actual); }
public async ThreadingTask ReturnsTrueWhenThereAreNoSuggestionsAndNoTimeEntriesAndIsNotWelcome() { PrepareIsWelcome(false); await ViewModel.Initialize(); var observer = TestScheduler.CreateObserver <bool>(); ViewModel.ShouldShowWelcomeBack.Subscribe(observer); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, false), ReactiveTest.OnNext(2, true) ); }
public async Task SetsTheCountryButtonTitleToSelectCountryWhenApiCallFails() { var observer = TestScheduler.CreateObserver <string>(); ViewModel.CountryButtonTitle.Subscribe(observer); Api.Location.Get().Returns(Observable.Throw <ILocation>(new Exception())); await ViewModel.Initialize(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, Resources.SelectCountry) ); }
public void ChangePartyTypeOnceObservableTest() { // Define the actions. _scheduler.Schedule(TimeSpan.FromTicks(10), () => _defaultTestParty.Type = Party.PartyType.Object); var expected = new[] { ReactiveTest.OnNext(1, DefaultPartyType), ReactiveTest.OnNext(10, Party.PartyType.Object) }; var actual = _scheduler.Start(() => _defaultTestParty.TypeChanged, 0, 0, 1000).Messages; // Assert ReactiveAssert.AreElementsEqual(expected, actual); }
private static void Main(string[] args) { ReactiveTest rx1 = null; ReactiveTest rx2 = null; var thread1 = new Thread(() => rx1 = new ReactiveTest()); var thread2 = new Thread(() => rx2 = new ReactiveTest()); thread1.Start(); thread2.Start(); Thread.Sleep(TimeSpan.FromSeconds(1)); thread1.Join(); thread2.Join(); rx1.Dispose(); rx2.Dispose(); }
public void Should_Timeout_If_A_Request_Takes_To_Long_SettleNext() { var testScheduler = new TestScheduler(); var(settler, requestSettler) = CreateSettler(testScheduler, TimeSpan.FromTicks(200), TimeSpan.FromTicks(800)); testScheduler.ScheduleAbsolute(0, () => requestSettler.OnStartRequest()); testScheduler.ScheduleAbsolute(ReactiveTest.Disposed, () => requestSettler.OnEndRequest()); var observer = testScheduler.Start(() => settler.SettleNextInternal(), 100, 100, ReactiveTest.Disposed); observer.Messages.Should().ContainInOrder( ReactiveTest.OnNext(902, Unit.Default), ReactiveTest.OnCompleted(902, Unit.Default) ); }
public async Task SetsThePasswordFieldWhenValidCredentialsAreProvided() { arrangeCallToPasswordManagerWithValidCredentials(); var observer = TestScheduler.CreateObserver <string>(); ViewModel.Password.Subscribe(observer); await ViewModel.StartPasswordManager(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, Password.Empty.ToString()), ReactiveTest.OnNext(2, ValidPassword.ToString()) ); }
public void SetsIsLoadingToFalse() { var observer = TestScheduler.CreateObserver <bool>(); ViewModel.IsLoading.Subscribe(observer); ViewModel.Login(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, false), ReactiveTest.OnNext(2, true), ReactiveTest.OnNext(3, false) ); }
public void SkipUntil_SourceCompletedBeforeCheckpoint_FailAndReload() { var store = new InMemoryStateStore("someId"); var engine = CreateQueryEngine(); var reactive = engine.GetReactiveService(); var source = GetTestableQbservable(reactive, "source", OnNext(100, 1), // 110 OnNext(200, 2), // 210 OnNext(300, 3), // 310 OnNext(400, 4), // 410 OnCompleted <int>(490) // 500 // crash at 600 ); Assert.IsNotNull(source); var triggeringSource = GetTestableQbservable(reactive, "triggeringSource", OnNext <int>(510, 1) // 520 ); Assert.IsNotNull(triggeringSource); var result = GetTestableQbserver <int>(reactive, "result"); Scheduler.ScheduleAbsolute(10, () => source.SkipUntil(triggeringSource).Subscribe(result, new Uri("s:/sub1"), null)); Scheduler.ScheduleAbsolute(510, () => Checkpoint(engine, store)); Scheduler.ScheduleAbsolute(600, () => RemoveQueryEngine(engine)); Scheduler.ScheduleAbsolute(800, () => Recover(CreateQueryEngine(), store)); Scheduler.Start(); var sub = GetTestableSubscribable <int>("source"); sub.Subscriptions.AssertEqual( ReactiveTest.Subscribe(10, 10 + 490), ReactiveTest.Subscribe(800, 800)); var subTrigger = GetTestableSubscribable <int>("triggeringSource"); subTrigger.Subscriptions.AssertEqual( ReactiveTest.Subscribe(10, 10 + 510), ReactiveTest.Subscribe(800, 800 + 510)); var res = GetTestableObserver <int>("result"); res.Messages.AssertEqual(); }
public void MessageTimeoutIsStartedAgainIfMessageIsUpdated() { var expected = messageA.Merge(new Message(A)); var messageSequence = testScheduler.CreateColdObservable( ReactiveTest.OnNext(MessageAOnNextTick, messageA), ReactiveTest.OnNext(3.Seconds(), expected) ); var sut = CreateKeysController(messageSequence); sut.Start(); testScheduler.AdvanceBy(6.Seconds()); messages.Single().IsDeleting.ShouldBe(false); messages.Single().ShouldBe(expected); }
public void LabelTextChangesWhenOneKeyTyped() { _labelView.IsInEditMode = true; ScheduleTypeTextInLabelView("TEST"); var expected = new[] { ReactiveTest.OnNext(1, ""), ReactiveTest.OnNext(10, "T"), ReactiveTest.OnNext(20, "TE"), ReactiveTest.OnNext(30, "TES"), ReactiveTest.OnNext(40, "TEST") }; var actual = _scheduler.Start(() => _labelView.TextChanged, 0, 0, 1000).Messages; ReactiveAssert.AreElementsEqual(expected, actual); }
public void Should_Timeout_If_A_Request_Takes_To_Long(SettlerType settlerType) { var testScheduler = new TestScheduler(); var(settler, matcher) = CreateSettlers(testScheduler, TimeSpan.FromTicks(200), TimeSpan.FromTicks(500)); matcher.ScheduleAbsoluteStart(settlerType, 0); matcher.ScheduleAbsoluteEnd(settlerType, ReactiveTest.Disposed); var observer = testScheduler.Start(() => settler.Settle(), 100, 100, ReactiveTest.Disposed); observer.Messages.Should().ContainInOrder( ReactiveTest.OnNext(601, Unit.Default), ReactiveTest.OnCompleted(802, Unit.Default) ); }
public void SetsTheErrorMessageToNothingWhenGoogleLoginWasCanceled() { var observer = TestScheduler.CreateObserver <string>(); var exception = new GoogleLoginException(true); ViewModel.ErrorMessage.Subscribe(observer); LoginManager.Login(Arg.Any <Email>(), Arg.Any <Password>()) .Returns(Observable.Throw <ITogglDataSource>(exception)); ViewModel.Login(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, "") ); }
public void Should_Wait_For_Request_To_Finish_And_Then_Wait(SettlerType settlerType) { var testScheduler = new TestScheduler(); var(settler, matcher) = CreateSettlers(testScheduler, TimeSpan.FromTicks(100), TimeSpan.FromTicks(800)); matcher.ScheduleRelativeStart(settlerType, 0); matcher.ScheduleRelativeEnd(settlerType, 300); var observer = testScheduler.Start(() => settler.Settle().Take(1), 100, 100, ReactiveTest.Disposed); observer.Messages.Should().ContainInOrder( ReactiveTest.OnNext(401, Unit.Default), ReactiveTest.OnCompleted(401, Unit.Default) ); }
public void SetsGenereicErrorForAnyOtherException() { var observer = TestScheduler.CreateObserver <string>(); ViewModel.ErrorMessage.Subscribe(observer); prepareException(new Exception()); ViewModel.Signup.Execute(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, ""), ReactiveTest.OnNext(2, Resources.GenericSignUpError) ); }
public async Task EmitsWheneverTheShouldShowOnboardingObservablesOmits() { PermissionsService.CalendarPermissionGranted.Returns(Observable.Return(false)); var observer = TestScheduler.CreateObserver <bool>(); ViewModel.SettingsAreVisible.Subscribe(observer); PermissionsService.CalendarPermissionGranted.Returns(Observable.Return(true)); ViewModel.GetStarted.Execute(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(0, false), ReactiveTest.OnNext(0, true) ); }
public void SetsIsPasswordMaskedToTrueWhenItIsFalse() { var observer = TestScheduler.CreateObserver <bool>(); ViewModel.IsPasswordMasked.Subscribe(observer); ViewModel.TogglePasswordVisibility(); ViewModel.TogglePasswordVisibility(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, true), ReactiveTest.OnNext(2, false), ReactiveTest.OnNext(3, true) ); }
public async Task SetsFailedToGetCountryToTrueWhenApiCallFails() { var observer = TestScheduler.CreateObserver <bool>(); ViewModel.IsCountryErrorVisible.Subscribe(observer); Api.Location.Get().Returns(Observable.Throw <ILocation>(new Exception())); await ViewModel.Initialize(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, false), ReactiveTest.OnNext(2, true) ); }
public void OnFuturesQuote_WithAValidContract_StreamsQuoteWithContract() { var validFuturesQuote = new FuturesQuote { Symbol = "CZ2013" }; var scheduler = new TestScheduler(); var futuresQuotes = scheduler.CreateColdObservable(ReactiveTest.OnNext(0, validFuturesQuote)); var quotesWithContractClient = new AntiCorruptionLayerObservableClient(futuresQuotes); var quotesWithContracts = scheduler.Start(() => quotesWithContractClient.Quotes); quotesWithContracts.Messages.Should().HaveCount(1); var quoteWithContract = quotesWithContracts.Messages.Single().Value.Value; quoteWithContract.Quote.ShouldBeEquivalentTo(validFuturesQuote); }
public void SetsIsLoadingToFalse() { var observer = TestScheduler.CreateObserver <bool>(); ViewModel.IsLoading.Subscribe(observer); prepareException(new Exception()); ViewModel.Signup.Execute(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, false), ReactiveTest.OnNext(2, true), ReactiveTest.OnNext(3, false) ); }
public void SetsTheIsLoadingPropertyToTrue() { var observer = TestScheduler.CreateObserver <bool>(); ViewModel.IsLoading.Subscribe(observer); UserAccessManager.SignUpWithGoogle(true, Arg.Any <int>(), Arg.Any <string>()).Returns( Observable.Never <ITogglDataSource>()); ViewModel.GoogleSignup.Execute(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, false), ReactiveTest.OnNext(2, true) ); }
public void VisibilityChangeTest() { int scheduleTicks = 10; _scheduler.Schedule(TimeSpan.FromTicks(scheduleTicks), () => _communicationDiagramView.ViewModel.IsVisible = true); var expected = new[] { ReactiveTest.OnNext(1, false), ReactiveTest.OnNext(10, true) }; var actual = _scheduler.Start(() => _communicationDiagramView.IsVisibleChanged, 0, 0, 1000).Messages; // Assert that the visibility changed as expected. ReactiveAssert.AreElementsEqual(expected, actual); }
private static IEnumerable <Recorded <Notification <T> > > ToNotificationStream <T>(IEnumerable <T> stream, Func <T, DateTimeOffset> getTimestamp, DateTimeOffset?startAt, DateTimeOffset?endAt) { // ReSharper disable once PossibleMultipleEnumeration startAt = startAt ?? getTimestamp(stream.First()); // ReSharper disable once PossibleMultipleEnumeration endAt = endAt ?? getTimestamp(stream.Last()); // ReSharper disable once PossibleMultipleEnumeration var notifications = stream.Select(x => ReactiveTest.OnNext(getTimestamp(x).Ticks - startAt.Value.Ticks, x)) .Concat(new[] { ReactiveTest.OnCompleted <T>(endAt.Value.Ticks - startAt.Value.Ticks) }) .ToArray(); return(notifications); }
public void SetsIsLoadingToFalse() { var observer = TestScheduler.CreateObserver <bool>(); ViewModel.IsLoading.Subscribe(observer); LoginManager.Login(Arg.Any <Email>(), Arg.Any <Password>()) .Returns(Observable.Throw <ITogglDataSource>(new Exception())); ViewModel.Login(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, false), ReactiveTest.OnNext(2, true), ReactiveTest.OnNext(3, false) ); }
public void SetsTheErrorMessageToGenericLoginErrorForAnyOtherException() { var observer = TestScheduler.CreateObserver <string>(); var exception = new Exception(); ViewModel.ErrorMessage.Subscribe(observer); LoginManager.Login(Arg.Any <Email>(), Arg.Any <Password>()) .Returns(Observable.Throw <ITogglDataSource>(exception)); ViewModel.Login(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, ""), ReactiveTest.OnNext(2, Resources.GenericLoginError) ); }
public void StopsTheViewModelLoadStateWhenItErrors() { var observer = TestScheduler.CreateObserver <bool>(); ViewModel.IsLoading.Subscribe(observer); LoginManager.LoginWithGoogle() .Returns(Observable.Throw <ITogglDataSource>(new GoogleLoginException(false))); ViewModel.GoogleLogin(); TestScheduler.Start(); observer.Messages.AssertEqual( ReactiveTest.OnNext(1, false), ReactiveTest.OnNext(2, true), ReactiveTest.OnNext(3, false) ); }