Exemplo n.º 1
0
        public void RenderScriptTags_WithFileVersion_AndRequestPathBase()
        {
            // Arrange
            var context = MakeTagHelperContext(
                attributes: new TagHelperAttributeList
            {
                new TagHelperAttribute("src", "/bar/js/site.js"),
                new TagHelperAttribute("asp-append-version", "true")
            });
            var output             = MakeTagHelperOutput("script", attributes: new TagHelperAttributeList());
            var hostingEnvironment = MakeHostingEnvironment();
            var viewContext        = MakeViewContext("/bar");

            var helper = new ScriptTagHelper(
                MakeHostingEnvironment(),
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                MakeUrlHelperFactory())
            {
                ViewContext   = viewContext,
                AppendVersion = true,
                Src           = "/bar/js/site.js",
            };

            // Act
            helper.Process(context, output);

            // Assert
            Assert.Equal("script", output.TagName);
            Assert.Equal("/bar/js/site.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk", output.Attributes["src"].Value);
        }
Exemplo n.º 2
0
        public void DoesNotRunWhenAllRequiredAttributesAreMissing()
        {
            // Arrange
            var tagHelperContext = MakeTagHelperContext();
            var viewContext      = MakeViewContext();
            var output           = MakeTagHelperOutput("script");

            var helper = new ScriptTagHelper(
                MakeHostingEnvironment(),
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                MakeUrlHelperFactory())
            {
                ViewContext = viewContext,
            };

            // Act
            helper.Process(tagHelperContext, output);

            // Assert
            Assert.Equal("script", output.TagName);
            Assert.False(output.IsContentModified);
            Assert.Empty(output.Attributes);
            Assert.True(output.PostElement.GetContent().Length == 0);
        }
Exemplo n.º 3
0
        public void DoesNotRunWhenARequiredAttributeIsMissing(
            TagHelperAttributeList attributes,
            Action <ScriptTagHelper> setProperties)
        {
            // Arrange
            var tagHelperContext   = MakeTagHelperContext(attributes);
            var output             = MakeTagHelperOutput("script");
            var logger             = new Mock <ILogger <ScriptTagHelper> >();
            var hostingEnvironment = MakeHostingEnvironment();
            var viewContext        = MakeViewContext();

            var helper = new ScriptTagHelper(
                hostingEnvironment,
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                MakeUrlHelperFactory())
            {
                ViewContext = viewContext,
            };

            setProperties(helper);

            // Act
            helper.Process(tagHelperContext, output);

            // Assert
            Assert.NotNull(output.TagName);
            Assert.False(output.IsContentModified);
            Assert.Empty(output.Attributes);
            Assert.True(output.PostElement.GetContent().Length == 0);
        }
Exemplo n.º 4
0
        public void Process_SrcDefaultsToTagHelperOutputSrcAttributeAddedByOtherTagHelper(
            string src,
            string srcOutput,
            string expectedSrcPrefix)
        {
            // Arrange
            var allAttributes = new TagHelperAttributeList(
                new TagHelperAttributeList
            {
                { "type", new HtmlString("text/javascript") },
                { "asp-append-version", true },
            });
            var context          = MakeTagHelperContext(allAttributes);
            var outputAttributes = new TagHelperAttributeList
            {
                { "type", new HtmlString("text/javascript") },
                { "src", srcOutput },
            };
            var output             = MakeTagHelperOutput("script", outputAttributes);
            var hostingEnvironment = MakeHostingEnvironment();
            var viewContext        = MakeViewContext();
            var urlHelper          = new Mock <IUrlHelper>();

            // Ensure expanded path does not look like an absolute path on Linux, avoiding
            // https://github.com/aspnet/External/issues/21
            urlHelper
            .Setup(urlhelper => urlhelper.Content(It.IsAny <string>()))
            .Returns(new Func <string, string>(url => url.Replace("~/", "virtualRoot/")));
            var urlHelperFactory = new Mock <IUrlHelperFactory>();

            urlHelperFactory
            .Setup(f => f.GetUrlHelper(It.IsAny <ActionContext>()))
            .Returns(urlHelper.Object);

            var helper = new ScriptTagHelper(
                hostingEnvironment,
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                urlHelperFactory.Object)
            {
                ViewContext   = viewContext,
                AppendVersion = true,
                Src           = src,
            };

            // Act
            helper.Process(context, output);

            // Assert
            Assert.Equal(
                expectedSrcPrefix + "?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk",
                (string)output.Attributes["src"].Value,
                StringComparer.Ordinal);
        }
