/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/Test/Core/TestableFile.cs
95 строк
3 KB
Jared Parsons
Use CommonCompiler in Rebuild tests (#52208)
31 мар 2021, 02:33
Не верифицирован
31 мар 2021, 02:33
d0e6466
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text; using Microsoft.CodeAnalysis; using Roslyn.Utilities; namespace Roslyn.Test.Utilities { /// <summary> /// This works with <see cref="TestableFileSystem"/> to have an "in memory" file that can /// be manipulated by consumers of <see cref="ICommonCompilerFileSystem"/> /// /// This isn't meant to handle complex file system interactions but the basic cases of open, /// close, create, read and write. /// </summary> public sealed class TestableFile { private sealed class TestableFileStream : MemoryStream { public TestableFile MemoryFile { get; } public bool CopyBack { get; } public TestableFileStream(TestableFile memoryFile) { Debug.Assert(!memoryFile.Exists); MemoryFile = memoryFile; MemoryFile.Exists = true; CopyBack = true; } public TestableFileStream(TestableFile memoryFile, byte[] bytes, bool writable) : base(bytes, writable) { Debug.Assert(memoryFile.Exists); MemoryFile = memoryFile; CopyBack = writable; } protected override void Dispose(bool disposing) { if (disposing) { if (CopyBack) { MemoryFile.Contents.Clear(); MemoryFile.Contents.AddRange(this.ToArray()); } } base.Dispose(disposing); } } public bool Exists { get; private set; } public List<byte> Contents { get; } = new List<byte>(); public TestableFile() { } public TestableFile(string contents) { Exists = true; Contents.AddRange(Encoding.UTF8.GetBytes(contents)); } public TestableFile(byte[] contents) { Exists = true; Contents.AddRange(contents); } public MemoryStream GetStream(FileAccess access = FileAccess.ReadWrite) { var writable = access is FileAccess.Write or FileAccess.ReadWrite; if (!Exists) { if (!writable) { throw new InvalidOperationException(); } return new TestableFileStream(this); } return new TestableFileStream(this, Contents.ToArray(), writable); } } }