using Amphora; using UnitTestSharp; namespace Glass.UnitTests { public class FileSystemExtensionsTests : TestFixture { public class ReadAllBytesTests : TestFixture { public void ReturnsWhatTheFileHolds() { var files = new InMemoryFileSystem(); InMemoryFileSystemTests.WriteAll(files.OpenWrite("/a.bin").Value, 4, 5, 6); CheckEqual(new byte[] { 4, 5, 6 }, files.ReadAllBytes("/a.bin").Value); } public void AnEmptyFile_ReturnsNoBytes() { var files = new InMemoryFileSystem(); files.AddFile("/empty.bin", size: 0); CheckEqual(0, files.ReadAllBytes("/empty.bin").Value.Length); } public void AFileThatIsntThere_FailsAsNotFound() { var files = new InMemoryFileSystem(); StatusOr read = files.ReadAllBytes("/missing.bin"); CheckTrue(ReferenceEquals(FileSystemFailures.NotFound, read.Kind)); } } public class WriteAllBytesTests : TestFixture { public void MakesAFileHoldingTheBytes() { var files = new InMemoryFileSystem(); Status written = files.WriteAllBytes("/a.bin", new byte[] { 1, 2, 3 }); CheckTrue(written.IsOk); CheckEqual(new byte[] { 1, 2, 3 }, files.ReadAllBytes("/a.bin").Value); } public void ReplacesWhatWasThere() { var files = new InMemoryFileSystem(); files.WriteAllBytes("/a.bin", new byte[] { 1, 2, 3 }); files.WriteAllBytes("/a.bin", new byte[] { 9 }); CheckEqual(new byte[] { 9 }, files.ReadAllBytes("/a.bin").Value); } public void IntoADirectoryThatIsntThere_FailsAsNotFound() { var files = new InMemoryFileSystem(); Status written = files.WriteAllBytes("/nowhere/a.bin", new byte[] { 1 }); CheckTrue(ReferenceEquals(FileSystemFailures.NotFound, written.Kind)); } public void ToAStoreThatIsFull_FailsAsAnIoError() { var store = new KeyValueFileSystemTests.FullStore { Full = true }; var files = new KeyValueFileSystem(store); Status written = files.WriteAllBytes("/a.bin", new byte[] { 1 }); CheckTrue(ReferenceEquals(FileSystemFailures.IoError, written.Kind)); } } public class EnsureDirectoryTests : TestFixture { public void AMissingDirectory_IsMade() { var files = new InMemoryFileSystem(); files.EnsureDirectory("/saves"); CheckTrue(files.List("/saves").TryGetValue(out _)); } public void AnExistingDirectory_KeepsItsContents() { var files = new InMemoryFileSystem(); files.CreateDirectory("/saves"); files.CreateDirectory("/saves/kept"); files.EnsureDirectory("/saves"); CheckEqual(1, files.List("/saves").Value.Count); } public void AMissingDirectoryWithNoParent_IsLeftMissing() { var files = new InMemoryFileSystem(); files.EnsureDirectory("/no/such/saves"); CheckFalse(files.List("/no/such/saves").TryGetValue(out _)); } } } }