public async Task When_Child_Added_Measure_And_Visible_Arrange() { // This test emulates the layout sequence associated with DataGridColumnHeadersPresenter in the WCT var gridAdder = new GridAdder() { MinWidth = 5, MinHeight = 5 }; TestServices.WindowHelper.WindowContent = gridAdder; await TestServices.WindowHelper.WaitForLoaded(gridAdder); await TestServices.WindowHelper.WaitFor(() => gridAdder.WasArranged); // Needed for iOS where measurement is async if (gridAdder.Exception != null) { throw new AssertFailedException("Exception occurred", gridAdder.Exception); } var SUT = gridAdder.AddedGrid; Assert.IsNotNull(SUT); Assert.AreEqual(Visibility.Visible, SUT.Visibility); #if !__ANDROID__ && !__IOS__ // The Grid contents doesn't seem to actually display properly when added this way, but at least it should not throw an exception. Assert.AreEqual(27, SUT.ActualHeight); NumberAssert.Greater(SUT.ActualWidth, 0); #endif }
protected override void OnAppearing() { this.WhenActivated(d => { this.WhenAnyValue(v => v.ViewModel.LoadRepositoriesCommand) .Where(x => x != null) .Select(x => Unit.Default) .InvokeCommand(ViewModel.LoadRepositoriesCommand); this.Bind(ViewModel, vm => vm.Search, v => v.SearchBox.Text).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.Repositories, v => v.Repositories.ItemsSource).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.Loading, v => v.GridLoader.IsVisible).DisposeWith(d); this.WhenAnyValue(v => v.ViewModel.Adding) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(visible => { GridAdder.TranslateTo(0, visible ? 0 : 60, 500); }); this.WhenAnyValue(v => v.Repositories.SelectedItem) .ObserveOn(RxApp.MainThreadScheduler) .Where(x => x != null) .Subscribe(selected => { ViewModel.SetCurrent((GitHubRepository)selected) .Subscribe(x => Navigation.PushAsync(new PullRequestView())); }) .DisposeWith(d); Observable.FromEventPattern <EventHandler <ItemVisibilityEventArgs>, ItemVisibilityEventArgs>( x => Repositories.ItemAppearing += x, x => Repositories.ItemAppearing -= x) .Where(x => x != null) .Select(x => x.EventArgs.ItemIndex) .Select(NeedLoad) .Where(x => x) .Select(x => Unit.Default) .InvokeCommand(ViewModel.AddRepositoriesCommand).DisposeWith(d); ViewModel.ExceptionInteraction.RegisterHandler(async interaction => { await DisplayAlert("Error", interaction.Input.Message, "Ok"); interaction.SetOutput(Unit.Default); }); }); base.OnAppearing(); }
protected override void OnAppearing() { this.WhenActivated(d => { this.WhenAnyValue(v => v.ViewModel.LoadCommand) .Where(x => x != null) .Select(x => Unit.Default) .InvokeCommand(ViewModel.LoadCommand); this.OneWayBind(ViewModel, vm => vm.OpenCount, v => v.Open.Text).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.CloseCount, v => v.Closed.Text).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.PullRequests, v => v.PullRequests.ItemsSource).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.Loading, v => v.GridLoader.IsVisible).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.Repository.RepositoryName, v => v.Title, e => $"{e[0].ToString().ToUpper()}{e.Substring(1)}").DisposeWith(d); this.WhenAnyValue(v => v.ViewModel.Adding) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(visible => { GridAdder.TranslateTo(0, visible ? 0 : 60, 500); }); Observable.FromEventPattern <EventHandler <ItemVisibilityEventArgs>, ItemVisibilityEventArgs>( x => PullRequests.ItemAppearing += x, x => PullRequests.ItemAppearing -= x) .Where(x => x != null) .Select(x => x.EventArgs.ItemIndex) .Select(NeedLoad) .Where(x => x) .Select(x => Unit.Default) .InvokeCommand(ViewModel.AddCommand).DisposeWith(d); ViewModel.ExceptionInteraction.RegisterHandler(async interaction => { await DisplayAlert("Error", interaction.Input.Message, "Ok"); interaction.SetOutput(Unit.Default); }); }); base.OnAppearing(); }
protected override void OnAppearing() { this.WhenActivated(d => { this.WhenAnyValue(v => v.ViewModel.LoadCache) .Where(x => x != null) .Select(x => Unit.Default) .InvokeCommand(ViewModel.LoadCache); this.Bind(ViewModel, vm => vm.Search, v => v.SearchBox.Text).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.Repositories, v => v.Repositories.ItemsSource).DisposeWith(d); this.Bind(ViewModel, vm => vm.Selected, v => v.Repositories.SelectedItem); this.OneWayBind(ViewModel, vm => vm.ItemTreshold, v => v.Repositories.RemainingItemsThreshold).DisposeWith(d); this.BindCommand(ViewModel, vm => vm.LoadNext, v => v.Repositories, nameof(Repositories.RemainingItemsThresholdReached)).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.Loading, v => v.GridLoader.IsVisible).DisposeWith(d); this.WhenAnyValue(v => v.ViewModel.Adding) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(visible => { GridAdder.TranslateTo(0, visible ? 0 : 60, 500); }); this.WhenAnyValue(v => v.ViewModel.Selected) .Where(x => x != null) .ObserveOn(RxApp.MainThreadScheduler) .Do(x => ViewModel.Selected = null) .Do(async selected => await Navigation.PushAsync(new PullRequestView())) .Subscribe().DisposeWith(d); ViewModel.ExceptionInteraction.RegisterHandler(async interaction => { await DisplayAlert("Error", interaction.Input.Message, "Ok"); interaction.SetOutput(Unit.Default); }); }); base.OnAppearing(); }
protected override void OnAppearing() { this.WhenActivated(d => { this.WhenAnyValue(v => v.ViewModel.LoadCurrentRepository) .Where(x => x != null) .Select(x => Unit.Default) .InvokeCommand(ViewModel.LoadCurrentRepository); this.OneWayBind(ViewModel, vm => vm.OpenCount, v => v.Open.Text).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.CloseCount, v => v.Closed.Text).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.PullRequests, v => v.PullRequests.ItemsSource).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.ItemTreshold, v => v.PullRequests.RemainingItemsThreshold).DisposeWith(d); this.BindCommand(ViewModel, vm => vm.AddCommand, v => v.PullRequests, nameof(PullRequests.RemainingItemsThresholdReached)).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.Loading, v => v.GridLoader.IsVisible).DisposeWith(d); this.OneWayBind(ViewModel, vm => vm.Repository.Name, v => v.Title, e => $"{e[0].ToString().ToUpper()}{e.Substring(1)}").DisposeWith(d); this.WhenAnyValue(v => v.ViewModel.Adding) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(visible => { GridAdder.TranslateTo(0, visible ? 0 : 60, 500); }); ViewModel.ExceptionInteraction.RegisterHandler(async interaction => { await DisplayAlert("Error", interaction.Input.Message, "Ok"); interaction.SetOutput(Unit.Default); }); }); base.OnAppearing(); }