// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Web.Mvc; using System.Web.Routing; using Microsoft.Web.UnitTestUtil; using Xunit; using Assert = Microsoft.TestCommon.AssertEx; namespace Microsoft.Web.Mvc.Test { public class ImageExtensionsTest { [Fact] public void ImageWithEmptyRelativeUrlThrowsArgumentNullException() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); Assert.ThrowsArgumentNullOrEmpty(() => html.Image(null), "imageRelativeUrl"); } [Fact] public void ImageStaticWithEmptyRelativeUrlThrowsArgumentNullException() { Assert.ThrowsArgumentNullOrEmpty(() => ImageExtensions.Image((string)null, "alt", null), "imageUrl"); } [Fact] public void ImageWithRelativeUrlRendersProperImageTag() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg"); // NOTE: Although XHTML requires an alt tag, we don't construct one for you. Specify it yourself. Assert.Equal("", imageResult.ToHtmlString()); } [Fact] public void ImageWithWithAttributesWithUnderscores() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg", new { foo_bar = "baz" }); Assert.Equal("", imageResult.ToHtmlString()); } [Fact] public void ImageWithAltValueRendersImageWithAltTag() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg", "this is an alt value"); Assert.Equal("\"this", imageResult.ToHtmlString()); } [Fact] public void ImageWithAltValueInObjectDictionaryRendersImageWithAltAndTitleTag() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg", new { alt = "this is an alt value" }); Assert.Equal("\"this", imageResult.ToHtmlString()); } [Fact] public void ImageWithAltValueHtmlAttributeEncodesAltTag() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg", @"<"">"); Assert.Equal("\"<"\" src=\"/system/web/mvc.jpg\" title=\"<">\" />", imageResult.ToHtmlString()); } [Fact] public void ImageWithAltValueInObjectDictionaryHtmlAttributeEncodesAltTag() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg", new { alt = "this is an alt value" }); Assert.Equal("\"this", imageResult.ToHtmlString()); } [Fact] public void ImageWithAltSpecifiedAndInDictionaryRendersExplicit() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg", "specified-alt", new { alt = "object-dictionary-alt" }); Assert.Equal("\"object-dictionary-alt\"", imageResult.ToHtmlString()); } [Fact] public void ImageWithAltAndAttributesWithUnderscores() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg", "specified-alt", new { foo_bar = "baz" }); Assert.Equal("\"specified-alt\"", imageResult.ToHtmlString()); } [Fact] public void ImageWithSrcSpecifiedAndInDictionaryRendersExplicit() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg", new { src = "explicit.jpg" }); Assert.Equal("", imageResult.ToHtmlString()); } [Fact] public void ImageWithOtherAttributesRendersThoseAttributesCaseSensitively() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg", new { width = 100, Height = 200 }); Assert.Equal("", imageResult.ToHtmlString()); } [Fact] public void ImageWithUrlAndDictionaryRendersAttributes() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary()); var attributes = new RouteValueDictionary(new { width = 125 }); MvcHtmlString imageResult = html.Image("/system/web/mvc.jpg", attributes); Assert.Equal("", imageResult.ToHtmlString()); } [Fact] public void ImageWithTildePathAndAppPathResolvesCorrectly() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary(), "/app"); MvcHtmlString imageResult = html.Image("~/system/web/mvc.jpg"); Assert.Equal("", imageResult.ToHtmlString()); } [Fact] public void ImageWithTildePathWithoutAppPathResolvesCorrectly() { HtmlHelper html = MvcHelper.GetHtmlHelperWithPath(new ViewDataDictionary(), "/"); MvcHtmlString imageResult = html.Image("~/system/web/mvc.jpg"); Assert.Equal("", imageResult.ToHtmlString()); } } }