// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; using System.Web.WebPages.Html; using Moq; using Xunit; using Assert = Microsoft.TestCommon.AssertEx; namespace System.Web.WebPages.Test { public class TextAreaExtensionsTest { [Fact] public void TextAreaWithEmptyNameThrows() { // Arrange HtmlHelper helper = HtmlHelperFactory.Create(); // Act and assert Assert.ThrowsArgument(() => helper.TextArea(null), "name", "Value cannot be null or an empty string."); // Act and assert Assert.ThrowsArgument(() => helper.TextArea(String.Empty), "name", "Value cannot be null or an empty string."); } [Fact] public void TextAreaWithDefaultRowsAndCols() { // Arrange HtmlHelper helper = HtmlHelperFactory.Create(); // Act var html = helper.TextArea("foo"); // Assert Assert.Equal(@"", html.ToHtmlString()); } [Fact] public void TextAreaWithZeroRowsAndColumns() { // Arrange HtmlHelper helper = HtmlHelperFactory.Create(); // Act var html = helper.TextArea("foo", null, 0, 0, null); // Assert Assert.Equal(@"", html.ToHtmlString()); } [Fact] public void TextAreaWithNonZeroRowsAndColumns() { // Arrange HtmlHelper helper = HtmlHelperFactory.Create(); // Act var html = helper.TextArea("foo", null, 4, 10, null); // Assert Assert.Equal(@"", html.ToHtmlString()); } [Fact] public void TextAreaWithObjectAttributes() { // Arrange ModelStateDictionary modelState = new ModelStateDictionary(); modelState.SetModelValue("foo", "foo-value"); HtmlHelper helper = HtmlHelperFactory.Create(modelState); // Act var html = helper.TextArea("foo", new { attr = "value", cols = 6 }); // Assert Assert.Equal(@"", html.ToHtmlString()); } [Fact] public void TextAreaWithExplicitValue() { // Arrange ModelStateDictionary modelState = new ModelStateDictionary(); modelState.SetModelValue("foo", "explicit-foo-value"); HtmlHelper helper = HtmlHelperFactory.Create(modelState); // Act var html = helper.TextArea("foo", "explicit-foo-value", new { attr = "attr-value", cols = 6 }); // Assert Assert.Equal(@"", html.ToHtmlString()); } [Fact] public void TextAreaWithDictionaryAttributes() { // Arrange ModelStateDictionary modelState = new ModelStateDictionary(); modelState.SetModelValue("foo", "explicit-foo-value"); HtmlHelper helper = HtmlHelperFactory.Create(modelState); var attributes = new Dictionary() { { "attr", "attr-val" }, { "rows", 15 }, { "cols", 12 } }; // Act var html = helper.TextArea("foo", attributes); // Assert Assert.Equal(@"", html.ToHtmlString()); } [Fact] public void TextAreaWithNoValueAndObjectAttributes() { // Arrange HtmlHelper helper = HtmlHelperFactory.Create(); var attributes = new Dictionary() { { "attr", "attr-val" }, { "rows", 15 }, { "cols", 12 } }; // Act var html = helper.TextArea("foo", attributes); // Assert Assert.Equal(@"", html.ToHtmlString()); } [Fact] public void TextAreaWithNullValue() { // Arrange ModelStateDictionary modelState = new ModelStateDictionary(); modelState.SetModelValue("foo", "explicit-foo-value"); HtmlHelper helper = HtmlHelperFactory.Create(modelState); var attributes = new Dictionary() { { "attr", "attr-val" }, { "rows", 15 }, { "cols", 12 } }; // Act var html = helper.TextArea("foo", null, attributes); // Assert Assert.Equal(@"", html.ToHtmlString()); } [Fact] public void TextAreaWithError() { // Arrange ModelStateDictionary modelState = new ModelStateDictionary(); modelState.AddError("foo", "some error"); HtmlHelper helper = HtmlHelperFactory.Create(modelState); // Act var html = helper.TextArea("foo", String.Empty); // Assert Assert.Equal(@"", html.ToHtmlString()); } [Fact] public void TextAreaWithErrorAndCustomCssClass() { // Arrange ModelStateDictionary modelState = new ModelStateDictionary(); modelState.AddError("foo", "some error"); HtmlHelper helper = HtmlHelperFactory.Create(modelState); // Act var html = helper.TextArea("foo", String.Empty, new { @class = "my-css" }); // Assert Assert.Equal(@"", html.ToHtmlString()); } // [Fact] // Cant test this in multi-threaded public void TextAreaWithCustomErrorClass() { // Arrange ModelStateDictionary modelState = new ModelStateDictionary(); modelState.AddError("foo", "some error"); HtmlHelper.ValidationInputCssClassName = "custom-input-validation-error"; HtmlHelper helper = HtmlHelperFactory.Create(modelState); // Act var html = helper.TextArea("foo", String.Empty, new { @class = "my-css" }); // Assert Assert.Equal(@"", html.ToHtmlString()); } [Fact] public void TextAreaAddsUnobtrusiveValidationAttributes() { // Arrange const string fieldName = "name"; var modelStateDictionary = new ModelStateDictionary(); var validationHelper = new ValidationHelper(new Mock().Object, modelStateDictionary); HtmlHelper helper = HtmlHelperFactory.Create(modelStateDictionary, validationHelper); // Act validationHelper.RequireField(fieldName, "Please specify a valid Name."); validationHelper.Add(fieldName, Validator.StringLength(30, errorMessage: "Name cannot exceed {0} characters")); var html = helper.TextArea(fieldName, htmlAttributes: new Dictionary { { "data-some-val", "5" } }); // Assert Assert.Equal(@"", html.ToString()); } } }