using System.Linq;
using MfGames.Nitride.Contents;
using MfGames.Nitride.IO.Contents;
using Xunit;
using Xunit.Abstractions;
using Zio;
using Zio.FileSystems;
namespace MfGames.Nitride.IO.Tests;
///
/// Tests the functionality of the WriteFiles().
///
public class WriteFilesTest : NitrideIOTestBase
{
public WriteFilesTest(ITestOutputHelper output)
: base(output)
{
}
[Fact]
public void WriteAllFiles()
{
// Set up the test.
using NitrideIOTestContext context = this.CreateContext();
// Set up the file.
IFileSystem fileSystem = context.FileSystem;
fileSystem.CreateDirectory("/b1");
fileSystem.CreateDirectory("/c1");
fileSystem.CreateDirectory("/c1/c2");
fileSystem.CreateDirectory("/d1");
fileSystem.WriteAllText("/a.txt", "File A");
fileSystem.WriteAllText("/b1/b.md", "File B");
fileSystem.WriteAllText("/c1/c2/e.md", "File E");
// Set up the operation.
var output = new MemoryFileSystem();
ReadFiles readFiles = context.Resolve();
WriteFiles op = context.Resolve()
.WithFileSystem(output);
// Read and write out the files. We switch one of the files to be
// text content to make sure that works too.
readFiles.WithPattern("/**")
.Run()
.Select(
x => x.Get() == "/b1/b.md"
? x.SetTextContent(((ITextContentConvertable)x.GetBinaryContent()).ToTextContent())
: x)
.Run(op);
// Verify the results.
Assert.True(output.FileExists("/a.txt"));
Assert.True(output.FileExists("/b1/b.md"));
Assert.True(output.FileExists("/c1/c2/e.md"));
Assert.Equal("File A", output.ReadAllText("/a.txt"));
Assert.Equal("File B", output.ReadAllText("/b1/b.md"));
Assert.Equal("File E", output.ReadAllText("/c1/c2/e.md"));
}
}