using System.IO; using Azaion.Common.Services; namespace Azaion.Test; public class InMemoryFileSystem : IFileSystem { private readonly Dictionary _files = new(); private readonly HashSet _directories = new(); public Task ReadAllBytesAsync(string path, CancellationToken ct = default) { if (!_files.TryGetValue(path, out var content)) throw new FileNotFoundException($"File not found: {path}"); return Task.FromResult(content); } public Task WriteAllBytesAsync(string path, byte[] content, CancellationToken ct = default) { _files[path] = content; var directory = Path.GetDirectoryName(path); if (directory != null) _directories.Add(directory); return Task.CompletedTask; } public bool FileExists(string path) { return _files.ContainsKey(path); } public void DeleteFile(string path) { _files.Remove(path); } public IEnumerable GetFiles(string directory, string searchPattern) { var pattern = searchPattern.Replace("*", ".*").Replace("?", "."); var regex = new System.Text.RegularExpressions.Regex(pattern); return _files.Keys.Where(f => Path.GetDirectoryName(f) == directory && regex.IsMatch(Path.GetFileName(f))); } public IEnumerable GetFileInfos(string directory, string[] searchPatterns) { var files = searchPatterns.SelectMany(pattern => GetFiles(directory, pattern)); return files.Select(f => new FileInfo(f)); } public DirectoryInfo GetDirectoryInfo(string path) { if (!_directories.Contains(path)) _directories.Add(path); return new DirectoryInfo(path); } public bool DirectoryExists(string path) { return _directories.Contains(path); } public void CreateDirectory(string path) { _directories.Add(path); } }