Skip to content

Commit

Permalink
Use temp output fixture for cwd test
Browse files Browse the repository at this point in the history
  • Loading branch information
Tyrrrz authored Apr 16, 2022
1 parent 4ef7091 commit 11f3aba
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 7 deletions.
13 changes: 8 additions & 5 deletions CliWrap.Tests/EnvironmentSpecs.cs
Original file line number Diff line number Diff line change
@@ -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<TempOutputFixture>
{
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)
Expand Down
33 changes: 31 additions & 2 deletions CliWrap.Tests/Fixtures/TempOutputFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<string> _dirPaths = new();
private readonly ConcurrentBag<string> _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;
Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit 11f3aba

Please sign in to comment.