File: TestAssembly.cs
Web Access
Project: src\src\FileProviders\Embedded\test\Microsoft.Extensions.FileProviders.Embedded.Tests.csproj (Microsoft.Extensions.FileProviders.Embedded.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using Microsoft.Extensions.FileProviders.Embedded.Manifest;
 
namespace Microsoft.Extensions.FileProviders;
 
internal class TestAssembly : Assembly
{
    public TestAssembly(string manifest, string manifestName = "Microsoft.Extensions.FileProviders.Embedded.Manifest.xml")
    {
        ManifestStream = new MemoryStream();
        using (var writer = new StreamWriter(ManifestStream, Encoding.UTF8, 1024, leaveOpen: true))
        {
            writer.Write(manifest);
        }
 
        ManifestStream.Seek(0, SeekOrigin.Begin);
        ManifestName = manifestName;
    }
 
    public TestAssembly(TestEntry entry, string manifestName = "Microsoft.Extensions.FileProviders.Embedded.Manifest.xml")
    {
        ManifestName = manifestName;
 
        var manifest = new XDocument(
            new XDeclaration("1.0", "utf-8", "yes"),
            new XElement("Manifest",
                new XElement("ManifestVersion", "1.0"),
                new XElement("FileSystem", entry.Children.Select(c => c.ToXElement()))));
 
        ManifestStream = new MemoryStream();
        using (var writer = XmlWriter.Create(ManifestStream, new XmlWriterSettings { CloseOutput = false }))
        {
            manifest.WriteTo(writer);
        }
 
        ManifestStream.Seek(0, SeekOrigin.Begin);
        Files = entry.GetFiles().Select(f => f.ResourcePath).ToArray();
    }
 
    public string ManifestName { get; }
    public MemoryStream ManifestStream { get; private set; }
    public string[] Files { get; private set; }
 
    public override Stream GetManifestResourceStream(string name)
    {
        if (string.Equals(ManifestName, name))
        {
            return ManifestStream;
        }
 
        return Files.Contains(name) ? Stream.Null : null;
    }
 
    public override string Location => null;
 
    public override AssemblyName GetName()
    {
        return new AssemblyName("TestAssembly");
    }
}