Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }