// 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("", 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("", 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("", 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("", 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("", 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());
}
}
}