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