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); }
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); }
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); }
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); }
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); }
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); }
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); }
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()); }
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); }
public void RenderScriptTags_FallbackSrc_WithFileVersion_EncodesAsExpected() { // Arrange var expectedContent = "<script encoded=\"contains "quotes"\" literal=\"HtmlEncode[[all HTML encoded]]\" " + "mixed=\"HtmlEncode[[HTML encoded]] and contains "quotes"\" " + "src=\"HtmlEncode[[/js/site.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk]]\"></script>" + Environment.NewLine + "<script>(isavailable()||document.write(\"<script " + "JavaScriptEncode[[encoded]]=\\\"JavaScriptEncode[[contains "quotes"]]\\\" " + "JavaScriptEncode[[literal]]=\\\"JavaScriptEncode[[HtmlEncode[[all HTML encoded]]]]\\\" " + "JavaScriptEncode[[mixed]]=\\\"JavaScriptEncode[[HtmlEncode[[HTML encoded]] and contains "quotes"]]\\\" " + "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); }
public void RendersScriptTagsForGlobbedSrcResults_EncodesAsExpected() { // Arrange var expectedContent = "<script encoded=\"contains "quotes"\" literal=\"HtmlEncode[[all HTML encoded]]\" " + "mixed=\"HtmlEncode[[HTML encoded]] and contains "quotes"\" " + "src=\"HtmlEncode[[/js/site.js]]\"></script>" + "<script encoded=\"contains "quotes"\" literal=\"HtmlEncode[[all HTML encoded]]\" " + "mixed=\"HtmlEncode[[HTML encoded]] and contains "quotes"\" " + "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); }