// 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 RadioButtonTest
{
[Fact]
public void RadioButtonWithEmptyNameThrows()
{
// Arrange
HtmlHelper helper = HtmlHelperFactory.Create();
// Act and assert
Assert.ThrowsArgumentNullOrEmptyString(() => helper.RadioButton(null, null), "name");
Assert.ThrowsArgumentNullOrEmptyString(() => helper.RadioButton(String.Empty, null), "name");
}
[Fact]
public void RadioButtonWithDefaultArguments()
{
// Arrange
HtmlHelper helper = HtmlHelperFactory.Create();
// Act
var html = helper.RadioButton("foo", "bar", true);
// Assert
Assert.Equal(@"",
html.ToHtmlString());
html = helper.RadioButton("foo", "bar", false);
// Assert
Assert.Equal(@"",
html.ToHtmlString());
}
[Fact]
public void RadioButtonWithObjectAttributes()
{
// Arrange
HtmlHelper helper = HtmlHelperFactory.Create();
// Act
var html = helper.RadioButton("foo", "bar", new { attr = "attr-value" });
// Assert
Assert.Equal(@"",
html.ToHtmlString());
}
[Fact]
public void RadioButtonWithDictionaryAttributes()
{
// Arrange
HtmlHelper helper = HtmlHelperFactory.Create();
// Act
var html = helper.RadioButton("foo", "bar", new Dictionary { { "attr", "attr-value" } });
// Assert
Assert.Equal(@"",
html.ToHtmlString());
}
[Fact]
public void RadioButtonUsesModelStateToAssignChecked()
{
// Arrange
var modelState = new ModelStateDictionary();
modelState.SetModelValue("foo", "bar");
HtmlHelper helper = HtmlHelperFactory.Create(modelState);
// Act
var html = helper.RadioButton("foo", "bar");
// Assert
Assert.Equal(@"",
html.ToHtmlString());
}
[Fact]
public void RadioButtonUsesModelStateToRemoveChecked()
{
// Arrange
var modelState = new ModelStateDictionary();
modelState.SetModelValue("foo", "not-a-bar");
HtmlHelper helper = HtmlHelperFactory.Create(modelState);
// Act
var html = helper.RadioButton("foo", "bar", new { @checked = "checked" });
// Assert
Assert.Equal(@"",
html.ToHtmlString());
}
[Fact]
public void RadioButtonWithoutModelStateDoesNotAffectChecked()
{
// Arrange
HtmlHelper helper = HtmlHelperFactory.Create();
// Act
var html = helper.RadioButton("foo", "bar", new { @checked = "checked" });
// Assert
Assert.Equal(@"",
html.ToHtmlString());
}
[Fact]
public void RadioButtonWithNonStringModelValue()
{
// Arrange
var modelState = new ModelStateDictionary();
modelState.SetModelValue("foo", new List());
HtmlHelper helper = HtmlHelperFactory.Create(modelState);
// Act
var html = helper.RadioButton("foo", "bar");
// Assert
Assert.Equal(@"",
html.ToHtmlString());
}
[Fact]
public void RadioButtonWithNonStringValue()
{
// Arrange
var modelState = new ModelStateDictionary();
modelState.SetModelValue("foo", "bar");
HtmlHelper helper = HtmlHelperFactory.Create(modelState);
// Act
var html = helper.RadioButton("foo", 2.53);
// Assert
Assert.Equal(@"",
html.ToHtmlString());
}
[Fact]
public void RadioButtonWithExplicitChecked()
{
// Arrange
var modelState = new ModelStateDictionary();
modelState.SetModelValue("foo", "bar");
HtmlHelper helper = HtmlHelperFactory.Create(modelState);
// Act
var html = helper.RadioButton("foo", "not-bar", true);
// Assert
Assert.Equal(@"",
html.ToHtmlString());
}
[Fact]
public void RadioButtonOverwritesImplicitAttributes()
{
// Arrange
HtmlHelper helper = HtmlHelperFactory.Create();
// Act
var html = helper.RadioButton("foo", "foo-value", new { value = "bazValue", type = "fooType", name = "bar" });
// Assert
Assert.Equal(@"",
html.ToHtmlString());
}
[Fact]
public void RadioButtonAddsUnobtrusiveValidationAttributes()
{
// 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.RadioButton(fieldName, value: 8, htmlAttributes: new Dictionary { { "data-some-val", "5" } });
// Assert
Assert.Equal(@"",
html.ToString());
}
}
}