diff --git a/CliWrap.Tests/EnvironmentSpecs.cs b/CliWrap.Tests/EnvironmentSpecs.cs index 8422cdf2..2b3f2d47 100644 --- a/CliWrap.Tests/EnvironmentSpecs.cs +++ b/CliWrap.Tests/EnvironmentSpecs.cs @@ -1,23 +1,26 @@ using System; using System.Collections.Generic; -using System.IO; using System.Threading.Tasks; using CliWrap.Buffered; +using CliWrap.Tests.Fixtures; using CliWrap.Tests.Utils; using FluentAssertions; using Xunit; namespace CliWrap.Tests; -public class EnvironmentSpecs +public class EnvironmentSpecs : IClassFixture { + private readonly TempOutputFixture _tempOutputFixture; + + public EnvironmentSpecs(TempOutputFixture tempOutputFixture) => + _tempOutputFixture = tempOutputFixture; + [Fact(Timeout = 15000)] public async Task Command_can_be_executed_with_a_custom_working_directory() { // Arrange - var workingDirPath = Path.GetTempPath() - // trim slashes for cross-platform consistency - .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + var workingDirPath = _tempOutputFixture.GetTempDirPath(); var cmd = Cli.Wrap("dotnet") .WithWorkingDirectory(workingDirPath) diff --git a/CliWrap.Tests/Fixtures/TempOutputFixture.cs b/CliWrap.Tests/Fixtures/TempOutputFixture.cs index 4bb4f08e..b9e9cc7d 100644 --- a/CliWrap.Tests/Fixtures/TempOutputFixture.cs +++ b/CliWrap.Tests/Fixtures/TempOutputFixture.cs @@ -8,15 +8,28 @@ namespace CliWrap.Tests.Fixtures; public class TempOutputFixture : IDisposable { - private readonly string _dirPath = + private readonly string _rootDirPath = Path.GetDirectoryName(typeof(TempOutputFixture).Assembly.Location) ?? Directory.GetCurrentDirectory(); + private readonly ConcurrentBag _dirPaths = new(); private readonly ConcurrentBag _filePaths = new(); + public string GetTempDirPath(string dirName) + { + var dirPath = Path.Combine(_rootDirPath, dirName); + + Directory.CreateDirectory(dirPath); + _dirPaths.Add(dirPath); + + return dirPath; + } + + public string GetTempDirPath() => GetTempDirPath($"Test-{Guid.NewGuid()}"); + public string GetTempFilePath(string fileName) { - var filePath = Path.Combine(_dirPath, fileName); + var filePath = Path.Combine(_rootDirPath, fileName); _filePaths.Add(filePath); return filePath; @@ -44,6 +57,22 @@ public void Dispose() } } + foreach (var dirPath in _dirPaths) + { + try + { + Directory.Delete(dirPath, true); + } + catch (DirectoryNotFoundException) + { + // Ignore + } + catch (Exception ex) + { + exceptions.Add(ex); + } + } + if (exceptions.Any()) throw new AggregateException(exceptions); }