示例#1
0
    private static ManifestEntry BuildEntry(XElement element)
    {
        RuntimeHelpers.EnsureSufficientExecutionStack();
        if (element.NodeType != XmlNodeType.Element)
        {
            throw new InvalidOperationException($"Invalid manifest format. Expected a 'File' or a 'Directory' node:" +
                                                $" '{element}'");
        }

        if (string.Equals(element.Name.LocalName, "File", StringComparison.Ordinal))
        {
            var entryName = EnsureName(element);
            var path      = EnsureElement(element, "ResourcePath");
            var pathValue = EnsureText(path);
            return(new ManifestFile(entryName, pathValue));
        }

        if (string.Equals(element.Name.LocalName, "Directory", StringComparison.Ordinal))
        {
            var directoryName = EnsureName(element);
            var children      = new List <ManifestEntry>();
            foreach (var child in element.Elements())
            {
                children.Add(BuildEntry(child));
            }

            ValidateEntries(children);

            return(ManifestDirectory.CreateDirectory(directoryName, children.ToArray()));
        }

        throw new InvalidOperationException($"Invalid manifest format.Expected a 'File' or a 'Directory' node. " +
                                            $"Got '{element.Name.LocalName}' instead.");
    }
示例#2
0
    public void TraversingWithDot_ReturnsSelf()
    {
        // Arrange
        var directory = ManifestDirectory.CreateDirectory("a", Array.Empty <ManifestEntry>());

        // Act
        var result = directory.Traverse(".");

        // Assert
        Assert.Same(directory, result);
    }
示例#3
0
    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);
    }
示例#4
0
    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);
    }
示例#5
0
    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);
    }
    public void ResolveEntry_AllowsSingleDirectorySeparator(string path)
    {
        // Arrange
        var manifest = new EmbeddedFilesManifest(
            ManifestDirectory.CreateRootDirectory(
                new[]
        {
            ManifestDirectory.CreateDirectory("wwwroot",
                                              new[]
            {
                new ManifestFile("jquery.validate.js", "wwwroot.jquery.validate.js")
            })
        }));
        // Act
        var entry = manifest.ResolveEntry(path);

        // Assert
        Assert.NotNull(entry);
    }