Esempio n. 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.ToString()}'");
            }

            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.");
        }
Esempio n. 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);
        }
Esempio n. 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);
        }
Esempio n. 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);
        }
Esempio n. 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);
        }