Exemplo n.º 5
0
        public void RenderScriptTags_GlobbedSrc_WithFileVersion()
        {
            // Arrange
            var expectedContent = "<script " +
                                  "src=\"HtmlEncode[[/js/site.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk]]\"></script>" +
                                  "<script src=\"HtmlEncode[[/common.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk]]\"></script>";
            var context = MakeTagHelperContext(
                attributes: new TagHelperAttributeList
            {
                new TagHelperAttribute("src", "/js/site.js"),
                new TagHelperAttribute("asp-src-include", "*.js"),
                new TagHelperAttribute("asp-append-version", "true")
            });
            var output             = MakeTagHelperOutput("script", attributes: new TagHelperAttributeList());
            var hostingEnvironment = MakeHostingEnvironment();
            var viewContext        = MakeViewContext();
            var globbingUrlBuilder = new Mock <GlobbingUrlBuilder>(
                new TestFileProvider(),
                Mock.Of <IMemoryCache>(),
                PathString.Empty);

            globbingUrlBuilder.Setup(g => g.BuildUrlList(null, "*.js", null))
            .Returns(new[] { "/common.js" });

            var helper = new ScriptTagHelper(
                MakeHostingEnvironment(),
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                MakeUrlHelperFactory())
            {
                GlobbingUrlBuilder = globbingUrlBuilder.Object,
                ViewContext        = viewContext,
                SrcInclude         = "*.js",
                AppendVersion      = true,
                Src = "/js/site.js",
            };

            // Act
            helper.Process(context, output);

            // Assert
            Assert.Equal("script", output.TagName);
            Assert.Equal("/js/site.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk", output.Attributes["src"].Value);
            var content = HtmlContentUtilities.HtmlContentToString(output, new HtmlTestEncoder());

            Assert.Equal(expectedContent, content);
        }
Exemplo n.º 6
0
        public void HandlesMultipleAttributesSameNameCorrectly(TagHelperAttributeList outputAttributes)
        {
            // Arrange
            var allAttributes = new TagHelperAttributeList(
                outputAttributes.Concat(
                    new TagHelperAttributeList
            {
                new TagHelperAttribute("data-extra", "something"),
                new TagHelperAttribute("src", "/blank.js"),
                new TagHelperAttribute("asp-fallback-src", "http://www.example.com/blank.js"),
                new TagHelperAttribute("asp-fallback-test", "isavailable()"),
            }));
            var tagHelperContext         = MakeTagHelperContext(allAttributes);
            var viewContext              = MakeViewContext();
            var combinedOutputAttributes = new TagHelperAttributeList(
                outputAttributes.Concat(
                    new[]
            {
                new TagHelperAttribute("data-extra", new HtmlString("something"))
            }));
            var output             = MakeTagHelperOutput("script", combinedOutputAttributes);
            var hostingEnvironment = MakeHostingEnvironment();

            var helper = new ScriptTagHelper(
                hostingEnvironment,
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                MakeUrlHelperFactory())
            {
                ViewContext            = viewContext,
                FallbackSrc            = "~/blank.js",
                FallbackTestExpression = "http://www.example.com/blank.js",
                Src = "/blank.js",
            };
            var expectedAttributes = new TagHelperAttributeList(output.Attributes);

            expectedAttributes.Add(new TagHelperAttribute("src", "/blank.js"));

            // Act
            helper.Process(tagHelperContext, output);

            // Assert
            Assert.Equal(expectedAttributes, output.Attributes);
        }
Exemplo n.º 7
0
        public void PreservesOrderOfNonSrcAttributes()
        {
            // Arrange
            var tagHelperContext = MakeTagHelperContext(
                attributes: new TagHelperAttributeList
            {
                new TagHelperAttribute("data-extra", "something"),
                new TagHelperAttribute("src", "/blank.js"),
                new TagHelperAttribute("data-more", "else"),
                new TagHelperAttribute("asp-fallback-src", "http://www.example.com/blank.js"),
                new TagHelperAttribute("asp-fallback-test", "isavailable()"),
            });

            var viewContext = MakeViewContext();

            var output = MakeTagHelperOutput("src",
                                             attributes: new TagHelperAttributeList
            {
                new TagHelperAttribute("data-extra", "something"),
                new TagHelperAttribute("data-more", "else"),
            });

            var hostingEnvironment = MakeHostingEnvironment();

            var helper = new ScriptTagHelper(
                hostingEnvironment,
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                MakeUrlHelperFactory())
            {
                ViewContext            = viewContext,
                FallbackSrc            = "~/blank.js",
                FallbackTestExpression = "http://www.example.com/blank.js",
                Src = "/blank.js",
            };

            // Act
            helper.Process(tagHelperContext, output);

            // Assert
            Assert.Equal("data-extra", output.Attributes[0].Name);
            Assert.Equal("src", output.Attributes[1].Name);
            Assert.Equal("data-more", output.Attributes[2].Name);
        }
