Exemple #1
0
        public void InjectsScriptTagReferencingAssemblyAndDependencies()
        {
            // Arrange
            var htmlTemplatePrefix = @"
                <html>
                <body>
                    <h1>Hello</h1>
                    Some text
                    <script>alert(1)</script>";
            var htmlTemplateSuffix = @"
                </body>
                </html>";
            var htmlTemplate       =
                $@"{htmlTemplatePrefix}
                    <script type='blazor-boot' custom1 custom2=""value"">some text that should be removed</script>
                {htmlTemplateSuffix}";
            var assemblyReferences = new string[] { "System.Abc.dll", "MyApp.ClassLib.dll", };
            var jsReferences       = new string[] { "some/file.js", "another.js" };
            var cssReferences      = new string[] { "my/styles.css" };
            var instance           = IndexHtmlWriter.GetIndexHtmlContents(
                htmlTemplate,
                "MyApp.Entrypoint",
                "MyNamespace.MyType::MyMethod",
                assemblyReferences,
                jsReferences,
                cssReferences,
                linkerEnabled: true);

            // Act & Assert: Start and end is not modified (including formatting)
            Assert.StartsWith(htmlTemplatePrefix, instance);
            Assert.EndsWith(htmlTemplateSuffix, instance);

            // Assert: Boot tag is correct
            var scriptTagText = instance.Substring(htmlTemplatePrefix.Length, instance.Length - htmlTemplatePrefix.Length - htmlTemplateSuffix.Length);
            var parsedHtml    = new HtmlParser().Parse("<html><body>" + scriptTagText + "</body></html>");
            var scriptElems   = parsedHtml.Body.QuerySelectorAll("script");
            var linkElems     = parsedHtml.Body.QuerySelectorAll("link");
            var scriptElem    = scriptElems[0];

            Assert.False(scriptElem.HasChildNodes);
            Assert.Equal("_framework/blazor.js", scriptElem.GetAttribute("src"));
            Assert.Equal("MyApp.Entrypoint.dll", scriptElem.GetAttribute("main"));
            Assert.Equal("MyNamespace.MyType::MyMethod", scriptElem.GetAttribute("entrypoint"));
            Assert.Equal("System.Abc.dll,MyApp.ClassLib.dll", scriptElem.GetAttribute("references"));
            Assert.False(scriptElem.HasAttribute("type"));
            Assert.Equal(string.Empty, scriptElem.Attributes["custom1"].Value);
            Assert.Equal("value", scriptElem.Attributes["custom2"].Value);
            Assert.Equal("true", scriptElem.Attributes["linker-enabled"].Value);

            // Assert: Also contains script tags referencing JS files
            Assert.Equal(
                scriptElems.Skip(1).Select(tag => tag.GetAttribute("src")),
                jsReferences);

            // Assert: Also contains link tags referencing CSS files
            Assert.Equal(
                linkElems.Select(tag => tag.GetAttribute("href")),
                cssReferences);
        }
        public void SuppliesHtmlTemplateUnchangedIfNoBootScriptPresent()
        {
            // Arrange
            var htmlTemplate       = "<!DOCTYPE html><html><body><h1 style='color:red'>Hello</h1>Some text<script type='irrelevant'>blah</script></body></html>";
            var assemblyReferences = new string[] { "System.Abc.dll", "MyApp.ClassLib.dll" };
            var jsReferences       = new string[] { "some/file.js", "another.js" };
            var cssReferences      = new string[] { "my/styles.css" };

            var content = IndexHtmlWriter.GetIndexHtmlContents(
                htmlTemplate, "MyApp.Entrypoint", "MyNamespace.MyType::MyMethod", assemblyReferences, jsReferences, cssReferences, linkerEnabled: true, reloadUri: "/my/reload");

            // Assert
            Assert.Equal(htmlTemplate, content);
        }
        public void SuppliesHtmlTemplateUnchangedIfNoBootScriptPresent()
        {
            // Arrange
            var htmlTemplate = "<!DOCTYPE html><html><body><h1 style='color:red'>Hello</h1>Some text<script type='irrelevant'>blah</script></body></html>";
            var dependencies = new string[]
            {
                "System.Abc.dll",
                "MyApp.ClassLib.dll",
            };

            var content = IndexHtmlWriter.GetIndexHtmlContents(
                htmlTemplate, "MyApp.Entrypoint", "MyNamespace.MyType::MyMethod", dependencies);

            // Assert
            Assert.Equal(htmlTemplate, content);
        }
Exemple #4
0
        public void InjectsAdditionalTagsForEmbeddedContent()
        {
            // Arrange
            var htmlTemplate    = "Start <script id='testboot' type='blazor-boot'></script> End";
            var embeddedContent = new[]
            {
                new EmbeddedResourceInfo(EmbeddedResourceKind.Static, "my/static/file"),
                new EmbeddedResourceInfo(EmbeddedResourceKind.Css, "css/first.css"),
                new EmbeddedResourceInfo(EmbeddedResourceKind.JavaScript, "javascript/first.js"),
                new EmbeddedResourceInfo(EmbeddedResourceKind.Css, "css/second.css"),
                new EmbeddedResourceInfo(EmbeddedResourceKind.JavaScript, "javascript/second.js"),
            };

            // Act
            var resultHtml = IndexHtmlWriter.GetIndexHtmlContents(
                htmlTemplate,
                "MyApp.Entrypoint",
                "MyNamespace.MyType::MyMethod",
                assemblyReferences: new[] { "Something.dll" },
                embeddedContent: embeddedContent,
                linkerEnabled: true);

            // Assert
            var parsedHtml       = new HtmlParser().Parse(resultHtml);
            var blazorBootScript = parsedHtml.GetElementById("testboot");

            Assert.NotNull(blazorBootScript);
            Assert.Equal(
                "Start "
                + blazorBootScript.OuterHtml
                // First we insert the CSS file tags in order
                + Environment.NewLine + "<link rel=\"stylesheet\" href=\"css/first.css\" />"
                + Environment.NewLine + "<link rel=\"stylesheet\" href=\"css/second.css\" />"
                // Then the JS file tags in order, each with 'defer'
                + Environment.NewLine + "<script src=\"javascript/first.js\" defer></script>"
                + Environment.NewLine + "<script src=\"javascript/second.js\" defer></script>"
                + " End",
                resultHtml);
        }
        public void OmitsReloadAttributeIfNoReloadUriSpecified()
        {
            // Arrange
            var htmlTemplate       = "<script type='blazor-boot'></script>";
            var assemblyReferences = new string[] { "System.Abc.dll", "MyApp.ClassLib.dll", };

            // Act
            var fileContents = IndexHtmlWriter.GetIndexHtmlContents(
                htmlTemplate,
                "MyApp.Entrypoint",
                "MyNamespace.MyType::MyMethod",
                assemblyReferences,
                /* js references */ new string[] {},
                /* js references */ new string[] {},
                /* linkerEnabled */ true,
                /* reloadUri */ null);

            // Assert
            var parsedHtml = new HtmlParser().Parse(fileContents);
            var scriptElem = parsedHtml.QuerySelector("script");

            Assert.False(scriptElem.HasAttribute("reload"));
        }