/// <summary> /// Cut 2 items, paste where they exist, skip pasting the 1st one but paste the 2nd. /// /// The 1st item shouldn't be removed from the parent hierarchy, the 2nd should, and only the 2nd item should be overwritten. /// </summary> private void MoveDuplicateFileNamesCrossProjectSkipOne(MoveDelegate mover) { foreach (var projectType in ProjectTypes) { var projectDefs = new[] { new ProjectDefinition("MoveDuplicateFileName", projectType, ItemGroup( Content("textfile1.txt", "textfile1 - lang"), Content("textfile2.txt", "textfile2 - lang") ) ), new ProjectDefinition("MoveDuplicateFileName2", projectType, ItemGroup( Folder("Folder"), Content("textfile1.txt", "textfile1 - 2"), Content("textfile2.txt", "textfile2 - 2") ) ) }; using (var solution = SolutionFile.Generate("MoveDuplicateFileName", projectDefs).ToVs()) { var item1 = solution.FindItem("MoveDuplicateFileName", "textfile1.txt"); var item2 = solution.FindItem("MoveDuplicateFileName", "textfile2.txt"); mover( solution, solution.FindItem("MoveDuplicateFileName2"), item1, item2 ); using (var dialog = solution.WaitForOverwriteFileDialog()) { dialog.No(); } System.Threading.Thread.Sleep(1000); using (var dialog = solution.WaitForOverwriteFileDialog()) { dialog.Yes(); } solution.WaitForDialogDismissed(); solution.AssertFileExistsWithContent("textfile1 - lang", "MoveDuplicateFileName", "textfile1.txt"); solution.AssertFileExistsWithContent("textfile2 - lang", "MoveDuplicateFileName", "textfile2.txt"); solution.AssertFileExistsWithContent("textfile1 - 2", "MoveDuplicateFileName2", "textfile1.txt"); solution.AssertFileExistsWithContent("textfile2 - lang", "MoveDuplicateFileName2", "textfile2.txt"); } } }
/// <summary> /// Move item to a folder that has a symbolic link. Verify we cannot move /// ourselves to ourselves and that moves are reflected in both the folder and its symbolic link. /// NOTE: Because of symbolic link creation, this test must be run as administrator. /// </summary> private void MoveFileFromFolderToLinkedFolder(MoveDelegate mover) { foreach (var projectType in ProjectTypes) { var projectDefs = new[] { new ProjectDefinition("MoveLinkedFolder", projectType, ItemGroup( Content("textfile.txt", "text file contents"), Folder("Folder"), Content("Folder\\FileInFolder.txt", "File inside of linked folder..."), SymbolicLink("FolderLink", "Folder") ) ) }; using (var solution = SolutionFile.Generate("MoveLinkedFolder", projectDefs).ToVs()) { mover( solution, solution.FindItem("MoveLinkedFolder", "FolderLink"), solution.FindItem("MoveLinkedFolder", "Folder", "FileInFolder.txt") ); // Say okay to the error that pops up since we can't move to ourselves. solution.WaitForDialog(); Keyboard.Type(Key.Enter); solution.WaitForDialogDismissed(); // Verify that after the dialog our files are still present. solution.AssertFileExists("MoveLinkedFolder", "FolderLink", "FileInFolder.txt"); solution.AssertFileExists("MoveLinkedFolder", "Folder", "FileInFolder.txt"); // Now move the text file in the root. Expect it to move and be in both. mover( solution, solution.FindItem("MoveLinkedFolder", "FolderLink"), solution.FindItem("MoveLinkedFolder", "textfile.txt") ); solution.AssertFileExists("MoveLinkedFolder", "FolderLink", "textfile.txt"); solution.AssertFileExists("MoveLinkedFolder", "Folder", "textfile.txt"); } } }
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) ) ) ); }
/// <summary> /// Move item to where an item by that name exists across 2 projects of the same type. /// /// https://pytools.codeplex.com/workitem/1967 /// </summary> private void MoveDuplicateFileNameCrossProjectSkipMove(MoveDelegate mover) { foreach (var projectType in ProjectTypes) { var projectDefs = new[] { new ProjectDefinition("MoveDuplicateFileName1", projectType, ItemGroup( Content("textfile.txt", "MoveDuplicateFileName1") ) ), new ProjectDefinition("MoveDuplicateFileName2", projectType, ItemGroup( Folder("Folder"), Content("textfile.txt", "MoveDuplicateFileName2") ) ) }; using (var solution = SolutionFile.Generate("MoveDuplicateFileName", projectDefs).ToVs()) { mover( solution, solution.FindItem("MoveDuplicateFileName2"), solution.FindItem("MoveDuplicateFileName1", "textfile.txt") ); using (var dialog = solution.WaitForOverwriteFileDialog()) { dialog.No(); } solution.WaitForDialogDismissed(); solution.AssertFileExistsWithContent("MoveDuplicateFileName1", "MoveDuplicateFileName1", "textfile.txt"); solution.AssertFileExistsWithContent("MoveDuplicateFileName2", "MoveDuplicateFileName2", "textfile.txt"); } } }
/// <summary> /// Move item to where item exists across project types. /// </summary> private void MoveDuplicateFileNameCrossProjectCSharpSkipMove(MoveDelegate mover) { foreach (var projectType in ProjectTypes) { var projectDefs = new[] { new ProjectDefinition("MoveDuplicateFileName1", projectType, ItemGroup( Content("textfile.txt", "MoveDuplicateFileName1") ) ), new ProjectDefinition("MoveDuplicateFileNameCS", ProjectType.CSharp, ItemGroup( Folder("Folder"), Content("textfile.txt", "MoveDuplicateFileNameCS") ) ) }; using (var solution = SolutionFile.Generate("MoveDuplicateFileName", projectDefs).ToVs()) { mover( solution, solution.FindItem("MoveDuplicateFileNameCS"), solution.FindItem("MoveDuplicateFileName1", "textfile.txt") ); // say no to replacing in the C# project system solution.WaitForDialog(); Keyboard.Type(Key.N); solution.WaitForDialogDismissed(); solution.AssertFileExistsWithContent("MoveDuplicateFileName1", "MoveDuplicateFileName1", "textfile.txt"); solution.AssertFileExistsWithContent("MoveDuplicateFileNameCS", "MoveDuplicateFileNameCS", "textfile.txt"); } } }
/// <summary> /// Move item to where item exists across project types. /// </summary> private void MoveDuplicateFileNameCrossProjectCSharpSkipMove(VisualStudioApp app, ProjectGenerator pg, MoveDelegate mover) { foreach (var projectType in pg.ProjectTypes) { var projectDefs = new[] { new ProjectDefinition("MoveDuplicateFileName1", projectType, ProjectGenerator.ItemGroup( ProjectGenerator.Content("textfile.txt", "MoveDuplicateFileName1") ) ), new ProjectDefinition("MoveDuplicateFileNameCS", ProjectType.CSharp, ProjectGenerator.ItemGroup( ProjectGenerator.Folder("Folder"), ProjectGenerator.Content("textfile.txt", "MoveDuplicateFileNameCS") ) ) }; using (var solution = SolutionFile.Generate("MoveDuplicateFileName", projectDefs).ToVs(app)) { mover( solution, solution.FindItem("MoveDuplicateFileNameCS"), solution.FindItem("MoveDuplicateFileName1", "textfile.txt") ); // say no to replacing in the C# project system using (var dlg = AutomationDialog.WaitForDialog(app)) { dlg.ClickButtonAndClose("No"); } solution.AssertFileExistsWithContent("MoveDuplicateFileName1", "MoveDuplicateFileName1", "textfile.txt"); solution.AssertFileExistsWithContent("MoveDuplicateFileNameCS", "MoveDuplicateFileNameCS", "textfile.txt"); } } }