Exemplo n.º 8
0
        public void RenderScriptTags_FallbackSrc_WithFileVersion()
        {
            // Arrange
            var context = MakeTagHelperContext(
                attributes: new TagHelperAttributeList
            {
                new TagHelperAttribute("src", "/js/site.js"),
                new TagHelperAttribute("asp-fallback-src-include", "fallback.js"),
                new TagHelperAttribute("asp-fallback-test", "isavailable()"),
                new TagHelperAttribute("asp-append-version", "true")
            });
            var output             = MakeTagHelperOutput("script", attributes: new TagHelperAttributeList());
            var hostingEnvironment = MakeHostingEnvironment();
            var viewContext        = MakeViewContext();

            var helper = new ScriptTagHelper(
                MakeHostingEnvironment(),
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                MakeUrlHelperFactory())
            {
                ViewContext            = viewContext,
                FallbackSrc            = "fallback.js",
                FallbackTestExpression = "isavailable()",
                AppendVersion          = true,
                Src = "/js/site.js",
            };

            // Act
            helper.Process(context, output);

            // Assert
            Assert.Equal("script", output.TagName);
            Assert.Equal("/js/site.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk", output.Attributes["src"].Value);
            Assert.Equal(Environment.NewLine + "<script>(isavailable()||document.write(\"<script src=" +
                         "\\\"JavaScriptEncode[[HtmlEncode[[fallback.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk]]]]\\\"" +
                         "><\\/script>\"));</script>", output.PostElement.GetContent());
        }
