public void CustomCommandsRequiredPackages() { using (var app = new PythonVisualStudioApp()) using (var dis = app.SelectDefaultInterpreter(PythonVersion, "virtualenv")) { PythonProjectNode node; EnvDTE.Project proj; OpenProject(app, "CommandRequirePackages.sln", out node, out proj); string envName; var env = app.CreateVirtualEnvironment(proj, out envName); env.Select(); app.Dte.ExecuteCommand("Python.ActivateEnvironment"); // Ensure that no error dialog appears app.WaitForNoDialog(TimeSpan.FromSeconds(5.0)); // First, execute the command and cancel it. var task = ExecuteAsync(node, "Require Packages"); try { var dialogHandle = app.WaitForDialog(task); if (dialogHandle == IntPtr.Zero) { if (task.IsFaulted && task.Exception != null) { Assert.Fail("Unexpected exception in package install confirmation dialog:\n{0}", task.Exception); } else { Assert.AreNotEqual(IntPtr.Zero, dialogHandle); } } using (var dialog = new AutomationDialog(app, AutomationElement.FromHandle(dialogHandle))) { var label = dialog.FindByAutomationId("CommandLink_1000"); Assert.IsNotNull(label); string expectedLabel = "The following packages will be installed using pip:\r\n" + "\r\n" + "ptvsd\r\n" + "azure==0.1"; ; Assert.AreEqual(expectedLabel, label.Current.HelpText); dialog.Cancel(); try { task.Wait(1000); Assert.Fail("Command was not canceled after dismissing the package install confirmation dialog"); } catch (AggregateException ex) { if (!(ex.InnerException is TaskCanceledException)) { throw; } } } } finally { if (!task.IsCanceled && !task.IsCompleted && !task.IsFaulted) { if (task.Wait(10000)) { task.Dispose(); } } else { task.Dispose(); } } // Then, execute command and allow it to proceed. task = ExecuteAsync(node, "Require Packages"); try { var dialogHandle = app.WaitForDialog(task); if (dialogHandle == IntPtr.Zero) { if (task.IsFaulted && task.Exception != null) { Assert.Fail("Unexpected exception in package install confirmation dialog:\n{0}", task.Exception); } else { Assert.AreNotEqual(IntPtr.Zero, dialogHandle); } } using (var dialog = new AutomationDialog(app, AutomationElement.FromHandle(dialogHandle))) { dialog.ClickButtonAndClose("CommandLink_1000", nameIsAutomationId: true); } task.Wait(); var ver = PythonVersion.Version.ToVersion(); ExpectOutputWindowText(app, string.Format("pass {0}.{1}", ver.Major, ver.Minor)); } finally { if (!task.IsCanceled && !task.IsCompleted && !task.IsFaulted) { if (task.Wait(10000)) { task.Dispose(); } } else { task.Dispose(); } } } }
public void VirtualEnvironmentReplWorkingDirectory() { using (var app = new PythonVisualStudioApp()) using (var dis = Init(app)) { var project = CreateTemporaryProject(app); string envName; var env = app.CreateVirtualEnvironment(project, out envName); EnvironmentReplWorkingDirectoryTest(app, project, env, envName); } }
public void InstallUninstallPackage() { using (var app = new PythonVisualStudioApp()) using (var dis = Init(app)) { var project = CreateTemporaryProject(app); string envName; var env = app.CreateVirtualEnvironment(project, out envName); env.Select(); using (var installPackage = AutomationDialog.FromDte(app, "Python.InstallPackage")) { var packageName = new TextBox(installPackage.FindByAutomationId("Name")); packageName.SetValue("azure==0.6.2"); installPackage.ClickButtonAndClose("OK", nameIsAutomationId: true); } var azure = app.SolutionExplorerTreeView.WaitForChildOfProject( project, SR.GetString(SR.Environments), envName, "azure (0.6.2)" ); azure.Select(); using (var confirmation = AutomationDialog.FromDte(app, "Edit.Delete")) { confirmation.OK(); } app.SolutionExplorerTreeView.WaitForChildOfProjectRemoved( project, SR.GetString(SR.Environments), envName, "azure (0.6.2)" ); } }
public void NoGlobalSitePackages() { using (var app = new PythonVisualStudioApp()) using (var dis = Init(app)) { var project = CreateTemporaryProject(app); string envName, envPath; var env = app.CreateVirtualEnvironment(project, out envName, out envPath); env.Select(); // Need to wait for analysis to complete before checking database for (int retries = 120; Process.GetProcessesByName("Microsoft.PythonTools.Analyzer").Any() && retries > 0; --retries) { Thread.Sleep(1000); } // Need to wait some more for the database to be loaded. Thread.Sleep(5000); // Ensure virtualenv_support is NOT available in the virtual environment. var interp = project.GetPythonProject().GetInterpreter(); Assert.IsNull(interp.ImportModule("virtualenv_support")); } }
public void CreateVEnv() { using (var app = new PythonVisualStudioApp()) using (var dis = Init3(app)) { if (dis.CurrentDefault.FindModules("virtualenv").Contains("virtualenv")) { Pip.Uninstall(app.ServiceProvider, dis.CurrentDefault, "virtualenv", false).Wait(); } Assert.AreEqual(0, Microsoft.PythonTools.Analysis.ModulePath.GetModulesInLib(dis.CurrentDefault) .Count(mp => mp.FullName == "virtualenv"), string.Format("Failed to uninstall 'virtualenv' from {0}", dis.CurrentDefault.Configuration.PrefixPath) ); var project = CreateTemporaryProject(app); string envName, envPath; var env = app.CreateVirtualEnvironment(project, out envName, out envPath); Assert.IsNotNull(env); Assert.IsNotNull(env.Element); Assert.AreEqual(string.Format("env (Python {0}3.{1})", dis.CurrentDefault.Configuration.Architecture == ProcessorArchitecture.Amd64 ? "64-bit " : "", dis.CurrentDefault.Configuration.Version.Minor ), envName); } }
public void RemoveVirtualEnv() { using (var app = new PythonVisualStudioApp()) using (var dis = Init(app)) { var project = CreateTemporaryProject(app); string envName, envPath; var env = app.CreateVirtualEnvironment(project, out envName, out envPath); env.Select(); using (var removeDeleteDlg = RemoveItemDialog.FromDte(app)) { removeDeleteDlg.Remove(); } app.OpenSolutionExplorer().WaitForChildOfProjectRemoved( project, SR.GetString(SR.Environments), envName ); var projectHome = (string)project.Properties.Item("ProjectHome").Value; envPath = Path.Combine(projectHome, envPath); Assert.IsTrue(Directory.Exists(envPath), envPath); } }
public void DeleteVirtualEnv() { using (var app = new PythonVisualStudioApp()) using (var dis = Init(app)) { var options = app.GetService<PythonToolsService>().GeneralOptions; var oldAutoAnalyze = options.AutoAnalyzeStandardLibrary; app.OnDispose(() => { options.AutoAnalyzeStandardLibrary = oldAutoAnalyze; options.Save(); }); options.AutoAnalyzeStandardLibrary = false; options.Save(); var project = CreateTemporaryProject(app); string envName, envPath; TreeNode env; using (var ps = new ProcessScope("Microsoft.PythonTools.Analyzer")) { env = app.CreateVirtualEnvironment(project, out envName, out envPath); Assert.IsFalse(ps.WaitForNewProcess(TimeSpan.FromSeconds(10)).Any(), "Unexpected analyzer processes"); } // Need to wait some more for the database to be loaded. app.WaitForNoDialog(TimeSpan.FromSeconds(10.0)); env.Select(); using (var removeDeleteDlg = RemoveItemDialog.FromDte(app)) { removeDeleteDlg.Delete(); } app.WaitForNoDialog(TimeSpan.FromSeconds(5.0)); app.OpenSolutionExplorer().WaitForChildOfProjectRemoved( project, SR.GetString(SR.Environments), envName ); var projectHome = (string)project.Properties.Item("ProjectHome").Value; envPath = Path.Combine(projectHome, envPath); for (int retries = 10; Directory.Exists(envPath) && retries > 0; --retries) { Thread.Sleep(1000); } Assert.IsFalse(Directory.Exists(envPath), envPath); } }
public void ActivateVirtualEnv() { using (var app = new PythonVisualStudioApp()) using (var dis = Init(app)) { var project = CreateTemporaryProject(app); Assert.AreNotEqual(null, project.ProjectItems.Item(Path.GetFileNameWithoutExtension(app.Dte.Solution.FullName) + ".py")); var id0 = Guid.Parse((string)project.Properties.Item("InterpreterId").Value); string envName1, envName2; var env1 = app.CreateVirtualEnvironment(project, out envName1); var env2 = app.CreateVirtualEnvironment(project, out envName2); var id1 = Guid.Parse((string)project.Properties.Item("InterpreterId").Value); Assert.AreNotEqual(id0, id1); env2.Select(); app.Dte.ExecuteCommand("Python.ActivateEnvironment"); var id2 = Guid.Parse((string)project.Properties.Item("InterpreterId").Value); Assert.AreNotEqual(id0, id2); Assert.AreNotEqual(id1, id2); // Change the selected node app.SolutionExplorerTreeView.SelectProject(project); app.Dte.ExecuteCommand("Python.ActivateEnvironment", "/env:\"" + envName1 + "\""); var id1b = Guid.Parse((string)project.Properties.Item("InterpreterId").Value); Assert.AreEqual(id1, id1b); } }
public void LoadVirtualEnv() { using (var app = new PythonVisualStudioApp()) using (var dis = Init(app)) { var project = CreateTemporaryProject(app); var projectName = project.UniqueName; string envName; var env = app.CreateVirtualEnvironment(project, out envName); var solution = app.Dte.Solution.FullName; app.Dte.Solution.Close(true); app.Dte.Solution.Open(solution); project = app.Dte.Solution.Item(projectName); app.OpenSolutionExplorer().WaitForChildOfProject( project, SR.GetString(SR.Environments), envName ); } }
public void InstallGenerateRequirementsTxt() { using (var app = new PythonVisualStudioApp()) using (var dis = Init(app)) { var project = CreateTemporaryProject(app); string envName; var env = app.CreateVirtualEnvironment(project, out envName); env.Select(); try { app.ExecuteCommand("Python.InstallRequirementsTxt", "/y", timeout: 5000); Assert.Fail("Command should not have executed"); } catch (AggregateException ae) { ae.Handle(ex => ex is COMException); } catch (COMException) { } var requirementsTxt = Path.Combine(Path.GetDirectoryName(project.FullName), "requirements.txt"); File.WriteAllText(requirementsTxt, "azure==0.6.2"); app.ExecuteCommand("Python.InstallRequirementsTxt", "/y"); app.SolutionExplorerTreeView.WaitForChildOfProject( project, SR.GetString(SR.Environments), envName, "azure (0.6.2)" ); File.Delete(requirementsTxt); app.ExecuteCommand("Python.GenerateRequirementsTxt", "/e:\"" + envName + "\""); app.SolutionExplorerTreeView.WaitForChildOfProject( project, "requirements.txt" ); AssertUtil.ContainsAtLeast( File.ReadAllLines(requirementsTxt).Select(s => s.Trim()), "azure==0.6.2" ); } }
public void CreateInstallRequirementsTxt() { using (var app = new PythonVisualStudioApp()) using (var dis = Init(app)) { var project = CreateTemporaryProject(app); var projectHome = project.GetPythonProject().ProjectHome; File.WriteAllText(Path.Combine(projectHome, "requirements.txt"), "azure==0.6.2"); string envName; var env = app.CreateVirtualEnvironment(project, out envName); env.Select(); app.SolutionExplorerTreeView.WaitForChildOfProject( project, SR.GetString(SR.Environments), envName, "azure (0.6.2)" ); } }
public void InstallUninstallPackage() { using (var app = new PythonVisualStudioApp()) using (var dis = Init(app)) { var project = CreateTemporaryProject(app); string envName; var env = app.CreateVirtualEnvironment(project, out envName); env.Select(); app.ExecuteCommand("Python.InstallPackage", "/p:" + TestPackageSpec); var azure = app.SolutionExplorerTreeView.WaitForChildOfProject( project, Strings.Environments, envName, TestPackageDisplay ); azure.Select(); using (var confirmation = AutomationDialog.FromDte(app, "Edit.Delete")) { confirmation.OK(); } app.SolutionExplorerTreeView.WaitForChildOfProjectRemoved( project, Strings.Environments, envName, TestPackageDisplay ); } }