void Start(bool showCommandLineOnly) { if (_action == SortFilesAction.SyncFiles && !checkPreview.Checked && !showCommandLineOnly && !Utils.AskToConfirm("Are you sure you want to synchronize these files?")) { return; } _mruHistoryLeft.AddToHistory(cmbLeftDir.Text); _mruHistoryRight.AddToHistory(cmbRightDir.Text); RefreshComboListItems(); txtShowRobo.Text = ""; var settings = FillFromUI(); if (settings == null) { return; } if (_action == SortFilesAction.SyncFiles) { if (showCommandLineOnly) { var args = SyncFilesWithRobocopy.GetFullArgs(settings); txtShowRobo.Text = args; } else { Utils.RunLongActionInThread(_lock, this, () => { SyncFilesWithRobocopy.Go(settings); }); } } else { this.Visible = false; using (var childForm = new FormSortFilesList( _action, settings, lblAction.Text, false)) { childForm.ShowDialog(); } this.Close(); } }
static void TestMethod_TestSortFilesListOperations() { // create settings object var settings = new SortFilesSettings(); var left = TestUtil.GetTestSubDirectory("left_sortfileslist"); var right = TestUtil.GetTestSubDirectory("right_sortfileslist"); settings.LeftDirectory = left; settings.RightDirectory = right; // first, set up test files File.WriteAllText(left + Utils.Sep + "onlyleft.txt", "onlyl"); File.WriteAllText(left + Utils.Sep + "changed1.txt", "a"); File.WriteAllText(left + Utils.Sep + "changed2.txt", "123"); File.WriteAllText(left + Utils.Sep + "same.txt", "s"); File.WriteAllText(right + Utils.Sep + "onlyright.txt", "onlyr"); File.WriteAllText(right + Utils.Sep + "changed1.txt", "abc"); File.WriteAllText(right + Utils.Sep + "changed2.txt", "124"); File.WriteAllText(right + Utils.Sep + "same.txt", "s"); Action checkFileContents = () => { TestUtil.IsEq("onlyl", File.ReadAllText(Path.Combine(left, "onlyleft.txt"))); TestUtil.IsEq("a", File.ReadAllText(Path.Combine(left, "changed1.txt"))); TestUtil.IsEq("123", File.ReadAllText(Path.Combine(left, "changed2.txt"))); TestUtil.IsEq("onlyr", File.ReadAllText(Path.Combine(right, "onlyright.txt"))); TestUtil.IsEq("abc", File.ReadAllText(Path.Combine(right, "changed1.txt"))); TestUtil.IsEq("124", File.ReadAllText(Path.Combine(right, "changed2.txt"))); }; // tweak last write times to ensure files on right look different File.SetLastWriteTime(right + Utils.Sep + "changed1.txt", File.GetLastWriteTime(right + Utils.Sep + "changed1.txt").AddDays(1)); File.SetLastWriteTime(right + Utils.Sep + "changed2.txt", File.GetLastWriteTime(right + Utils.Sep + "changed2.txt").AddDays(1)); File.SetLastWriteTime(right + Utils.Sep + "same.txt", File.GetLastWriteTime(left + Utils.Sep + "same.txt")); // create form and run searchdifferences var form = new FormSortFilesList( SortFilesAction.SearchDifferences, settings, "", allActionsSynchronous: true); ListView listView; form.GetTestHooks(out listView, out List <FileComparisonResult> mockSelection, out UndoStack <List <IUndoableFileOp> > undoStack); form.RunSortFilesAction(); // simulate column-header click to sort by path form.listView_ColumnClick(null, new ColumnClickEventArgs(2)); // verify listview contents var items = listView.Items.Cast <FileComparisonResult>().ToArray(); TestUtil.IsEq(4, items.Length); TestUtil.IsEq(Utils.Sep + "changed1.txt", items[0].FileInfoLeft.Filename); TestUtil.IsEq(null, items[0].FileInfoLeft.ContentHash); TestUtil.IsEq(1L, items[0].FileInfoLeft.FileSize); TestUtil.IsEq(Utils.Sep + "changed1.txt", items[0].FileInfoRight.Filename); TestUtil.IsEq(null, items[0].FileInfoRight.ContentHash); TestUtil.IsEq(3L, items[0].FileInfoRight.FileSize); TestUtil.IsEq(Utils.Sep + "changed2.txt", items[1].FileInfoLeft.Filename); TestUtil.IsEq(null, items[1].FileInfoLeft.ContentHash); TestUtil.IsEq(3L, items[1].FileInfoLeft.FileSize); TestUtil.IsEq(Utils.Sep + "changed2.txt", items[1].FileInfoRight.Filename); TestUtil.IsEq(null, items[1].FileInfoRight.ContentHash); TestUtil.IsEq(3L, items[1].FileInfoRight.FileSize); TestUtil.IsEq(Utils.Sep + "onlyleft.txt", items[2].FileInfoLeft.Filename); TestUtil.IsEq(null, items[2].FileInfoLeft.ContentHash); TestUtil.IsEq(5L, items[2].FileInfoLeft.FileSize); TestUtil.IsEq(null, items[2].FileInfoRight); TestUtil.IsEq(Utils.Sep + "onlyright.txt", items[3].FileInfoRight.Filename); TestUtil.IsEq(null, items[3].FileInfoRight.ContentHash); TestUtil.IsEq(5L, items[3].FileInfoRight.FileSize); TestUtil.IsEq(null, items[3].FileInfoLeft); // test CheckSelectedItemsSameType mockSelection.Clear(); TestUtil.IsEq(false, form.CheckSelectedItemsSameType()); mockSelection.Add((FileComparisonResult)listView.Items[0]); TestUtil.IsEq(true, form.CheckSelectedItemsSameType()); mockSelection.Add((FileComparisonResult)listView.Items[1]); TestUtil.IsEq(true, form.CheckSelectedItemsSameType()); mockSelection.Add((FileComparisonResult)listView.Items[2]); TestUtil.IsEq(false, form.CheckSelectedItemsSameType()); mockSelection.Clear(); TestUtil.IsEq(false, form.CheckSelectedItemsSameType()); mockSelection.Add((FileComparisonResult)listView.Items[1]); TestUtil.IsEq(true, form.CheckSelectedItemsSameType()); mockSelection.Add((FileComparisonResult)listView.Items[2]); TestUtil.IsEq(false, form.CheckSelectedItemsSameType()); // delete all on left checkFileContents(); SelectFirstItems(mockSelection, listView, items.Length); form.OnClickDeleteFile(left: true, needConfirm: false); // see if undo was set as expected var lastUndo = undoStack.PeekUndo(); TestUtil.IsEq(3, lastUndo.Count); TestUtil.IsEq(Path.Combine(left, "changed1.txt"), lastUndo[0].Source); TestUtil.IsEq(Path.Combine(left, "changed2.txt"), lastUndo[1].Source); TestUtil.IsEq(Path.Combine(left, "onlyleft.txt"), lastUndo[2].Source); // test file presence TestUtil.IsTrue(!File.Exists(Path.Combine(left, "changed1.txt"))); TestUtil.IsTrue(!File.Exists(Path.Combine(left, "changed2.txt"))); TestUtil.IsTrue(!File.Exists(Path.Combine(left, "onlyleft.txt"))); TestUtil.IsTrue(File.Exists(Path.Combine(right, "changed1.txt"))); TestUtil.IsTrue(File.Exists(Path.Combine(right, "changed2.txt"))); TestUtil.IsTrue(File.Exists(Path.Combine(right, "onlyright.txt"))); // run undo form.OnUndoClick(needConfirm: false); TestUtil.IsEq(null, undoStack.PeekUndo()); checkFileContents(); // delete all on right SelectFirstItems(mockSelection, listView, items.Length); form.OnClickDeleteFile(left: false, needConfirm: false); // see if undo was set as expected lastUndo = undoStack.PeekUndo(); TestUtil.IsEq(3, lastUndo.Count); TestUtil.IsEq(Path.Combine(right, "changed1.txt"), lastUndo[0].Source); TestUtil.IsEq(Path.Combine(right, "changed2.txt"), lastUndo[1].Source); TestUtil.IsEq(Path.Combine(right, "onlyright.txt"), lastUndo[2].Source); // test file presence TestUtil.IsTrue(File.Exists(Path.Combine(left, "changed1.txt"))); TestUtil.IsTrue(File.Exists(Path.Combine(left, "changed2.txt"))); TestUtil.IsTrue(File.Exists(Path.Combine(left, "onlyleft.txt"))); TestUtil.IsTrue(!File.Exists(Path.Combine(right, "changed1.txt"))); TestUtil.IsTrue(!File.Exists(Path.Combine(right, "changed2.txt"))); TestUtil.IsTrue(!File.Exists(Path.Combine(right, "onlyright.txt"))); // run undo form.OnUndoClick(needConfirm: false); TestUtil.IsEq(null, undoStack.PeekUndo()); checkFileContents(); // copy all left to right SelectFirstItems(mockSelection, listView, items.Length); form.OnClickCopyFile(left: true, needConfirm: false); // see if undo was set as expected lastUndo = undoStack.PeekUndo(); TestUtil.IsEq(5, lastUndo.Count); TestUtil.IsTrue(lastUndo[0] is FileOpFileMove); TestUtil.IsEq(Path.Combine(right, "changed1.txt"), lastUndo[0].Source); TestUtil.IsTrue(lastUndo[1] is FileOpFileCopy); TestUtil.IsEq(Path.Combine(left, "changed1.txt"), lastUndo[1].Source); TestUtil.IsEq(Path.Combine(right, "changed1.txt"), lastUndo[1].Dest); TestUtil.IsTrue(lastUndo[2] is FileOpFileMove); TestUtil.IsEq(Path.Combine(right, "changed2.txt"), lastUndo[2].Source); TestUtil.IsTrue(lastUndo[3] is FileOpFileCopy); TestUtil.IsEq(Path.Combine(left, "changed2.txt"), lastUndo[3].Source); TestUtil.IsEq(Path.Combine(right, "changed2.txt"), lastUndo[3].Dest); TestUtil.IsTrue(lastUndo[4] is FileOpFileCopy); TestUtil.IsEq(Path.Combine(left, "onlyleft.txt"), lastUndo[4].Source); TestUtil.IsEq(Path.Combine(right, "onlyleft.txt"), lastUndo[4].Dest); // test file contents TestUtil.IsEq("onlyl", File.ReadAllText(Path.Combine(left, "onlyleft.txt"))); TestUtil.IsEq("a", File.ReadAllText(Path.Combine(left, "changed1.txt"))); TestUtil.IsEq("123", File.ReadAllText(Path.Combine(left, "changed2.txt"))); TestUtil.IsEq("onlyl", File.ReadAllText(Path.Combine(right, "onlyleft.txt"))); TestUtil.IsEq("onlyr", File.ReadAllText(Path.Combine(right, "onlyright.txt"))); TestUtil.IsEq("a", File.ReadAllText(Path.Combine(right, "changed1.txt"))); TestUtil.IsEq("123", File.ReadAllText(Path.Combine(right, "changed2.txt"))); // run undo form.OnUndoClick(needConfirm: false); TestUtil.IsEq(null, undoStack.PeekUndo()); TestUtil.IsTrue(!File.Exists(Path.Combine(right, "onlyleft.txt"))); checkFileContents(); // copy all right to left SelectFirstItems(mockSelection, listView, items.Length); form.OnClickCopyFile(left: false, needConfirm: false); // see if undo was set as expected lastUndo = undoStack.PeekUndo(); TestUtil.IsEq(5, lastUndo.Count); TestUtil.IsTrue(lastUndo[0] is FileOpFileMove); TestUtil.IsEq(Path.Combine(left, "changed1.txt"), lastUndo[0].Source); TestUtil.IsTrue(lastUndo[1] is FileOpFileCopy); TestUtil.IsEq(Path.Combine(right, "changed1.txt"), lastUndo[1].Source); TestUtil.IsEq(Path.Combine(left, "changed1.txt"), lastUndo[1].Dest); TestUtil.IsTrue(lastUndo[2] is FileOpFileMove); TestUtil.IsEq(Path.Combine(left, "changed2.txt"), lastUndo[2].Source); TestUtil.IsTrue(lastUndo[3] is FileOpFileCopy); TestUtil.IsEq(Path.Combine(right, "changed2.txt"), lastUndo[3].Source); TestUtil.IsEq(Path.Combine(left, "changed2.txt"), lastUndo[3].Dest); TestUtil.IsTrue(lastUndo[4] is FileOpFileCopy); TestUtil.IsEq(Path.Combine(right, "onlyright.txt"), lastUndo[4].Source); TestUtil.IsEq(Path.Combine(left, "onlyright.txt"), lastUndo[4].Dest); // test file contents TestUtil.IsEq("onlyl", File.ReadAllText(Path.Combine(left, "onlyleft.txt"))); TestUtil.IsEq("onlyr", File.ReadAllText(Path.Combine(left, "onlyright.txt"))); TestUtil.IsEq("abc", File.ReadAllText(Path.Combine(left, "changed1.txt"))); TestUtil.IsEq("124", File.ReadAllText(Path.Combine(left, "changed2.txt"))); TestUtil.IsEq("onlyr", File.ReadAllText(Path.Combine(right, "onlyright.txt"))); TestUtil.IsEq("abc", File.ReadAllText(Path.Combine(right, "changed1.txt"))); TestUtil.IsEq("124", File.ReadAllText(Path.Combine(right, "changed2.txt"))); // run undo form.OnUndoClick(needConfirm: false); TestUtil.IsEq(null, undoStack.PeekUndo()); TestUtil.IsTrue(!File.Exists(Path.Combine(left, "onlyright.txt"))); checkFileContents(); form.Dispose(); }