public void CutRenamePaste() { var testDef = Generator.Project("DragDropCopyCutPaste", ProjectGenerator.ItemGroup( ProjectGenerator.Folder("CutRenamePaste"), ProjectGenerator.Compile("CutRenamePaste\\CutRenamePaste") ) ); using (var solution = testDef.Generate().ToMockVs()) { var project = solution.WaitForItem("DragDropCopyCutPaste"); var file = solution.WaitForItem("DragDropCopyCutPaste", "CutRenamePaste", $"CutRenamePaste{testDef.ProjectType.CodeExtension}"); file.Select(); solution.ControlX(); file.Select(); solution.Type(Key.F2); solution.Type("CutRenamePasteNewName"); solution.Type(Key.Enter); solution.Sleep(1000); project.Select(); solution.ControlV(); solution.CheckMessageBox($"The source URL 'CutRenamePaste{testDef.ProjectType.CodeExtension}' could not be found."); } }
private void MoveToMissingFolder(VisualStudioApp app, ProjectGenerator pg, MoveDelegate mover) { foreach (var projectType in pg.ProjectTypes) { var testDef = new ProjectDefinition("MoveToMissingFolder", projectType, ProjectGenerator.PropertyGroup( ProjectGenerator.Property("ProjectView", "ShowAllFiles") ), ProjectGenerator.ItemGroup( ProjectGenerator.Folder("Fob", isExcluded: false, isMissing: true), ProjectGenerator.Compile("codefile", isExcluded: false) ) ); using (var solution = testDef.Generate().ToVs(app)) { mover( solution, solution.FindItem("MoveToMissingFolder", "Fob"), solution.FindItem("MoveToMissingFolder", "codefile" + projectType.CodeExtension) ); solution.AssertFileDoesntExist("MoveToMissingFolder", "codefile" + projectType.CodeExtension); solution.AssertFileExists("MoveToMissingFolder", "Fob", "codefile" + projectType.CodeExtension); } } }
public void BasicProjectTest() { var sln = Generator.Project( "HelloWorld", ProjectGenerator.Compile("server", "") ).Generate(); using (var vs = sln.ToMockVs()) { Assert.IsNotNull(vs.WaitForItem("HelloWorld", "Python Environments")); Assert.IsNotNull(vs.WaitForItem("HelloWorld", "References")); Assert.IsNotNull(vs.WaitForItem("HelloWorld", "Search Paths")); Assert.IsNotNull(vs.WaitForItem("HelloWorld", "server.py")); var view = vs.OpenItem("HelloWorld", "server.py"); var bi = PythonTextBufferInfo.TryGetForBuffer(view.TextView.TextBuffer); for (int retries = 20; retries > 0 && bi.AnalysisEntry == null; --retries) { Thread.Sleep(500); } view.Invoke(() => view.Type("import")); view.Invoke(() => view.Type(" ")); using (var sh = view.WaitForSession <ICompletionSession>()) { AssertUtil.Contains(sh.Session.Completions(), "sys"); } } }
public void RenameStartupFile(VisualStudioApp app, ProjectGenerator pg) { foreach (var projectType in pg.ProjectTypes) { var testDef = new ProjectDefinition( "RenameStartupFileFolder", projectType, ProjectGenerator.Folder("Folder"), ProjectGenerator.Compile("Folder\\server"), ProjectGenerator.Property("StartupFile", "Folder\\server" + projectType.CodeExtension) ); using (var solution = testDef.Generate().ToVs(app)) { var file = solution.GetProject("RenameStartupFileFolder").ProjectItems.Item("Folder").ProjectItems.Item("server" + projectType.CodeExtension); file.Name = "server2" + projectType.CodeExtension; Assert.AreEqual( "server2" + projectType.CodeExtension, Path.GetFileName( (string)solution.GetProject("RenameStartupFileFolder").Properties.Item("StartupFile").Value ) ); } } }
/// <summary> /// Renaming the folder containing the startup script should update the startup script /// https://nodejstools.codeplex.com/workitem/476 /// </summary> public void RenameStartupFileFolder(VisualStudioApp app, ProjectGenerator pg) { foreach (var projectType in pg.ProjectTypes) { var testDef = new ProjectDefinition( "RenameStartupFileFolder", projectType, ProjectGenerator.Folder("Folder"), ProjectGenerator.Compile("Folder\\server"), ProjectGenerator.Property("StartupFile", "Folder\\server" + projectType.CodeExtension) ); using (var solution = testDef.Generate().ToVs(app)) { var folder = solution.GetProject("RenameStartupFileFolder").ProjectItems.Item("Folder"); folder.Name = "FolderNew"; string startupFile = (string)solution.GetProject("RenameStartupFileFolder").Properties.Item("StartupFile").Value; Assert.IsTrue( startupFile.EndsWith(projectType.Code("FolderNew\\server")), "Expected FolderNew in path, got {0}", startupFile ); } } }
private static ProjectDefinition NoSourceControlProject(ProjectType projectType) { return(new ProjectDefinition("NoSourceControl", projectType, ProjectGenerator.ItemGroup( ProjectGenerator.Compile("Program") ) )); }
/// <summary> /// https://nodejstools.codeplex.com/workitem/194 /// /// Verifies that we deliver the right set of track events to the source /// when we move a folder with a file in it. /// /// The right set of events are based upon matching the same events the C# /// project system delivers. Those can be using the TestSccPackage with a /// C# project. Once enables in Tools->Options->Source Control you can get /// the list of events from Tools->Show Scc Track Document Events. /// </summary> // Currently Fails: https://pytools.codeplex.com/workitem/2609 public void MoveFolderWithItem(VisualStudioApp app, ProjectGenerator pg) { // close any projects before switching source control... app.Dte.Solution.Close(); app.SelectSourceControlProvider("Test Source Provider"); ExpectSourceControl(); foreach (var projectType in pg.ProjectTypes) { var testDef = new ProjectDefinition("SourceControl", projectType, ProjectGenerator.PropertyGroup( ProjectGenerator.Property("SccProjectName", "HelloWorld"), ProjectGenerator.Property("SccLocalPath", "LocalPath"), ProjectGenerator.Property("SccAuxPath", "AuxPath"), ProjectGenerator.Property("SccProvider", "TestProvider") ), ProjectGenerator.ItemGroup( ProjectGenerator.Folder("Fob"), ProjectGenerator.Folder("Fob\\Oar"), ProjectGenerator.Compile("Program"), ProjectGenerator.Compile("Fob\\Oar\\Quox") ) ); using (var solution = testDef.Generate()) { TestSccProvider.DocumentEvents.Clear(); var project = app.OpenProject(solution.Filename, onDialog: OnNoSccDialog); var window = app.SolutionExplorerTreeView; var folder = window.WaitForItem("Solution 'SourceControl' (1 project)", "SourceControl", "Fob", "Oar"); var point = folder.GetClickablePoint(); Mouse.MoveTo(point); Mouse.Down(MouseButton.Left); var destFolder = window.WaitForItem("Solution 'SourceControl' (1 project)", "SourceControl"); Mouse.MoveTo(destFolder.GetClickablePoint()); Mouse.Up(MouseButton.Left); app.MaybeCheckMessageBox(MessageBoxButton.Ok, "One or more files will be"); window.AssertFileExists(Path.GetDirectoryName(solution.Filename), "Solution 'SourceControl' (1 project)", "SourceControl", "Oar", "Quox" + projectType.CodeExtension); var projectDir = Path.GetDirectoryName(project.FullName); AssertDocumentEvents(projectDir, OnQueryRenameFiles(projectType.Code("Fob\\Oar\\Quox"), projectType.Code("Oar\\Quox"), VSQUERYRENAMEFILEFLAGS_NoFlags), OnQueryRenameFiles("Fob\\Oar\\", "Oar", VSQUERYRENAMEFILEFLAGS_Directory), OnAfterRenameFiles(projectType.Code("Fob\\Oar\\Quox"), projectType.Code("Oar\\Quox"), VSRENAMEFILEFLAGS_NoFlags), OnAfterRenameFiles("Fob\\Oar\\", "Oar", VSRENAMEFILEFLAGS_Directory) ); } } }
private static ProjectDefinition LinkedFiles(ProjectType projectType) { return(new ProjectDefinition( "LinkedFiles", projectType, ProjectGenerator.ItemGroup( ProjectGenerator.Folder("MoveToFolder"), ProjectGenerator.Folder("FolderWithAFile"), ProjectGenerator.Folder("Fob"), ProjectGenerator.Folder("..\\LinkedFilesDir", isExcluded: true), ProjectGenerator.Folder("AlreadyLinkedFolder"), ProjectGenerator.Compile("Program"), ProjectGenerator.Compile("..\\ImplicitLinkedFile"), ProjectGenerator.Compile("..\\ExplicitLinkedFile") .Link("ExplicitDir\\ExplicitLinkedFile"), ProjectGenerator.Compile("..\\ExplicitLinkedFileWrongFilename") .Link("ExplicitDir\\Blah"), ProjectGenerator.Compile("..\\MovedLinkedFile"), ProjectGenerator.Compile("..\\MovedLinkedFileOpen"), ProjectGenerator.Compile("..\\MovedLinkedFileOpenEdit"), ProjectGenerator.Compile("..\\FileNotInProject"), ProjectGenerator.Compile("..\\DeletedLinkedFile"), ProjectGenerator.Compile("LinkedInModule") .Link("Fob\\LinkedInModule"), ProjectGenerator.Compile("SaveAsCreateLink"), ProjectGenerator.Compile("..\\SaveAsCreateFile"), ProjectGenerator.Compile("..\\SaveAsCreateFileNewDirectory"), ProjectGenerator.Compile("FolderWithAFile\\ExistsOnDiskAndInProject"), ProjectGenerator.Compile("FolderWithAFile\\ExistsInProjectButNotOnDisk", isMissing: true), ProjectGenerator.Compile("FolderWithAFile\\ExistsOnDiskButNotInProject"), ProjectGenerator.Compile("..\\LinkedFilesDir\\SomeLinkedFile") .Link("Oar\\SomeLinkedFile"), ProjectGenerator.Compile("..\\RenamedLinkFile") .Link("Fob\\NewNameForLinkFile"), ProjectGenerator.Compile("..\\BadLinkPath") .Link("..\\BadLinkPathFolder\\BadLinkPath"), ProjectGenerator.Compile("..\\RootedLinkIgnored") .Link("C:\\RootedLinkIgnored"), ProjectGenerator.Compile("C:\\RootedIncludeIgnored", isMissing: true) .Link("RootedIncludeIgnored"), ProjectGenerator.Compile("Fob\\AddExistingInProjectDirButNotInProject"), ProjectGenerator.Compile("..\\ExistingItem", isExcluded: true), ProjectGenerator.Compile("..\\ExistsInProjectButNotOnDisk", isExcluded: true), ProjectGenerator.Compile("..\\ExistsOnDiskAndInProject", isExcluded: true), ProjectGenerator.Compile("..\\ExistsOnDiskButNotInProject", isExcluded: true) ) )); }
[TestCategory("Installed")] // Requires .targets file to be installed public void OAProjectMustBeRightType() { var sln = Generator.Project( "HelloWorld", ProjectGenerator.Compile("server", "") ).Generate(); using (var vs = sln.ToMockVs()) { var proj = vs.GetProject("HelloWorld"); Assert.IsNotNull(proj); Assert.IsInstanceOfType(proj, typeof(OAProject)); Assert.IsInstanceOfType(proj, typeof(IOleCommandTarget)); Assert.IsInstanceOfType(proj.Object, typeof(OAVSProject)); Assert.IsInstanceOfType(((OAProject)proj).Project, typeof(PythonProjectNode)); } }
private static ProjectDefinition SourceControlProject(ProjectType projectType) { return(new ProjectDefinition("SourceControl", projectType, ProjectGenerator.PropertyGroup( ProjectGenerator.Property("SccProjectName", "HelloWorld"), ProjectGenerator.Property("SccLocalPath", "LocalPath"), ProjectGenerator.Property("SccAuxPath", "AuxPath"), ProjectGenerator.Property("SccProvider", "TestProvider") ), ProjectGenerator.ItemGroup( ProjectGenerator.Folder("TestFolder"), ProjectGenerator.Compile("Program"), ProjectGenerator.Compile("TestFolder\\SubItem"), ProjectGenerator.Compile("ExcludedFile", isExcluded: true) ) )); }
public void ShouldWarnOnRun() { var sln = Generator.Project( "HelloWorld", ProjectGenerator.Compile("app", "print \"hello\"") ).Generate(); using (var vs = sln.ToMockVs()) using (var analyzerChanged = new AutoResetEvent(false)) { var project = vs.GetProject("HelloWorld").GetPythonProject(); project.ProjectAnalyzerChanged += (s, e) => analyzerChanged.SetIfNotDisposed(); var uiThread = (UIThreadBase)project.GetService(typeof(UIThreadBase)); var interpreters = ((IComponentModel)project.GetService(typeof(SComponentModel))) .GetService <IInterpreterRegistryService>() .Interpreters; var v27 = interpreters.Where(x => x.Configuration.Id == "Global|PythonCore|2.7-32").First(); var v34 = interpreters.Where(x => x.Configuration.Id == "Global|PythonCore|3.4-32").First(); var interpOptions = (UIThreadBase)project.GetService(typeof(IComponentModel)); uiThread.Invoke(() => { project.AddInterpreter(v27.Configuration.Id); project.AddInterpreter(v34.Configuration.Id); }); project.SetInterpreterFactory(v27); Assert.IsTrue(analyzerChanged.WaitOne(10000), "Timed out waiting for analyzer change #1"); uiThread.Invoke(() => project.GetAnalyzer()).WaitForCompleteAnalysis(_ => true); Assert.IsFalse(project.ShouldWarnOnLaunch, "Should not warn on 2.7"); project.SetInterpreterFactory(v34); Assert.IsTrue(analyzerChanged.WaitOne(10000), "Timed out waiting for analyzer change #2"); uiThread.Invoke(() => project.GetAnalyzer()).WaitForCompleteAnalysis(_ => true); Assert.IsTrue(project.ShouldWarnOnLaunch, "Expected warning on 3.4"); project.SetInterpreterFactory(v27); Assert.IsTrue(analyzerChanged.WaitOne(10000), "Timed out waiting for analyzer change #3"); uiThread.Invoke(() => project.GetAnalyzer()).WaitForCompleteAnalysis(_ => true); Assert.IsFalse(project.ShouldWarnOnLaunch, "Expected warning to go away on 2.7"); } }
private static SolutionFile MultiProjectLinkedFiles(ProjectType projectType) { return SolutionFile.Generate( "MultiProjectLinkedFiles", new ProjectDefinition( "LinkedFiles1", projectType, ProjectGenerator.ItemGroup( ProjectGenerator.Compile("..\\FileNotInProject1"), ProjectGenerator.Compile("..\\FileNotInProject2") ) ), new ProjectDefinition( "LinkedFiles2", projectType, ProjectGenerator.ItemGroup( ProjectGenerator.Compile("..\\FileNotInProject2", isMissing: true) ) ) ); }