/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Mvc/shared/Mvc.Views.TestCommon/TestFileProvider.cs
179 строк
4 KB
Martin Costello
Enable CA1854 (#44799)
01 ноя 2022, 04:02
Не верифицирован
01 ноя 2022, 04:02
983ca23
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.Extensions.Primitives; namespace Microsoft.Extensions.FileProviders; public class TestFileProvider : IFileProvider { private readonly Dictionary<string, IFileInfo> _lookup = new Dictionary<string, IFileInfo>(StringComparer.Ordinal); private readonly Dictionary<string, IDirectoryContents> _directoryContentsLookup = new Dictionary<string, IDirectoryContents>(); private readonly Dictionary<string, TestFileChangeToken> _fileTriggers = new Dictionary<string, TestFileChangeToken>(StringComparer.Ordinal); public TestFileProvider() : this(string.Empty) { } public TestFileProvider(string root) { Root = root; } public string Root { get; } public virtual IDirectoryContents GetDirectoryContents(string subpath) { if (_directoryContentsLookup.TryGetValue(subpath, out var value)) { return value; } return new NotFoundDirectoryContents(); } public TestFileInfo AddFile(string path, string contents) { var fileInfo = new TestFileInfo { Content = contents, PhysicalPath = Path.Combine(Root, NormalizeAndEnsureValidPhysicalPath(path)), Name = Path.GetFileName(path), LastModified = DateTime.UtcNow, }; AddFile(path, fileInfo); return fileInfo; } public TestDirectoryContent AddDirectoryContent(string path, IEnumerable<IFileInfo> files) { var directoryContent = new TestDirectoryContent(Path.GetFileName(path), files); _directoryContentsLookup[path] = directoryContent; return directoryContent; } public void AddFile(string path, IFileInfo contents) { _lookup[path] = contents; } public void DeleteFile(string path) { _lookup.Remove(path); } public virtual IFileInfo GetFileInfo(string subpath) { if (_lookup.TryGetValue(subpath, out var fileInfo)) { return fileInfo; } else { return new NotFoundFileInfo(); } } public virtual TestFileChangeToken AddChangeToken(string filter) { var changeToken = new TestFileChangeToken(filter); _fileTriggers[filter] = changeToken; return changeToken; } public virtual IChangeToken Watch(string filter) { if (!_fileTriggers.TryGetValue(filter, out var changeToken) || changeToken.HasChanged) { changeToken = new TestFileChangeToken(filter); _fileTriggers[filter] = changeToken; } return changeToken; } public TestFileChangeToken GetChangeToken(string filter) { return _fileTriggers[filter]; } private static string NormalizeAndEnsureValidPhysicalPath(string filePath) { if (string.IsNullOrEmpty(filePath)) { return filePath; } filePath = filePath.Replace('/', Path.DirectorySeparatorChar); if (filePath[0] == Path.DirectorySeparatorChar) { filePath = filePath.Substring(1); } return filePath; } private sealed class NotFoundFileInfo : IFileInfo { public bool Exists { get { return false; } } public bool IsDirectory { get { throw new NotImplementedException(); } } public DateTimeOffset LastModified { get { throw new NotImplementedException(); } } public long Length { get { throw new NotImplementedException(); } } public string Name { get { throw new NotImplementedException(); } } public string PhysicalPath { get { throw new NotImplementedException(); } } public Stream CreateReadStream() { throw new NotImplementedException(); } } }