File: Manifest\ManifestEntryTests.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;
using Xunit;
 
namespace Microsoft.Extensions.FileProviders.Embedded.Manifest;
 
public class ManifestEntryTests
{
    [Fact]
    public void TraversingAFile_ReturnsUnknownPath()
    {
        // Arrange
        var file = new ManifestFile("a", "a.b.c");
 
        // Act
        var result = file.Traverse(".");
 
        // Assert
        Assert.Equal(ManifestEntry.UnknownPath, result);
    }
 
    [Fact]
    public void TraversingANonExistingFile_ReturnsUnknownPath()
    {
        // Arrange
        var directory = ManifestDirectory.CreateDirectory("a", Array.Empty<ManifestEntry>());
 
        // Act
        var result = directory.Traverse("missing.txt");
 
        // Assert
        Assert.Equal(ManifestEntry.UnknownPath, result);
    }
 
    [Fact]
    public void TraversingWithDot_ReturnsSelf()
    {
        // Arrange
        var directory = ManifestDirectory.CreateDirectory("a", Array.Empty<ManifestEntry>());
 
        // Act
        var result = directory.Traverse(".");
 
        // Assert
        Assert.Same(directory, result);
    }
 
    [Fact]
    public void TraversingWithDotDot_ReturnsParent()
    {
        // Arrange
        var childDirectory = ManifestDirectory.CreateDirectory("b", Array.Empty<ManifestEntry>());
        var directory = ManifestDirectory.CreateDirectory("a", new[] { childDirectory });
 
        // Act
        var result = childDirectory.Traverse("..");
 
        // Assert
        Assert.Equal(directory, result);
    }
 
    [Fact]
    public void TraversingRootDirectoryWithDotDot_ReturnsSinkDirectory()
    {
        // Arrange
        var directory = ManifestDirectory.CreateRootDirectory(Array.Empty<ManifestEntry>());
 
        // Act
        var result = directory.Traverse("..");
 
        // Assert
        Assert.Equal(ManifestEntry.UnknownPath, result);
    }
 
    [Fact]
    public void ScopingAFolderAndTryingToGetAScopedFile_ReturnsSinkDirectory()
    {
        // Arrange
        var directory = ManifestDirectory.CreateRootDirectory(new[] {
                ManifestDirectory.CreateDirectory("a",
                    new[] { new ManifestFile("test1.txt", "text.txt") }),
                ManifestDirectory.CreateDirectory("b",
                    new[] { new ManifestFile("test2.txt", "test2.txt") }) });
 
        var newRoot = ((ManifestDirectory)directory.Traverse("a")).ToRootDirectory();
 
        // Act
        var result = newRoot.Traverse("../b/test.txt");
 
        // Assert
        Assert.Same(ManifestEntry.UnknownPath, result);
    }
 
    [Theory]
    [InlineData("..")]
    [InlineData(".")]
    [InlineData("file.txt")]
    [InlineData("folder")]
    public void TraversingUnknownPath_ReturnsSinkDirectory(string path)
    {
        // Arrange
        var directory = ManifestEntry.UnknownPath;
 
        // Act
        var result = directory.Traverse(path);
 
        // Assert
        Assert.Equal(ManifestEntry.UnknownPath, result);
    }
}