private static void TestOneCase(string[] srcDirectories, string[] srcFiles, string[] destDirectories, string[] destFiles, InputParams inputParams, SyncResults expectedResults)
{
// delete base directories in case they were hanging around from a previous failed test
DeleteTestDirectory(baseDirSrc);
DeleteTestDirectory(baseDirDest);
// create source directories and files specified by test
CreateTestDirectories(baseDirSrc, srcDirectories);
CreateTestFiles(baseDirSrc, null, srcFiles);
// create destination directories and files specified by test
if (destDirectories != null)
{
CreateTestDirectories(baseDirDest, destDirectories);
}
if (destFiles != null)
{
CreateTestFiles(baseDirDest, baseDirSrc, destFiles);
}
// perform the directory sync
SyncResults results = new SyncResults();
results = new Sync(baseDirSrc, baseDirDest).Start(inputParams);
// Assert we have expected results
Assert.IsTrue(SyncTools.CompareTo(expectedResults, results));
// If we are deleting extra files from destination, verify we have exactly the same files as filtered source files
if (inputParams.DeleteFromDest &&
(!(inputParams.DeleteExcludeFiles != null) && !(inputParams.DeleteExcludeDirs != null)))
{
// calc hash of filtered files & directories in source tree
byte[] hashSrc = CalcHash(baseDirSrc, inputParams);
// calc hash of all files & directories in destination tree
byte[] hashDest = CalcHash(baseDirDest, null);
// hashes must match
bool hashesMatch = SyncTools.CompareByteArrays(hashSrc, hashDest);
Assert.IsTrue(hashesMatch);
}
DeleteTestDirectory(baseDirSrc);
DeleteTestDirectory(baseDirDest);
}