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

			LogHelper.InitializeLogging(renameOption);

            Log.T("Processing 'rename' operation.");
            renameOption.FilesOrDirectories = _optionsUtils.EnsureFilesOrDirectoriesValues(renameOption);

            return _renameOperation.RenameAsync(renameOption.FilesOrDirectories, renameOption.Recursive, renameOption.Using);
		}
		public void RunRenameAsync_OptionsOk_CheckEnsureFilesOrDirectoriesValuesCalled()
		{
			// Arrange
			var options = new RenameOptions() {
				FilesOrDirectories = new[] { "SomeVerb", @"C:\Temp" },
				Recursive = true,
				Using = RenameUsing.DateTaken,
			};

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

			// Act
			_target.RunRenameAsync(options);

			// Assert
			_optionUtils.Received(1).EnsureFilesOrDirectoriesValues(options);
			CollectionAssert.AreEquivalent(expected, options.FilesOrDirectories);
		}
		public void RunRenameAsync_OptionsOk_CheckRunRenameAsyncCalled()
		{
			// Arrange
			var options = new RenameOptions() {
				FilesOrDirectories = new[] { "SomeVerb", @"C:\Temp" },
				Recursive = true,
				Using = RenameUsing.DateTaken,
			};

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

			var expectedTask = Task.FromResult(0);
			_renameOperation.RenameAsync(filesOrDirectories, options.Recursive, options.Using).Returns(expectedTask);

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

			// Assert
			_renameOperation.Received(1).RenameAsync(filesOrDirectories, options.Recursive, options.Using);
			Assert.AreSame(expectedTask, task);
		}