Пример #1
0
        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();
        }
Пример #2
0
 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();
             }
 }
Пример #3
0
 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();
             }
 }
Пример #4
0
        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");
                });
            }
        }
Пример #5
0
        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);
                });
            }
        }
Пример #6
0
        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");
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
                });
            }
        }
Пример #9
0
        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();
        }
Пример #10
0
        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();
        }
Пример #11
0
 private static ListViewItem GetSelectedPackageListItemContainer(NpmPackageInstallWindow npmWindow)
 {
     return((ListViewItem)npmWindow._packageList.ItemContainerGenerator.ContainerFromItem(npmWindow._packageList.SelectedItem));
 }