Add TestDataFolderFileSystem.
Sean Hall committed
May 30, 2020 at 12:17 UTC
c70de8284987e4977ee40133180a1b220a68da71
2 files changed
+58
src/WixBuildTools.TestSupport/RobocopyRunner.cs
new
+16
@@ -0,0 +1,16 @@
1
+// 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.
2
+
3
+namespace WixBuildTools.TestSupport
4
+{
5
+ public class RobocopyRunner : ExternalExecutable
6
+ {
7
+ private static readonly RobocopyRunner Instance = new RobocopyRunner();
8
+
9
+ private RobocopyRunner() : base("robocopy") { }
10
+
11
+ public static ExternalExecutableResult Execute(string args)
12
+ {
13
+ return Instance.Run(args);
14
+ }
15
+ }
16
+}
src/WixBuildTools.TestSupport/TestDataFolderFileSystem.cs
new
+42
@@ -0,0 +1,42 @@
1
+// 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.
2
+
3
+namespace WixBuildTools.TestSupport
4
+{
5
+ using System;
6
+
7
+ /// <summary>
8
+ /// This class builds on top of DisposableFileSystem
9
+ /// to make it easy to write a test that needs a whole folder of test data copied to a temp location
10
+ /// that will automatically be cleaned up at the end of the test.
11
+ /// </summary>
12
+ public class TestDataFolderFileSystem : IDisposable
13
+ {
14
+ private DisposableFileSystem fileSystem;
15
+
16
+ public string BaseFolder { get; private set; }
17
+
18
+ public void Dispose()
19
+ {
20
+ this.fileSystem?.Dispose();
21
+ }
22
+
23
+ public void Initialize(string sourceDirectoryPath)
24
+ {
25
+ if (this.fileSystem != null)
26
+ {
27
+ throw new InvalidOperationException();
28
+ }
29
+ this.fileSystem = new DisposableFileSystem();
30
+
31
+ this.BaseFolder = this.fileSystem.GetFolder();
32
+
33
+ RobocopyFolder(sourceDirectoryPath, this.BaseFolder);
34
+ }
35
+
36
+ private static ExternalExecutableResult RobocopyFolder(string sourceFolderPath, string destinationFolderPath)
37
+ {
38
+ var args = $"\"{sourceFolderPath}\" \"{destinationFolderPath}\" /E /R:1 /W:1";
39
+ return RobocopyRunner.Execute(args);
40
+ }
41
+ }
42
+}