From c70de8284987e4977ee40133180a1b220a68da71 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sat, 30 May 2020 12:17:13 +1000 Subject: Add TestDataFolderFileSystem. --- src/WixBuildTools.TestSupport/RobocopyRunner.cs | 16 +++++++++ .../TestDataFolderFileSystem.cs | 42 ++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/WixBuildTools.TestSupport/RobocopyRunner.cs create mode 100644 src/WixBuildTools.TestSupport/TestDataFolderFileSystem.cs diff --git a/src/WixBuildTools.TestSupport/RobocopyRunner.cs b/src/WixBuildTools.TestSupport/RobocopyRunner.cs new file mode 100644 index 00000000..49d53351 --- /dev/null +++ b/src/WixBuildTools.TestSupport/RobocopyRunner.cs @@ -0,0 +1,16 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixBuildTools.TestSupport +{ + public class RobocopyRunner : ExternalExecutable + { + private static readonly RobocopyRunner Instance = new RobocopyRunner(); + + private RobocopyRunner() : base("robocopy") { } + + public static ExternalExecutableResult Execute(string args) + { + return Instance.Run(args); + } + } +} diff --git a/src/WixBuildTools.TestSupport/TestDataFolderFileSystem.cs b/src/WixBuildTools.TestSupport/TestDataFolderFileSystem.cs new file mode 100644 index 00000000..8d670bf0 --- /dev/null +++ b/src/WixBuildTools.TestSupport/TestDataFolderFileSystem.cs @@ -0,0 +1,42 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixBuildTools.TestSupport +{ + using System; + + /// + /// This class builds on top of DisposableFileSystem + /// to make it easy to write a test that needs a whole folder of test data copied to a temp location + /// that will automatically be cleaned up at the end of the test. + /// + public class TestDataFolderFileSystem : IDisposable + { + private DisposableFileSystem fileSystem; + + public string BaseFolder { get; private set; } + + public void Dispose() + { + this.fileSystem?.Dispose(); + } + + public void Initialize(string sourceDirectoryPath) + { + if (this.fileSystem != null) + { + throw new InvalidOperationException(); + } + this.fileSystem = new DisposableFileSystem(); + + this.BaseFolder = this.fileSystem.GetFolder(); + + RobocopyFolder(sourceDirectoryPath, this.BaseFolder); + } + + private static ExternalExecutableResult RobocopyFolder(string sourceFolderPath, string destinationFolderPath) + { + var args = $"\"{sourceFolderPath}\" \"{destinationFolderPath}\" /E /R:1 /W:1"; + return RobocopyRunner.Execute(args); + } + } +} -- cgit v1.2.3-55-g6feb