private Task TestIncludeItemAsync(KnownDataGrid grid) { Func <Task <StackWindow> > setupAsync = async() => { await JoinableTaskFactory.SwitchToMainThreadAsync(); var file = new TimeRangeFile(); await OpenAsync(JoinableTaskFactory, file, GuiApp.MainWindow, GuiApp.MainWindow.StatusBar).ConfigureAwait(true); var stackSource = file.GetStackSource(); return(stackSource.Viewer); }; Func <StackWindow, Task> cleanupAsync = async stackWindow => { await JoinableTaskFactory.SwitchToMainThreadAsync(); stackWindow.Close(); }; Func <StackWindow, Task> testDriverAsync = async stackWindow => { await JoinableTaskFactory.SwitchToMainThreadAsync(); PerfDataGrid dataGrid = await SelectTabAsync(stackWindow, grid, CancellationToken.None).ConfigureAwait(true); object selectedItem = dataGrid.Grid.Items[0]; var callTreeNodeBase = selectedItem as CallTreeNodeBase; if (callTreeNodeBase == null) { callTreeNodeBase = (selectedItem as CallTreeViewNode)?.Data; } Assert.NotNull(callTreeNodeBase); // Keep a copy of the DisplayName since setting focus can clear this information from nodes string selectedItemName = callTreeNodeBase.DisplayName; var dataGridCell = (DataGridCell)dataGrid.DisplayNameColumn.GetCellContent(selectedItem).Parent; dataGridCell.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, Environment.TickCount, MouseButton.Left) { RoutedEvent = UIElement.MouseLeftButtonDownEvent }); dataGridCell.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, Environment.TickCount, MouseButton.Left) { RoutedEvent = UIElement.MouseLeftButtonUpEvent }); await WaitForUIAsync(stackWindow.Dispatcher, CancellationToken.None); StackWindow.IncludeItemCommand.Execute(null, dataGridCell); // Wait for any background processing to complete await stackWindow.StatusBar.WaitForWorkCompleteAsync().ConfigureAwait(true); Assert.Equal("^" + Regex.Escape(selectedItemName), stackWindow.IncludeRegExTextBox.Text); }; return(RunUITestAsync(setupAsync, testDriverAsync, cleanupAsync)); }
private static async Task <PerfDataGrid> SelectTabAsync(StackWindow stackWindow, KnownDataGrid grid, CancellationToken cancellationToken) { Assert.Same(stackWindow.Dispatcher.Thread, Thread.CurrentThread); var tabControl = (TabControl)stackWindow.ByNameTab.Parent; PerfDataGrid dataGrid; switch (grid) { case KnownDataGrid.ByName: tabControl.SelectedItem = stackWindow.ByNameTab; dataGrid = stackWindow.ByNameDataGrid; break; case KnownDataGrid.CallerCalleeCallers: case KnownDataGrid.CallerCalleeFocus: case KnownDataGrid.CallerCalleeCallees: tabControl.SelectedItem = stackWindow.CallerCalleeTab; if (grid == KnownDataGrid.CallerCalleeCallers) { dataGrid = stackWindow.CallerCalleeView.CallersGrid; } else if (grid == KnownDataGrid.CallerCalleeFocus) { dataGrid = stackWindow.CallerCalleeView.FocusGrid; } else { dataGrid = stackWindow.CallerCalleeView.CalleesGrid; } break; case KnownDataGrid.CallTree: tabControl.SelectedItem = stackWindow.CallTreeTab; dataGrid = stackWindow.CallTreeDataGrid; break; case KnownDataGrid.Callers: tabControl.SelectedItem = stackWindow.CallersTab; dataGrid = stackWindow.CallersDataGrid; break; case KnownDataGrid.Callees: tabControl.SelectedItem = stackWindow.CalleesTab; dataGrid = stackWindow.CalleesDataGrid; break; default: throw new ArgumentException("Unsupported data grid.", nameof(grid)); } await WaitForUIAsync(stackWindow.Dispatcher, cancellationToken); if (!dataGrid.Grid.HasItems) { PerfDataGrid gridToDoubleClick = null; if (grid == KnownDataGrid.CallerCalleeCallers) { gridToDoubleClick = stackWindow.CallerCalleeView.CalleesGrid; } else if (grid == KnownDataGrid.CallerCalleeCallees) { gridToDoubleClick = stackWindow.CallerCalleeView.CallersGrid; } if (gridToDoubleClick?.Grid.HasItems ?? false) { var itemToDoubleClick = gridToDoubleClick.Grid.Items[0]; var cellToDoubleClick = (DataGridCell)gridToDoubleClick.DisplayNameColumn.GetCellContent(itemToDoubleClick).Parent; var border = (Border)VisualTreeHelper.GetChild(cellToDoubleClick, 0); var textBlock = (TextBlock)VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(border, 0), 0), 0); Point controlCenter = new Point(textBlock.ActualWidth / 2, textBlock.ActualHeight / 2); Point controlCenterOnView = textBlock.TranslatePoint(controlCenter, (UIElement)Helpers.RootVisual(textBlock)); Point controlCenterOnDevice = PresentationSource.FromDependencyObject(Helpers.RootVisual(textBlock)).CompositionTarget.TransformToDevice.Transform(controlCenterOnView); RaiseMouseInputReportEvent(textBlock, Environment.TickCount, (int)controlCenterOnDevice.X, (int)controlCenterOnDevice.Y, 0); gridToDoubleClick.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, Environment.TickCount, MouseButton.Left) { RoutedEvent = Control.MouseDoubleClickEvent, Source = textBlock }); await WaitForUIAsync(stackWindow.Dispatcher, cancellationToken); } } return(dataGrid); }