using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; namespace Pithos.Core.Test { [TestFixture] public class WorkflowFileStatusTest { private MockSettings _settings; private MockStatusChecker _statusChecker; [SetUp] public void SetUp() { _settings = new MockSettings { PithosPath = @"e:\Pithos", IconsPath = @"C:\Program Files\Common Files\TortoiseOverlays\icons\XPStyle" }; _statusChecker = new MockStatusChecker { Settings = _settings }; } [Test] public void TestSetFileStatusCreated() { PithosWorkflow workflow = new PithosWorkflow { Settings = _settings, StatusKeeper = _statusChecker }; var path = @"e:\pithos\0File1.txt"; workflow.SetFileStatus(path, FileStatus.Created); var status = _statusChecker.GetFileStatus(path); Assert.AreEqual(FileStatus.Created, status); } [Test] public void TestSetFileStatusCreatedTransitions() { IPithosWorkflow workflow = new PithosWorkflow { Settings = _settings, StatusKeeper = _statusChecker }; var path = @"e:\pithos\0File1.txt"; var initialStatus = FileStatus.Created; FileStatus[,] transitions = { { FileStatus.Modified, FileStatus.Created }, { FileStatus.Created, FileStatus.Created }, { FileStatus.Deleted, FileStatus.Deleted }, { FileStatus.Renamed, FileStatus.Renamed }, { FileStatus.Unchanged, FileStatus.Unchanged }, }; TestTransitions(transitions, workflow, path, initialStatus); } [Test] public void TestSetFileStatusModifiedTransitions() { IPithosWorkflow workflow = new PithosWorkflow { Settings = _settings, StatusKeeper = _statusChecker }; var path = @"e:\pithos\0File1.txt"; var initialStatus = FileStatus.Modified; FileStatus[,] transitions = { { FileStatus.Modified, FileStatus.Modified }, { FileStatus.Created, FileStatus.Modified }, { FileStatus.Deleted, FileStatus.Deleted }, { FileStatus.Renamed, FileStatus.Renamed }, { FileStatus.Unchanged, FileStatus.Unchanged }, }; TestTransitions(transitions, workflow, path, initialStatus); } [Test] public void TestSetFileStatusUnchangedTransitions() { IPithosWorkflow workflow = new PithosWorkflow { Settings = _settings, StatusKeeper = _statusChecker }; var path = @"e:\pithos\0File1.txt"; var initialStatus = FileStatus.Unchanged; FileStatus[,] transitions = { { FileStatus.Modified, FileStatus.Modified }, { FileStatus.Created, FileStatus.Created }, { FileStatus.Deleted, FileStatus.Deleted }, { FileStatus.Renamed, FileStatus.Renamed }, { FileStatus.Unchanged, FileStatus.Unchanged }, }; TestTransitions(transitions, workflow, path, initialStatus); } [Test] public void TestSetFileStatusDeletedTransitions() { IPithosWorkflow workflow = new PithosWorkflow { Settings = _settings, StatusKeeper = _statusChecker }; var path = @"e:\pithos\0File1.txt"; var initialStatus = FileStatus.Deleted; FileStatus[,] transitions = { { FileStatus.Modified, FileStatus.Deleted }, { FileStatus.Created, FileStatus.Deleted }, { FileStatus.Deleted, FileStatus.Deleted }, { FileStatus.Renamed, FileStatus.Deleted }, { FileStatus.Unchanged, FileStatus.Deleted }, }; TestTransitions(transitions, workflow, path, initialStatus); } [Test] public void TestSetFileStatusRenamedTransitions() { IPithosWorkflow workflow = new PithosWorkflow { Settings = _settings, StatusKeeper = _statusChecker }; var path = @"e:\pithos\0File1.txt"; var initialStatus = FileStatus.Renamed; FileStatus[,] transitions = { { FileStatus.Modified, FileStatus.Modified }, { FileStatus.Created, FileStatus.Renamed }, { FileStatus.Deleted, FileStatus.Deleted }, { FileStatus.Renamed, FileStatus.Renamed }, { FileStatus.Unchanged, FileStatus.Unchanged }, }; TestTransitions(transitions, workflow, path, initialStatus); } private void TestTransitions(FileStatus[,] transitions, IPithosWorkflow workflow, string path, FileStatus initialStatus) { workflow.SetFileStatus(path, initialStatus); var status = _statusChecker.GetFileStatus(path); Assert.AreEqual(initialStatus, status, "Setting new file to {0}", status); for (int i = 0; i < transitions.GetLength(0); i++) { workflow.ClearFileStatus(path); status = _statusChecker.GetFileStatus(path); Assert.AreEqual(FileStatus.Missing, status, "Clear status"); workflow.SetFileStatus(path, initialStatus); var transition = transitions[i, 0]; var result = transitions[i, 1]; workflow.SetFileStatus(path, transition); status = _statusChecker.GetFileStatus(path); Assert.AreEqual(result, status, "Marking {0} as {1}", initialStatus, transition); } } } }