/// <summary>
		/// Runs the prune operation.
		/// </summary>
		/// <returns>A task that represents the prune operation.</returns>
		/// <param name="renameOption">Parsed prune options.</param>
		public Task RunPruneAsync(PruneOptions pruneOption)
		{
			if (pruneOption == null)
				throw new ArgumentNullException("pruneOption");

			LogHelper.InitializeLogging(pruneOption);

            Log.T("Processing 'prune' operation.");
			pruneOption.FilesOrDirectories = _optionsUtils.EnsureFilesOrDirectoriesValues(pruneOption);

            if (pruneOption.Gather)
            {
                Log.D("Processing 'prune gather' operation.");
                return _pruneOperation.GatherAsync(pruneOption.FilesOrDirectories, pruneOption.Recursive, pruneOption.AcceptanceThreshold);
            }
            if (pruneOption.Commit)
            {
                Log.D("Processing 'prune commit' operation.");
                return _pruneOperation.CommitAsync(pruneOption.FilesOrDirectories, pruneOption.Recursive);
            }
            return Task.FromResult(0);
		}
		public void RunPruneAsync_CommitTrue_CheckCommitAsyncCalled()
		{
			// Arrange
			var options = new PruneOptions() {
				FilesOrDirectories = new[] { "SomeVerb", @"C:\Temp" },
				Recursive = true,
				AcceptanceThreshold = 65,
				Commit = true,
			};

			var filesOrDirectories = new List<string>() { "SomeVerb", @"C:\Temp" };
			_optionUtils.EnsureFilesOrDirectoriesValues(options).Returns(filesOrDirectories);

			var expectedTask = Task.FromResult(0);
			_pruneOperation.CommitAsync(filesOrDirectories, options.Recursive).Returns(expectedTask);

			// Act
			var task = _target.RunPruneAsync(options);

			// Assert
			_pruneOperation.Received(1).CommitAsync(filesOrDirectories, options.Recursive);
			Assert.AreSame(expectedTask, task);
		}
		public void RunPruneAsync_OptionsOk_CheckEnsureFilesOrDirectoriesValuesCalled()
		{
			// Arrange
			var options = new PruneOptions() {
				FilesOrDirectories = new[] { "SomeVerb", @"C:\Temp" },
				Recursive = true,
				Gather = true,
			};

			var expected = new List<string>() { "SomeVerb", @"C:\Temp" };
			_optionUtils.EnsureFilesOrDirectoriesValues(options).Returns(expected);

			// Act
			_target.RunPruneAsync(options);

			// Assert
			_optionUtils.Received(1).EnsureFilesOrDirectoriesValues(options);
			CollectionAssert.AreEquivalent(expected, options.FilesOrDirectories);
		}