public void ManageModules(DependencyType dependencyType = DependencyType.Standard) { CheckNotDisposed(); // Probably overkill to check out before the user actually makes changes, but this is the easiest // and most reliable in the current codebase. if (!EnsurePackageJsonCheckedOut()) { ErrorHelper.ReportPackageJsonNotCheckedOut(Application.Current.MainWindow); return; } if (this.NpmController.RootPackage == null) { this.NpmController.Refresh(); if (this.NpmController.RootPackage == null) { MessageBox.Show(string.Format(CultureInfo.CurrentCulture, Resources.NodeModulesCouldNotParsePackageJsonErrorMessageText, NodejsConstants.PackageJsonFile)); return; } } using (var npmWorker = new NpmWorker(this.NpmController)) using (var manager = new NpmPackageInstallWindow(this.NpmController, npmWorker, dependencyType)) { manager.Owner = Application.Current.MainWindow; manager.ShowModal(); } ReloadHierarchy(); }
private void ExecNpmInstallNew(WorkspaceVisualNodeBase node) { using (var npmController = this.CreateController(node.Workspace)) using (var npmWorker = new NpmWorker(npmController)) using (var manager = new NpmPackageInstallWindow(npmController, npmWorker)) { manager.ShowModal(); } }
private void ExecNpmInstallNew(string filePath) { using (var npmController = this.CreateController(filePath)) using (var npmWorker = new NpmWorker(npmController)) using (var manager = new NpmPackageInstallWindow(npmController, npmWorker)) { manager.ShowModal(); } }
public void NpmUIInitialization() { using (var app = new VisualStudioApp()) { // Initialize call is required because NTVS does not autoload its package // We may not be on UI thread, but Dev11 and Dev12 know how to sort that out. app.ServiceProvider.GetUIThread().Invoke(() => { NpmPackageInstallWindow npmWindow = OpenNpmWindowAndWaitForReady(); Assert.IsTrue(npmWindow.FilterTextBox.IsKeyboardFocused, "FilterTextBox should be keyboard focused"); Assert.AreEqual(0, npmWindow._packageList.SelectedIndex, "First item in package list should be selected"); }); } }
public void NpmUIArrowKeyBehavior() { using (var app = new VisualStudioApp()) { app.ServiceProvider.GetUIThread().Invoke(() => { NpmPackageInstallWindow npmWindow = OpenNpmWindowAndWaitForReady(); System.Windows.Input.Keyboard.Focus(npmWindow.FilterTextBox); TestUtilities.UI.Keyboard.PressAndRelease(Key.Down); WaitForUIInputIdle(); var selectedItem = GetSelectedPackageListItemContainer(npmWindow); Assert.IsTrue(selectedItem.IsKeyboardFocused, "Focus should be on newly selected item"); Assert.AreEqual(0, npmWindow._packageList.SelectedIndex); TestUtilities.UI.Keyboard.PressAndRelease(Key.Down); WaitForUIInputIdle(); Assert.AreEqual(1, npmWindow._packageList.SelectedIndex); npmWindow.FilterTextBox.Focus(); TestUtilities.UI.Keyboard.PressAndRelease(Key.Up); WaitForUIInputIdle(); Assert.IsTrue(npmWindow.FilterTextBox.IsKeyboardFocused, "Focus should remain on filter box"); Assert.AreEqual(1, npmWindow._packageList.SelectedIndex, "Pressing up while in filter box should maintain current selection"); selectedItem = GetSelectedPackageListItemContainer(npmWindow); selectedItem.Focus(); TestUtilities.UI.Keyboard.PressAndRelease(Key.Up); TestUtilities.UI.Keyboard.PressAndRelease(Key.Up); WaitForUIInputIdle(); Assert.IsTrue(npmWindow.FilterTextBox.IsKeyboardFocused, "Focus should move to filter textbox after pressing up key while on topmost package is selected"); TestUtilities.UI.Keyboard.PressAndRelease(Key.Up); WaitForUIInputIdle(); Assert.IsTrue(npmWindow.FilterTextBox.IsKeyboardFocused, "Focus should remain on textbox while pressing up when topmost package is selected"); Assert.IsFalse(npmWindow.InstallButton.IsEnabled, "Install button should not be enabled when filter box has focus"); TestUtilities.UI.Keyboard.PressAndRelease(Key.Enter); WaitForUIInputIdle(); selectedItem = GetSelectedPackageListItemContainer(npmWindow); Assert.IsTrue(selectedItem.IsKeyboardFocused, "Focus should be on newly selected item"); Assert.AreEqual(0, npmWindow._packageList.SelectedIndex); }); } }
private void WaitForPackageListItemsToAppear(NpmPackageInstallWindow npmWindow) { for (int i = 0; i < 100; i++) { if (npmWindow._packageList.Items.Count > 0) { return; } Dispatcher.CurrentDispatcher.Invoke(() => { System.Threading.Thread.Sleep(100); }, DispatcherPriority.ApplicationIdle); } Assert.Fail("Package list items took too long to appear"); }
private NpmPackageInstallWindow OpenNpmWindowAndWaitForReady() { var npmControllerMock = GetNpmControllerMock(); NpmPackageInstallWindow npmWindow = new NpmPackageInstallWindow(npmControllerMock.Object, new NpmOutputViewModel(npmControllerMock.Object)); npmWindow.Show(); WaitForUIInputIdle(); TestUtilities.UI.Keyboard.PressAndRelease(Key.M); WaitForUIInputIdle(); WaitForPackageListItemsToAppear(npmWindow); return(npmWindow); }
public void NpmUITabKeyBehavior() { using (var app = new VisualStudioApp()) { app.ServiceProvider.GetUIThread().Invoke(() => { NpmPackageInstallWindow npmWindow = OpenNpmWindowAndWaitForReady(); npmWindow.FilterTextBox.Focus(); WaitForUIInputIdle(); TestUtilities.UI.Keyboard.PressAndRelease(Key.Tab); WaitForUIInputIdle(); var selectedItem = GetSelectedPackageListItemContainer(npmWindow); Assert.IsTrue(selectedItem.IsKeyboardFocused); // Install button disabled, must key down to select "installable" package TestUtilities.UI.Keyboard.PressAndRelease(Key.Down); TestUtilities.UI.Keyboard.PressAndRelease(Key.Tab); WaitForUIInputIdle(); Assert.IsTrue(npmWindow.DependencyComboBox.IsKeyboardFocused); TestUtilities.UI.Keyboard.PressAndRelease(Key.Tab); WaitForUIInputIdle(); Assert.IsTrue(npmWindow.SaveToPackageJsonCheckbox.IsKeyboardFocused); TestUtilities.UI.Keyboard.PressAndRelease(Key.Tab); WaitForUIInputIdle(); Assert.IsTrue(npmWindow.SelectedVersionComboBox.IsKeyboardFocused); TestUtilities.UI.Keyboard.PressAndRelease(Key.Tab); WaitForUIInputIdle(); Assert.IsTrue(npmWindow.ArgumentsTextBox.IsKeyboardFocused); TestUtilities.UI.Keyboard.PressAndRelease(Key.Tab); WaitForUIInputIdle(); Assert.IsTrue(npmWindow.InstallButton.IsKeyboardFocused); }); } }
public void ManageModules(DependencyType dependencyType = DependencyType.Standard, bool isGlobal = false) { CheckNotDisposed(); if (NpmController.RootPackage == null) { NpmController.Refresh(); if (NpmController.RootPackage == null) { MessageBox.Show(String.Format("Unable to parse {0} from your project. Please fix any errors and try again.", NodejsConstants.PackageJsonFile)); return; } } using (var executeVm = new NpmOutputViewModel(NpmController)) using (var manager = new NpmPackageInstallWindow(NpmController, executeVm, dependencyType, isGlobal)) { manager.Owner = System.Windows.Application.Current.MainWindow; manager.ShowModal(); } ReloadHierarchy(); }
public void ManageModules(DependencyType dependencyType = DependencyType.Standard) { CheckNotDisposed(); if (NpmController.RootPackage == null) { NpmController.Refresh(); if (NpmController.RootPackage == null) { MessageBox.Show(SR.GetString(SR.NodeModulesCouldNotParsePackageJsonErrorMessageText, NodejsConstants.PackageJsonFile)); return; } } using (var executeVm = new NpmOutputViewModel(NpmController)) using (var manager = new NpmPackageInstallWindow(NpmController, executeVm, dependencyType)) { manager.Owner = System.Windows.Application.Current.MainWindow; manager.ShowModal(); } ReloadHierarchy(); }
private static ListViewItem GetSelectedPackageListItemContainer(NpmPackageInstallWindow npmWindow) { return((ListViewItem)npmWindow._packageList.ItemContainerGenerator.ContainerFromItem(npmWindow._packageList.SelectedItem)); }