Exemplo n.º 9
0
        public void RunsWhenRequiredAttributesArePresent_NoSrc(
            TagHelperAttributeList attributes,
            Action <ScriptTagHelper> setProperties)
        {
            // Arrange
            var context            = MakeTagHelperContext(attributes);
            var output             = MakeTagHelperOutput("script");
            var hostingEnvironment = MakeHostingEnvironment();
            var viewContext        = MakeViewContext();
            var globbingUrlBuilder = new Mock <GlobbingUrlBuilder>(
                new TestFileProvider(),
                Mock.Of <IMemoryCache>(),
                PathString.Empty);

            globbingUrlBuilder.Setup(g => g.BuildUrlList(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .Returns(new[] { "/common.js" });

            var helper = new ScriptTagHelper(
                hostingEnvironment,
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                MakeUrlHelperFactory())
            {
                ViewContext        = viewContext,
                GlobbingUrlBuilder = globbingUrlBuilder.Object
            };

            setProperties(helper);

            // Act
            helper.Process(context, output);

            // Assert
            Assert.Null(output.TagName);
            Assert.True(output.IsContentModified);
            Assert.True(output.Content.GetContent().Length == 0);
            Assert.True(output.PostElement.IsModified);
        }
Exemplo n.º 10
0
        public void RenderScriptTags_FallbackSrc_WithFileVersion_EncodesAsExpected()
        {
            // Arrange
            var expectedContent =
                "<script encoded=\"contains &quot;quotes&quot;\" literal=\"HtmlEncode[[all HTML encoded]]\" " +
                "mixed=\"HtmlEncode[[HTML encoded]] and contains &quot;quotes&quot;\" " +
                "src=\"HtmlEncode[[/js/site.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk]]\"></script>" +
                Environment.NewLine +
                "<script>(isavailable()||document.write(\"<script " +
                "JavaScriptEncode[[encoded]]=\\\"JavaScriptEncode[[contains &quot;quotes&quot;]]\\\" " +
                "JavaScriptEncode[[literal]]=\\\"JavaScriptEncode[[HtmlEncode[[all HTML encoded]]]]\\\" " +
                "JavaScriptEncode[[mixed]]=\\\"JavaScriptEncode[[HtmlEncode[[HTML encoded]] and contains &quot;quotes&quot;]]\\\" " +
                "src=\\\"JavaScriptEncode[[HtmlEncode[[fallback.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk]]]]\\\">" +
                "<\\/script>\"));</script>";
            var mixed = new DefaultTagHelperContent();

            mixed.Append("HTML encoded");
            mixed.AppendHtml(" and contains \"quotes\"");
            var context = MakeTagHelperContext(
                attributes: new TagHelperAttributeList
            {
                { "asp-append-version", "true" },
                { "asp-fallback-src-include", "fallback.js" },
                { "asp-fallback-test", "isavailable()" },
                { "encoded", new HtmlString("contains \"quotes\"") },
                { "literal", "all HTML encoded" },
                { "mixed", mixed },
                { "src", "/js/site.js" },
            });
            var output = MakeTagHelperOutput(
                "script",
                attributes: new TagHelperAttributeList
            {
                { "encoded", new HtmlString("contains \"quotes\"") },
                { "literal", "all HTML encoded" },
                { "mixed", mixed },
            });
            var hostingEnvironment = MakeHostingEnvironment();
            var viewContext        = MakeViewContext();

            var helper = new ScriptTagHelper(
                MakeHostingEnvironment(),
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                MakeUrlHelperFactory())
            {
                AppendVersion          = true,
                FallbackSrc            = "fallback.js",
                FallbackTestExpression = "isavailable()",
                Src         = "/js/site.js",
                ViewContext = viewContext,
            };

            // Act
            helper.Process(context, output);

            // Assert
            Assert.Equal("script", output.TagName);
            Assert.Equal("/js/site.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk", output.Attributes["src"].Value);
            var content = HtmlContentUtilities.HtmlContentToString(output, new HtmlTestEncoder());

            Assert.Equal(expectedContent, content);
        }
Exemplo n.º 11
0
        public void RendersScriptTagsForGlobbedSrcResults_EncodesAsExpected()
        {
            // Arrange
            var expectedContent =
                "<script encoded=\"contains &quot;quotes&quot;\" literal=\"HtmlEncode[[all HTML encoded]]\" " +
                "mixed=\"HtmlEncode[[HTML encoded]] and contains &quot;quotes&quot;\" " +
                "src=\"HtmlEncode[[/js/site.js]]\"></script>" +
                "<script encoded=\"contains &quot;quotes&quot;\" literal=\"HtmlEncode[[all HTML encoded]]\" " +
                "mixed=\"HtmlEncode[[HTML encoded]] and contains &quot;quotes&quot;\" " +
                "src=\"HtmlEncode[[/common.js]]\"></script>";
            var mixed = new DefaultTagHelperContent();

            mixed.Append("HTML encoded");
            mixed.AppendHtml(" and contains \"quotes\"");
            var context = MakeTagHelperContext(
                attributes: new TagHelperAttributeList
            {
                { "asp-src-include", "**/*.js" },
                { "encoded", new HtmlString("contains \"quotes\"") },
                { "literal", "all HTML encoded" },
                { "mixed", mixed },
                { "src", "/js/site.js" },
            });
            var output = MakeTagHelperOutput(
                "script",
                attributes: new TagHelperAttributeList
            {
                { "encoded", new HtmlString("contains \"quotes\"") },
                { "literal", "all HTML encoded" },
                { "mixed", mixed },
            });
            var hostingEnvironment = MakeHostingEnvironment();
            var viewContext        = MakeViewContext();
            var globbingUrlBuilder = new Mock <GlobbingUrlBuilder>(
                new TestFileProvider(),
                Mock.Of <IMemoryCache>(),
                PathString.Empty);

            globbingUrlBuilder.Setup(g => g.BuildUrlList(null, "**/*.js", null))
            .Returns(new[] { "/common.js" });

            var helper = new ScriptTagHelper(
                hostingEnvironment,
                MakeCache(),
                new HtmlTestEncoder(),
                new JavaScriptTestEncoder(),
                MakeUrlHelperFactory())
            {
                GlobbingUrlBuilder = globbingUrlBuilder.Object,
                Src         = "/js/site.js",
                SrcInclude  = "**/*.js",
                ViewContext = viewContext,
            };

            // Act
            helper.Process(context, output);

            // Assert
            Assert.Equal("script", output.TagName);
            Assert.Equal("/js/site.js", output.Attributes["src"].Value);
            var content = HtmlContentUtilities.HtmlContentToString(output, new HtmlTestEncoder());

            Assert.Equal(expectedContent, content);
        }