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