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."); }
public void TraversingWithDot_ReturnsSelf() { // Arrange var directory = ManifestDirectory.CreateDirectory("a", Array.Empty <ManifestEntry>()); // Act var result = directory.Traverse("."); // Assert Assert.Same(directory, result); }
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); }
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); }
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); }