public void ExtensionReference() { using (var app = new PythonVisualStudioApp()) { var project = app.OpenProject(@"TestData\ExtensionReference.sln"); app.OpenSolutionExplorer(); var solutionTree = app.SolutionExplorerTreeView; var dbPath = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Python Tools", "ReferencesDB", #if DEBUG "Debug", #endif AssemblyVersionInfo.VSVersion ); var existingFiles = Directory.GetFiles(dbPath, "spam*"); // open the solution, add a reference to our spam.pyd Python extension module var folderNode = solutionTree.FindItem( "Solution 'ExtensionReference' (1 project)", "ExtensionReference", SR.GetString(SR.ReferencesNodeName) ); folderNode.Select(); var dialog = new AddReferenceDialog(AutomationElement.FromHandle(app.OpenDialogWithDteExecuteCommand("Project.AddReference"))); dialog.ActivateBrowseTab(); dialog.BrowseFilename = TestData.GetPath(@"TestData\spam.pyd"); dialog.ClickOK(); app.WaitForDialogDismissed(); // make sure the reference got added var spamItem = solutionTree.WaitForItem( "Solution 'ExtensionReference' (1 project)", "ExtensionReference", SR.GetString(SR.ReferencesNodeName), "spam.pyd" ); Assert.IsNotNull(spamItem); // wait for scraping to complete for (int retries = 10; Directory.GetFiles(dbPath, "spam*").Length == existingFiles.Length && retries > 0; --retries) { System.Threading.Thread.Sleep(1000); } Assert.AreNotEqual(existingFiles.Length, Directory.GetFiles(dbPath, "spam*").Length, "File was not scraped"); // now open a file and make sure we get completions against the spam module var item = project.ProjectItems.Item("Program.py"); var window = item.Open(); window.Activate(); var doc = app.GetDocument(item.Document.FullName); doc.MoveCaret(doc.TextView.TextBuffer.CurrentSnapshot.GetLineFromLineNumber(1).Start); Keyboard.Type("spam."); using (var sh = doc.WaitForSession<ICompletionSession>()) { var completion = sh.Session.CompletionSets.First().Completions.Select(x => x.InsertionText).FirstOrDefault(x => x == "system"); Assert.IsNotNull(completion); } // now clear the text we just typed for (int i = 0; i < 5; i++) { Keyboard.Type(Key.Back); } // remove the extension app.Dte.Solution.Projects.Item(1).ProjectItems.Item("References").ProjectItems.Item(@"spam.pyd").Remove(); // make sure it got removed solutionTree.WaitForItemRemoved( "Solution 'ExtensionReference' (1 project)", "ExtensionReference", SR.GetString(SR.ReferencesNodeName), "spam.pyd" ); window.Activate(); // and make sure we no longer offer completions on the spam module. Keyboard.Type("spam."); using (var sh = doc.WaitForSession<ICompletionSession>()) { var completion = sh.Session.CompletionSets.First().Completions.Select(x => x.DisplayText).Single(); Assert.AreEqual(SR.GetString(SR.NoCompletionsCompletion), completion); } } }
public void DefaultInterpreterSelected() { using (var app = new PythonVisualStudioApp()) { var service = app.InterpreterService; var originalDefault = service.DefaultInterpreter; try { foreach (var interpreter in service.Interpreters) { service.DefaultInterpreter = interpreter; using (var dialog = app.LaunchPythonProfiling()) { Assert.AreEqual(interpreter.Description, dialog.SelectedInterpreter); } app.WaitForDialogDismissed(); } } finally { service.DefaultInterpreter = originalDefault; } } }
public void NewProfilingSession() { PythonPaths.Python27.AssertInstalled(); var testFile = TestData.GetPath(@"TestData\ProfileTest\Program.py"); Assert.IsTrue(File.Exists(testFile), "ProfileTest\\Program.py does not exist"); using (var app = new PythonVisualStudioApp()) { app.OpenPythonPerformance(); app.PythonPerformanceExplorerToolBar.NewPerfSession(); var profiling = (IPythonProfiling)app.Dte.GetObject("PythonProfiling"); app.OpenPythonPerformance(); var perf = app.PythonPerformanceExplorerTreeView.WaitForItem("Performance *"); Assert.IsNotNull(perf); var session = profiling.GetSession(1); Assert.IsNotNull(session); Mouse.MoveTo(perf.GetClickablePoint()); Mouse.DoubleClick(System.Windows.Input.MouseButton.Left); // wait for the dialog, set some settings, save them. using (var perfTarget = new PythonPerfTarget(app.WaitForDialog())) { perfTarget.SelectProfileScript(); perfTarget.InterpreterComboBox.SelectItem("Python 2.7"); perfTarget.ScriptName = testFile; perfTarget.WorkingDir = Path.GetDirectoryName(testFile); try { perfTarget.Ok(); } catch (ElementNotEnabledException) { Assert.Fail("Settings were invalid:\n ScriptName = {0}\n Interpreter = {1}", perfTarget.ScriptName, perfTarget.SelectedInterpreter); } } app.WaitForDialogDismissed(); Mouse.MoveTo(perf.GetClickablePoint()); Mouse.DoubleClick(System.Windows.Input.MouseButton.Left); // re-open the dialog, verify the settings using (var perfTarget = new PythonPerfTarget(app.WaitForDialog())) { Assert.AreEqual("Python 2.7", perfTarget.SelectedInterpreter); Assert.AreEqual(TestData.GetPath(@"TestData\ProfileTest\Program.py"), perfTarget.ScriptName); } } }
public void LaunchPythonProfilingWizard() { using (var app = new PythonVisualStudioApp()) { var project = app.OpenProject(@"TestData\ProfileTest.sln"); using (var perfTarget = app.LaunchPythonProfiling()) { perfTarget.SelectProfileProject(); perfTarget.SelectedProjectComboBox.SelectItem("HelloWorld"); try { perfTarget.Ok(); } catch (ElementNotEnabledException) { Assert.Fail("Settings were invalid:\n SelectedProject = {0}", perfTarget.SelectedProjectComboBox.GetSelectedItemName()); } } app.WaitForDialogDismissed(); var profiling = (IPythonProfiling)app.Dte.GetObject("PythonProfiling"); var session = profiling.GetSession(1); Assert.IsNotNull(app.PythonPerformanceExplorerTreeView.WaitForItem("HelloWorld *")); while (profiling.IsProfiling) { // wait for profiling to finish... Thread.Sleep(100); } } }
public void StartupProjectSelected() { using (var app = new PythonVisualStudioApp()) { app.OpenProject(TestData.GetPath(@"TestData\MultiProjectAnalysis\MultiProjectAnalysis.sln")); foreach (var project in app.Dte.Solution.Projects.Cast<EnvDTE.Project>()) { var tree = app.OpenSolutionExplorer(); var item = tree.FindByName(project.Name); item.Select(); app.Dte.ExecuteCommand("Project.SetasStartupProject"); using (var dialog = app.LaunchPythonProfiling()) { Assert.AreEqual(project.Name, dialog.SelectedProject); } app.WaitForDialogDismissed(); } } }