PageRenderTime 70ms CodeModel.GetById 0ms RepoModel.GetById 1ms app.codeStats 1ms

/test/System.Web.Mvc.Test/Html/Test/InputExtensionsTest.cs

https://bitbucket.org/mdavid/aspnetwebstack
C# | 1303 lines | 784 code | 253 blank | 266 comment | 0 complexity | d7bfdd0d6e55a161f673ca228ee2d29d MD5 | raw file
  1. using System.ComponentModel.DataAnnotations;
  2. using System.Data.Linq;
  3. using System.Web.Mvc.Test;
  4. using System.Web.Routing;
  5. using Microsoft.Web.UnitTestUtil;
  6. using Xunit;
  7. using Assert = Microsoft.TestCommon.AssertEx;
  8. namespace System.Web.Mvc.Html.Test
  9. {
  10. public class InputExtensionsTest
  11. {
  12. // CheckBox
  13. [Fact]
  14. public void CheckBoxDictionaryOverridesImplicitParameters()
  15. {
  16. // Arrange
  17. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  18. // Act
  19. MvcHtmlString html = helper.CheckBox("baz", new { @checked = "checked", value = "false" });
  20. // Assert
  21. Assert.Equal(@"<input checked=""checked"" id=""baz"" name=""baz"" type=""checkbox"" value=""false"" />" +
  22. @"<input name=""baz"" type=""hidden"" value=""false"" />",
  23. html.ToHtmlString());
  24. }
  25. [Fact]
  26. public void CheckBoxExplicitParametersOverrideDictionary()
  27. {
  28. // Arrange
  29. HtmlHelper helper = MvcHelper.GetHtmlHelper();
  30. // Act
  31. MvcHtmlString html = helper.CheckBox("foo", true /* isChecked */, new { @checked = "unchecked", value = "false" });
  32. // Assert
  33. Assert.Equal(@"<input checked=""checked"" id=""foo"" name=""foo"" type=""checkbox"" value=""false"" />" +
  34. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  35. html.ToHtmlString());
  36. }
  37. [Fact]
  38. public void CheckBoxShouldNotCopyAttributesForHidden()
  39. {
  40. // Arrange
  41. HtmlHelper helper = MvcHelper.GetHtmlHelper();
  42. // Act
  43. MvcHtmlString html = helper.CheckBox("foo", true /* isChecked */, new { id = "myID" });
  44. // Assert
  45. Assert.Equal(@"<input checked=""checked"" id=""myID"" name=""foo"" type=""checkbox"" value=""true"" />" +
  46. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  47. html.ToHtmlString());
  48. }
  49. [Fact]
  50. public void CheckBoxWithEmptyNameThrows()
  51. {
  52. // Arrange
  53. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  54. // Act & Assert
  55. Assert.ThrowsArgumentNullOrEmpty(
  56. delegate { helper.CheckBox(String.Empty); },
  57. "name");
  58. }
  59. [Fact]
  60. public void CheckBoxWithInvalidBooleanThrows()
  61. {
  62. // Arrange
  63. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  64. // Act & Assert
  65. Assert.Throws<FormatException>(
  66. delegate { helper.CheckBox("bar"); },
  67. "String was not recognized as a valid Boolean.");
  68. }
  69. [Fact]
  70. public void CheckBoxCheckedWithOnlyName()
  71. {
  72. // Arrange
  73. HtmlHelper helper = MvcHelper.GetHtmlHelper();
  74. // Act
  75. MvcHtmlString html = helper.CheckBox("foo", true /* isChecked */);
  76. // Assert
  77. Assert.Equal(@"<input checked=""checked"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  78. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  79. html.ToHtmlString());
  80. }
  81. [Fact]
  82. public void CheckBoxShouldRespectModelStateAttemptedValue()
  83. {
  84. // Arrange
  85. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  86. helper.ViewData.ModelState.SetModelValue("foo", HtmlHelperTest.GetValueProviderResult("false", "false"));
  87. // Act
  88. MvcHtmlString html = helper.CheckBox("foo");
  89. // Assert
  90. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  91. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  92. html.ToHtmlString());
  93. }
  94. [Fact]
  95. public void CheckBoxWithOnlyName()
  96. {
  97. // Arrange
  98. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  99. // Act
  100. MvcHtmlString html = helper.CheckBox("foo");
  101. // Assert
  102. Assert.Equal(@"<input checked=""checked"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  103. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  104. html.ToHtmlString());
  105. }
  106. [Fact]
  107. public void CheckBoxWithOnlyName_Unobtrusive()
  108. {
  109. // Arrange
  110. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  111. helper.ViewContext.ClientValidationEnabled = true;
  112. helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
  113. helper.ViewContext.FormContext = new FormContext();
  114. helper.ClientValidationRuleFactory = (name, metadata) => new[] { new ModelClientValidationRule { ValidationType = "type", ErrorMessage = "error" } };
  115. // Act
  116. MvcHtmlString html = helper.CheckBox("foo");
  117. // Assert
  118. Assert.Equal(@"<input checked=""checked"" data-val=""true"" data-val-type=""error"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  119. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  120. html.ToHtmlString());
  121. }
  122. [Fact]
  123. public void CheckBoxWithNameAndObjectAttribute()
  124. {
  125. // Arrange
  126. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  127. // Act
  128. MvcHtmlString html = helper.CheckBox("foo", _attributesObjectDictionary);
  129. // Assert
  130. Assert.Equal(@"<input baz=""BazObjValue"" checked=""checked"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  131. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  132. html.ToHtmlString());
  133. }
  134. [Fact]
  135. public void CheckBoxWithNameAndObjectAttributeWithUnderscores()
  136. {
  137. // Arrange
  138. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  139. // Act
  140. MvcHtmlString html = helper.CheckBox("foo", _attributesObjectUnderscoresDictionary);
  141. // Assert
  142. Assert.Equal(@"<input checked=""checked"" foo-baz=""BazObjValue"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  143. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  144. html.ToHtmlString());
  145. }
  146. [Fact]
  147. public void CheckBoxWithObjectAttribute()
  148. {
  149. // Arrange
  150. HtmlHelper helper = MvcHelper.GetHtmlHelper();
  151. // Act
  152. MvcHtmlString html = helper.CheckBox("foo", false /* isChecked */, _attributesObjectDictionary);
  153. // Assert
  154. Assert.Equal(@"<input baz=""BazObjValue"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  155. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  156. html.ToHtmlString());
  157. }
  158. [Fact]
  159. public void CheckBoxWithObjectAttributeWithUnderscores()
  160. {
  161. // Arrange
  162. HtmlHelper helper = MvcHelper.GetHtmlHelper();
  163. // Act
  164. MvcHtmlString html = helper.CheckBox("foo", false /* isChecked */, _attributesObjectUnderscoresDictionary);
  165. // Assert
  166. Assert.Equal(@"<input foo-baz=""BazObjValue"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  167. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  168. html.ToHtmlString());
  169. }
  170. [Fact]
  171. public void CheckBoxWithAttributeDictionary()
  172. {
  173. // Arrange
  174. HtmlHelper helper = MvcHelper.GetHtmlHelper();
  175. // Act
  176. MvcHtmlString html = helper.CheckBox("foo", false /* isChecked */, _attributesDictionary);
  177. // Assert
  178. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  179. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  180. html.ToHtmlString());
  181. }
  182. [Fact]
  183. public void CheckBoxWithPrefix()
  184. {
  185. // Arrange
  186. HtmlHelper helper = MvcHelper.GetHtmlHelper();
  187. helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
  188. // Act
  189. MvcHtmlString html = helper.CheckBox("foo", false /* isChecked */, _attributesDictionary);
  190. // Assert
  191. Assert.Equal(@"<input baz=""BazValue"" id=""MyPrefix_foo"" name=""MyPrefix.foo"" type=""checkbox"" value=""true"" />" +
  192. @"<input name=""MyPrefix.foo"" type=""hidden"" value=""false"" />",
  193. html.ToHtmlString());
  194. }
  195. [Fact]
  196. public void CheckBoxWithPrefixAndEmptyName()
  197. {
  198. // Arrange
  199. HtmlHelper helper = MvcHelper.GetHtmlHelper();
  200. helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
  201. // Act
  202. MvcHtmlString html = helper.CheckBox("", false /* isChecked */, _attributesDictionary);
  203. // Assert
  204. Assert.Equal(@"<input baz=""BazValue"" id=""MyPrefix"" name=""MyPrefix"" type=""checkbox"" value=""true"" />" +
  205. @"<input name=""MyPrefix"" type=""hidden"" value=""false"" />",
  206. html.ToHtmlString());
  207. }
  208. // CheckBoxFor
  209. [Fact]
  210. public void CheckBoxForWitNullExpressionThrows()
  211. {
  212. // Arrange
  213. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  214. // Act & Assert
  215. Assert.ThrowsArgumentNull(
  216. () => helper.CheckBoxFor(null),
  217. "expression");
  218. }
  219. [Fact]
  220. public void CheckBoxForWithInvalidBooleanThrows()
  221. {
  222. // Arrange
  223. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  224. // Act & Assert
  225. Assert.Throws<FormatException>(
  226. () => helper.CheckBoxFor(m => m.bar), // "bar" in ViewData isn't a valid boolean
  227. "String was not recognized as a valid Boolean.");
  228. }
  229. [Fact]
  230. public void CheckBoxForDictionaryOverridesImplicitParameters()
  231. {
  232. // Arrange
  233. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  234. // Act
  235. MvcHtmlString html = helper.CheckBoxFor(m => m.baz, new { @checked = "checked", value = "false" });
  236. // Assert
  237. Assert.Equal(@"<input checked=""checked"" id=""baz"" name=""baz"" type=""checkbox"" value=""false"" />" +
  238. @"<input name=""baz"" type=""hidden"" value=""false"" />",
  239. html.ToHtmlString());
  240. }
  241. [Fact]
  242. public void CheckBoxForShouldNotCopyAttributesForHidden()
  243. {
  244. // Arrange
  245. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  246. // Act
  247. MvcHtmlString html = helper.CheckBoxFor(m => m.foo, new { id = "myID" });
  248. // Assert
  249. Assert.Equal(@"<input checked=""checked"" id=""myID"" name=""foo"" type=""checkbox"" value=""true"" />" +
  250. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  251. html.ToHtmlString());
  252. }
  253. [Fact]
  254. public void CheckBoxForCheckedWithOnlyName()
  255. {
  256. // Arrange
  257. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  258. // Act
  259. MvcHtmlString html = helper.CheckBoxFor(m => m.foo);
  260. // Assert
  261. Assert.Equal(@"<input checked=""checked"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  262. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  263. html.ToHtmlString());
  264. }
  265. [Fact]
  266. public void CheckBoxForCheckedWithOnlyName_Unobtrusive()
  267. {
  268. // Arrange
  269. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  270. helper.ViewContext.ClientValidationEnabled = true;
  271. helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
  272. helper.ViewContext.FormContext = new FormContext();
  273. helper.ClientValidationRuleFactory = (name, metadata) => new[] { new ModelClientValidationRule { ValidationType = "type", ErrorMessage = "error" } };
  274. // Act
  275. MvcHtmlString html = helper.CheckBoxFor(m => m.foo);
  276. // Assert
  277. Assert.Equal(@"<input checked=""checked"" data-val=""true"" data-val-type=""error"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  278. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  279. html.ToHtmlString());
  280. }
  281. [Fact]
  282. public void CheckBoxForShouldRespectModelStateAttemptedValue()
  283. {
  284. // Arrange
  285. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  286. helper.ViewContext.ViewData.ModelState.SetModelValue("foo", HtmlHelperTest.GetValueProviderResult("false", "false"));
  287. // Act
  288. MvcHtmlString html = helper.CheckBoxFor(m => m.foo);
  289. // Assert
  290. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  291. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  292. html.ToHtmlString());
  293. }
  294. [Fact]
  295. public void CheckBoxForWithObjectAttribute()
  296. {
  297. // Arrange
  298. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  299. // Act
  300. MvcHtmlString html = helper.CheckBoxFor(m => m.foo, _attributesObjectDictionary);
  301. // Assert
  302. Assert.Equal(@"<input baz=""BazObjValue"" checked=""checked"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  303. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  304. html.ToHtmlString());
  305. }
  306. [Fact]
  307. public void CheckBoxForWithObjectAttributeWithUnderscores()
  308. {
  309. // Arrange
  310. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  311. // Act
  312. MvcHtmlString html = helper.CheckBoxFor(m => m.foo, _attributesObjectUnderscoresDictionary);
  313. // Assert
  314. Assert.Equal(@"<input checked=""checked"" foo-baz=""BazObjValue"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  315. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  316. html.ToHtmlString());
  317. }
  318. [Fact]
  319. public void CheckBoxForWithAttributeDictionary()
  320. {
  321. // Arrange
  322. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  323. // Act
  324. MvcHtmlString html = helper.CheckBoxFor(m => m.foo, _attributesDictionary);
  325. // Assert
  326. Assert.Equal(@"<input baz=""BazValue"" checked=""checked"" id=""foo"" name=""foo"" type=""checkbox"" value=""true"" />" +
  327. @"<input name=""foo"" type=""hidden"" value=""false"" />",
  328. html.ToHtmlString());
  329. }
  330. [Fact]
  331. public void CheckBoxForWithPrefix()
  332. {
  333. // Arrange
  334. HtmlHelper<FooBarBazModel> helper = MvcHelper.GetHtmlHelper(GetCheckBoxViewData());
  335. helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
  336. // Act
  337. MvcHtmlString html = helper.CheckBoxFor(m => m.foo, _attributesDictionary);
  338. // Assert
  339. Assert.Equal(@"<input baz=""BazValue"" id=""MyPrefix_foo"" name=""MyPrefix.foo"" type=""checkbox"" value=""true"" />" +
  340. @"<input name=""MyPrefix.foo"" type=""hidden"" value=""false"" />",
  341. html.ToHtmlString());
  342. }
  343. // Culture tests
  344. [Fact]
  345. public void InputHelpersUseCurrentCultureToConvertValueParameter()
  346. {
  347. // Arrange
  348. DateTime dt = new DateTime(1900, 1, 1, 0, 0, 0);
  349. HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary { { "foo", dt } });
  350. var tests = new[]
  351. {
  352. // Hidden(name)
  353. new
  354. {
  355. Html = @"<input id=""foo"" name=""foo"" type=""hidden"" value=""1900/01/01 12:00:00 AM"" />",
  356. Action = new Func<MvcHtmlString>(() => helper.Hidden("foo"))
  357. },
  358. // Hidden(name, value)
  359. new
  360. {
  361. Html = @"<input id=""foo"" name=""foo"" type=""hidden"" value=""1900/01/01 12:00:00 AM"" />",
  362. Action = new Func<MvcHtmlString>(() => helper.Hidden("foo", dt))
  363. },
  364. // Hidden(name, value, htmlAttributes)
  365. new
  366. {
  367. Html = @"<input id=""foo"" name=""foo"" type=""hidden"" value=""1900/01/01 12:00:00 AM"" />",
  368. Action = new Func<MvcHtmlString>(() => helper.Hidden("foo", dt, null))
  369. },
  370. // Hidden(name, value, htmlAttributes)
  371. new
  372. {
  373. Html = @"<input id=""foo"" name=""foo"" type=""hidden"" value=""1900/01/01 12:00:00 AM"" />",
  374. Action = new Func<MvcHtmlString>(() => helper.Hidden("foo", dt, new RouteValueDictionary()))
  375. },
  376. // RadioButton(name, value)
  377. new
  378. {
  379. Html = @"<input checked=""checked"" id=""foo"" name=""foo"" type=""radio"" value=""1900/01/01 12:00:00 AM"" />",
  380. Action = new Func<MvcHtmlString>(() => helper.RadioButton("foo", dt))
  381. },
  382. // RadioButton(name, value, isChecked)
  383. new
  384. {
  385. Html = @"<input id=""foo"" name=""foo"" type=""radio"" value=""1900/01/01 12:00:00 AM"" />",
  386. Action = new Func<MvcHtmlString>(() => helper.RadioButton("foo", dt, false))
  387. },
  388. // RadioButton(name, value, htmlAttributes)
  389. new
  390. {
  391. Html = @"<input checked=""checked"" id=""foo"" name=""foo"" type=""radio"" value=""1900/01/01 12:00:00 AM"" />",
  392. Action = new Func<MvcHtmlString>(() => helper.RadioButton("foo", dt, null))
  393. },
  394. // RadioButton(name, value)
  395. new
  396. {
  397. Html = @"<input checked=""checked"" id=""foo"" name=""foo"" type=""radio"" value=""1900/01/01 12:00:00 AM"" />",
  398. Action = new Func<MvcHtmlString>(() => helper.RadioButton("foo", dt, new RouteValueDictionary()))
  399. },
  400. // RadioButton(name, value, isChecked, htmlAttributes)
  401. new
  402. {
  403. Html = @"<input id=""foo"" name=""foo"" type=""radio"" value=""1900/01/01 12:00:00 AM"" />",
  404. Action = new Func<MvcHtmlString>(() => helper.RadioButton("foo", dt, false, null))
  405. },
  406. // RadioButton(name, value, isChecked, htmlAttributes)
  407. new
  408. {
  409. Html = @"<input id=""foo"" name=""foo"" type=""radio"" value=""1900/01/01 12:00:00 AM"" />",
  410. Action = new Func<MvcHtmlString>(() => helper.RadioButton("foo", dt, false, new RouteValueDictionary()))
  411. },
  412. // TextBox(name)
  413. new
  414. {
  415. Html = @"<input id=""foo"" name=""foo"" type=""text"" value=""1900/01/01 12:00:00 AM"" />",
  416. Action = new Func<MvcHtmlString>(() => helper.TextBox("foo"))
  417. },
  418. // TextBox(name, value)
  419. new
  420. {
  421. Html = @"<input id=""foo"" name=""foo"" type=""text"" value=""1900/01/01 12:00:00 AM"" />",
  422. Action = new Func<MvcHtmlString>(() => helper.TextBox("foo", dt))
  423. },
  424. // TextBox(name, value, hmtlAttributes)
  425. new
  426. {
  427. Html = @"<input id=""foo"" name=""foo"" type=""text"" value=""1900/01/01 12:00:00 AM"" />",
  428. Action = new Func<MvcHtmlString>(() => helper.TextBox("foo", dt, (object)null))
  429. },
  430. // TextBox(name, value, hmtlAttributes)
  431. new
  432. {
  433. Html = @"<input id=""foo"" name=""foo"" type=""text"" value=""1900/01/01 12:00:00 AM"" />",
  434. Action = new Func<MvcHtmlString>(() => helper.TextBox("foo", dt, new RouteValueDictionary()))
  435. }
  436. };
  437. // Act && Assert
  438. using (HtmlHelperTest.ReplaceCulture("en-ZA", "en-US"))
  439. {
  440. foreach (var test in tests)
  441. {
  442. Assert.Equal(test.Html, test.Action().ToHtmlString());
  443. }
  444. }
  445. }
  446. // Hidden
  447. [Fact]
  448. public void HiddenWithByteArrayValueRendersBase64EncodedValue()
  449. {
  450. // Arrange
  451. HtmlHelper htmlHelper = MvcHelper.GetHtmlHelper();
  452. // Act
  453. MvcHtmlString result = htmlHelper.Hidden("ProductName", ByteArrayModelBinderTest.Base64TestBytes);
  454. // Assert
  455. Assert.Equal("<input id=\"ProductName\" name=\"ProductName\" type=\"hidden\" value=\"Fys1\" />", result.ToHtmlString());
  456. }
  457. [Fact]
  458. public void HiddenWithBinaryArrayValueRendersBase64EncodedValue()
  459. {
  460. // Arrange
  461. HtmlHelper htmlHelper = MvcHelper.GetHtmlHelper();
  462. // Act
  463. MvcHtmlString result = htmlHelper.Hidden("ProductName", new Binary(new byte[] { 23, 43, 53 }));
  464. // Assert
  465. Assert.Equal("<input id=\"ProductName\" name=\"ProductName\" type=\"hidden\" value=\"Fys1\" />", result.ToHtmlString());
  466. }
  467. [Fact]
  468. public void HiddenWithEmptyNameThrows()
  469. {
  470. // Arrange
  471. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  472. // Act & Assert
  473. Assert.ThrowsArgumentNullOrEmpty(
  474. delegate { helper.Hidden(String.Empty); },
  475. "name");
  476. }
  477. [Fact]
  478. public void HiddenWithExplicitValue()
  479. {
  480. // Arrange
  481. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  482. // Act
  483. MvcHtmlString html = helper.Hidden("foo", "DefaultFoo", null);
  484. // Assert
  485. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />", html.ToHtmlString());
  486. }
  487. [Fact]
  488. public void HiddenWithExplicitValueAndAttributesDictionary()
  489. {
  490. // Arrange
  491. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  492. // Act
  493. MvcHtmlString html = helper.Hidden("foo", "DefaultFoo", _attributesDictionary);
  494. // Assert
  495. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />", html.ToHtmlString());
  496. }
  497. [Fact]
  498. public void HiddenWithExplicitValueAndAttributesObject()
  499. {
  500. // Arrange
  501. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  502. // Act
  503. MvcHtmlString html = helper.Hidden("foo", "DefaultFoo", _attributesObjectDictionary);
  504. // Assert
  505. Assert.Equal(@"<input baz=""BazObjValue"" id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />", html.ToHtmlString());
  506. }
  507. [Fact]
  508. public void HiddenWithExplicitValueAndAttributesObjectWithUnderscores()
  509. {
  510. // Arrange
  511. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  512. // Act
  513. MvcHtmlString html = helper.Hidden("foo", "DefaultFoo", _attributesObjectUnderscoresDictionary);
  514. // Assert
  515. Assert.Equal(@"<input foo-baz=""BazObjValue"" id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />", html.ToHtmlString());
  516. }
  517. [Fact]
  518. public void HiddenWithExplicitValueNull()
  519. {
  520. // Arrange
  521. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  522. // Act
  523. MvcHtmlString html = helper.Hidden("foo", (string)null /* value */, (object)null /* htmlAttributes */);
  524. // Assert
  525. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value=""ViewDataFoo"" />", html.ToHtmlString());
  526. }
  527. [Fact]
  528. public void HiddenWithImplicitValue()
  529. {
  530. // Arrange
  531. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  532. // Act
  533. MvcHtmlString html = helper.Hidden("foo");
  534. // Assert
  535. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value=""ViewDataFoo"" />", html.ToHtmlString());
  536. }
  537. [Fact]
  538. public void HiddenWithImplicitValueAndAttributesDictionary()
  539. {
  540. // Arrange
  541. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  542. // Act
  543. MvcHtmlString html = helper.Hidden("foo", null, _attributesDictionary);
  544. // Assert
  545. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""hidden"" value=""ViewDataFoo"" />", html.ToHtmlString());
  546. }
  547. [Fact]
  548. public void HiddenWithImplicitValueAndAttributesDictionaryReturnsEmptyValueIfNotFound()
  549. {
  550. // Arrange
  551. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  552. // Act
  553. MvcHtmlString html = helper.Hidden("keyNotFound", null, _attributesDictionary);
  554. // Assert
  555. Assert.Equal(@"<input baz=""BazValue"" id=""keyNotFound"" name=""keyNotFound"" type=""hidden"" value="""" />", html.ToHtmlString());
  556. }
  557. [Fact]
  558. public void HiddenWithImplicitValueAndAttributesObject()
  559. {
  560. // Arrange
  561. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  562. // Act
  563. MvcHtmlString html = helper.Hidden("foo", null, _attributesObjectDictionary);
  564. // Assert
  565. Assert.Equal(@"<input baz=""BazObjValue"" id=""foo"" name=""foo"" type=""hidden"" value=""ViewDataFoo"" />", html.ToHtmlString());
  566. }
  567. [Fact]
  568. public void HiddenWithNameAndValue()
  569. {
  570. // Arrange
  571. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  572. // Act
  573. MvcHtmlString html = helper.Hidden("foo", "fooValue");
  574. // Assert
  575. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value=""fooValue"" />", html.ToHtmlString());
  576. }
  577. [Fact]
  578. public void HiddenWithPrefix()
  579. {
  580. // Arrange
  581. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  582. helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
  583. // Act
  584. MvcHtmlString html = helper.Hidden("foo", "fooValue");
  585. // Assert
  586. Assert.Equal(@"<input id=""MyPrefix_foo"" name=""MyPrefix.foo"" type=""hidden"" value=""fooValue"" />", html.ToHtmlString());
  587. }
  588. [Fact]
  589. public void HiddenWithPrefixAndEmptyName()
  590. {
  591. // Arrange
  592. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  593. helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
  594. // Act
  595. MvcHtmlString html = helper.Hidden("", "fooValue");
  596. // Assert
  597. Assert.Equal(@"<input id=""MyPrefix"" name=""MyPrefix"" type=""hidden"" value=""fooValue"" />", html.ToHtmlString());
  598. }
  599. [Fact]
  600. public void HiddenWithNullNameThrows()
  601. {
  602. // Arrange
  603. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  604. // Act & Assert
  605. Assert.ThrowsArgumentNullOrEmpty(
  606. delegate { helper.Hidden(null /* name */); },
  607. "name");
  608. }
  609. [Fact]
  610. public void HiddenWithViewDataErrors()
  611. {
  612. // Arrange
  613. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewDataWithErrors());
  614. // Act
  615. MvcHtmlString html = helper.Hidden("foo", null, _attributesObjectDictionary);
  616. // Assert
  617. Assert.Equal(@"<input baz=""BazObjValue"" class=""input-validation-error"" id=""foo"" name=""foo"" type=""hidden"" value=""AttemptedValueFoo"" />", html.ToHtmlString());
  618. }
  619. [Fact]
  620. public void HiddenWithViewDataErrorsAndCustomClass()
  621. {
  622. // Arrange
  623. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewDataWithErrors());
  624. // Act
  625. MvcHtmlString html = helper.Hidden("foo", null, new { @class = "foo-class" });
  626. // Assert
  627. Assert.Equal(@"<input class=""input-validation-error foo-class"" id=""foo"" name=""foo"" type=""hidden"" value=""AttemptedValueFoo"" />", html.ToHtmlString());
  628. }
  629. // HiddenFor
  630. [Fact]
  631. public void HiddenForWithNullExpressionThrows()
  632. {
  633. // Arrange
  634. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  635. // Act & Assert
  636. Assert.ThrowsArgumentNull(
  637. () => helper.HiddenFor<HiddenModel, object>(null),
  638. "expression"
  639. );
  640. }
  641. [Fact]
  642. public void HiddenForWithStringValue()
  643. {
  644. // Arrange
  645. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  646. helper.ViewData.Model.foo = "DefaultFoo";
  647. // Act
  648. MvcHtmlString html = helper.HiddenFor(m => m.foo);
  649. // Assert
  650. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />", html.ToHtmlString());
  651. }
  652. [Fact]
  653. public void HiddenForWithByteArrayValueRendersBase64EncodedValue()
  654. {
  655. // Arrange
  656. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  657. helper.ViewData.Model.bytes = ByteArrayModelBinderTest.Base64TestBytes;
  658. // Act
  659. MvcHtmlString result = helper.HiddenFor(m => m.bytes);
  660. // Assert
  661. Assert.Equal("<input id=\"bytes\" name=\"bytes\" type=\"hidden\" value=\"Fys1\" />", result.ToHtmlString());
  662. }
  663. [Fact]
  664. public void HiddenForWithBinaryValueRendersBase64EncodedValue()
  665. {
  666. // Arrange
  667. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  668. helper.ViewData.Model.binary = new Binary(new byte[] { 23, 43, 53 });
  669. // Act
  670. MvcHtmlString result = helper.HiddenFor(m => m.binary);
  671. // Assert
  672. Assert.Equal("<input id=\"binary\" name=\"binary\" type=\"hidden\" value=\"Fys1\" />", result.ToHtmlString());
  673. }
  674. [Fact]
  675. public void HiddenForWithAttributesDictionary()
  676. {
  677. // Arrange
  678. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  679. helper.ViewData.Model.foo = "DefaultFoo";
  680. // Act
  681. MvcHtmlString html = helper.HiddenFor(m => m.foo, _attributesDictionary);
  682. // Assert
  683. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />", html.ToHtmlString());
  684. }
  685. [Fact]
  686. public void HiddenForWithAttributesObject()
  687. {
  688. // Arrange
  689. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  690. helper.ViewData.Model.foo = "DefaultFoo";
  691. // Act
  692. MvcHtmlString html = helper.HiddenFor(m => m.foo, _attributesObjectDictionary);
  693. // Assert
  694. Assert.Equal(@"<input baz=""BazObjValue"" id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />", html.ToHtmlString());
  695. }
  696. [Fact]
  697. public void HiddenForWithAttributesObjectWithUnderscores()
  698. {
  699. // Arrange
  700. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  701. helper.ViewData.Model.foo = "DefaultFoo";
  702. // Act
  703. MvcHtmlString html = helper.HiddenFor(m => m.foo, _attributesObjectUnderscoresDictionary);
  704. // Assert
  705. Assert.Equal(@"<input foo-baz=""BazObjValue"" id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />", html.ToHtmlString());
  706. }
  707. [Fact]
  708. public void HiddenForWithPrefix()
  709. {
  710. // Arrange
  711. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  712. helper.ViewData.Model.foo = "fooValue";
  713. helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
  714. // Act
  715. MvcHtmlString html = helper.HiddenFor(m => m.foo);
  716. // Assert
  717. Assert.Equal(@"<input id=""MyPrefix_foo"" name=""MyPrefix.foo"" type=""hidden"" value=""fooValue"" />", html.ToHtmlString());
  718. }
  719. [Fact]
  720. public void HiddenForWithPrefixAndEmptyName()
  721. {
  722. // Arrange
  723. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  724. helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
  725. // Act
  726. MvcHtmlString html = helper.HiddenFor(m => m);
  727. // Assert
  728. Assert.Equal(@"<input id=""MyPrefix"" name=""MyPrefix"" type=""hidden"" value=""{ foo = (null) }"" />", html.ToHtmlString());
  729. }
  730. [Fact]
  731. public void HiddenForWithViewDataErrors()
  732. {
  733. // Arrange
  734. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewDataWithErrors());
  735. // Act
  736. MvcHtmlString html = helper.HiddenFor(m => m.foo, _attributesObjectDictionary);
  737. // Assert
  738. Assert.Equal(@"<input baz=""BazObjValue"" class=""input-validation-error"" id=""foo"" name=""foo"" type=""hidden"" value=""AttemptedValueFoo"" />", html.ToHtmlString());
  739. }
  740. [Fact]
  741. public void HiddenForWithViewDataErrorsAndCustomClass()
  742. {
  743. // Arrange
  744. HtmlHelper<HiddenModel> helper = MvcHelper.GetHtmlHelper(GetHiddenViewDataWithErrors());
  745. // Act
  746. MvcHtmlString html = helper.HiddenFor(m => m.foo, new { @class = "foo-class" });
  747. // Assert
  748. Assert.Equal(@"<input class=""input-validation-error foo-class"" id=""foo"" name=""foo"" type=""hidden"" value=""AttemptedValueFoo"" />", html.ToHtmlString());
  749. }
  750. // Password
  751. [Fact]
  752. public void PasswordWithEmptyNameThrows()
  753. {
  754. // Arrange
  755. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  756. // Act & Assert
  757. Assert.ThrowsArgumentNullOrEmpty(
  758. delegate { helper.Password(String.Empty); },
  759. "name");
  760. }
  761. [Fact]
  762. public void PasswordDictionaryOverridesImplicitParameters()
  763. {
  764. // Arrange
  765. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  766. // Act
  767. MvcHtmlString html = helper.Password("foo", "Some Value", new { type = "fooType" });
  768. // Assert
  769. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""fooType"" value=""Some Value"" />", html.ToHtmlString());
  770. }
  771. [Fact]
  772. public void PasswordExplicitParametersOverrideDictionary()
  773. {
  774. // Arrange
  775. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  776. // Act
  777. MvcHtmlString html = helper.Password("foo", "Some Value", new { value = "Another Value", name = "bar" });
  778. // Assert
  779. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" value=""Some Value"" />", html.ToHtmlString());
  780. }
  781. [Fact]
  782. public void PasswordWithExplicitValue()
  783. {
  784. // Arrange
  785. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  786. // Act
  787. MvcHtmlString html = helper.Password("foo", "DefaultFoo", (object)null);
  788. // Assert
  789. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" value=""DefaultFoo"" />", html.ToHtmlString());
  790. }
  791. [Fact]
  792. public void PasswordWithExplicitValue_Unobtrusive()
  793. {
  794. // Arrange
  795. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  796. helper.ViewContext.ClientValidationEnabled = true;
  797. helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
  798. helper.ViewContext.FormContext = new FormContext();
  799. helper.ClientValidationRuleFactory = (name, metadata) => new[] { new ModelClientValidationRule { ValidationType = "type", ErrorMessage = "error" } };
  800. // Act
  801. MvcHtmlString html = helper.Password("foo", "DefaultFoo", (object)null);
  802. // Assert
  803. Assert.Equal(@"<input data-val=""true"" data-val-type=""error"" id=""foo"" name=""foo"" type=""password"" value=""DefaultFoo"" />", html.ToHtmlString());
  804. }
  805. [Fact]
  806. public void PasswordWithExplicitValueAndAttributesDictionary()
  807. {
  808. // Arrange
  809. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  810. // Act
  811. MvcHtmlString html = helper.Password("foo", "DefaultFoo", _attributesDictionary);
  812. // Assert
  813. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""password"" value=""DefaultFoo"" />", html.ToHtmlString());
  814. }
  815. [Fact]
  816. public void PasswordWithExplicitValueAndAttributesObject()
  817. {
  818. // Arrange
  819. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  820. // Act
  821. MvcHtmlString html = helper.Password("foo", "DefaultFoo", _attributesObjectDictionary);
  822. // Assert
  823. Assert.Equal(@"<input baz=""BazObjValue"" id=""foo"" name=""foo"" type=""password"" value=""DefaultFoo"" />", html.ToHtmlString());
  824. }
  825. [Fact]
  826. public void PasswordWithExplicitValueNull()
  827. {
  828. // Arrange
  829. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  830. // Act
  831. MvcHtmlString html = helper.Password("foo", (string)null /* value */, (object)null);
  832. // Assert
  833. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  834. }
  835. [Fact]
  836. public void PasswordWithImplicitValue()
  837. {
  838. // Arrange
  839. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  840. // Act
  841. MvcHtmlString html = helper.Password("foo");
  842. // Assert
  843. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  844. }
  845. [Fact]
  846. public void PasswordWithImplicitValueAndAttributesDictionary()
  847. {
  848. // Arrange
  849. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  850. // Act
  851. MvcHtmlString html = helper.Password("foo", null, _attributesDictionary);
  852. // Assert
  853. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  854. }
  855. [Fact]
  856. public void PasswordWithImplicitValueAndAttributesDictionaryReturnsEmptyValueIfNotFound()
  857. {
  858. // Arrange
  859. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  860. // Act
  861. MvcHtmlString html = helper.Password("keyNotFound", null, _attributesDictionary);
  862. // Assert
  863. Assert.Equal(@"<input baz=""BazValue"" id=""keyNotFound"" name=""keyNotFound"" type=""password"" />", html.ToHtmlString());
  864. }
  865. [Fact]
  866. public void PasswordWithImplicitValueAndAttributesObject()
  867. {
  868. // Arrange
  869. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  870. // Act
  871. MvcHtmlString html = helper.Password("foo", null, _attributesObjectDictionary);
  872. // Assert
  873. Assert.Equal(@"<input baz=""BazObjValue"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  874. }
  875. [Fact]
  876. public void PasswordWithImplicitValueAndAttributesObjectWithUnderscores()
  877. {
  878. // Arrange
  879. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  880. // Act
  881. MvcHtmlString html = helper.Password("foo", null, _attributesObjectUnderscoresDictionary);
  882. // Assert
  883. Assert.Equal(@"<input foo-baz=""BazObjValue"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  884. }
  885. [Fact]
  886. public void PasswordWithNameAndValue()
  887. {
  888. // Arrange
  889. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  890. // Act
  891. MvcHtmlString html = helper.Password("foo", "fooValue");
  892. // Assert
  893. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" value=""fooValue"" />", html.ToHtmlString());
  894. }
  895. [Fact]
  896. public void PasswordWithPrefix()
  897. {
  898. // Arrange
  899. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  900. helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
  901. // Act
  902. MvcHtmlString html = helper.Password("foo", "fooValue");
  903. // Assert
  904. Assert.Equal(@"<input id=""MyPrefix_foo"" name=""MyPrefix.foo"" type=""password"" value=""fooValue"" />", html.ToHtmlString());
  905. }
  906. [Fact]
  907. public void PasswordWithPrefixAndEmptyName()
  908. {
  909. // Arrange
  910. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetHiddenViewData());
  911. helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
  912. // Act
  913. MvcHtmlString html = helper.Password("", "fooValue");
  914. // Assert
  915. Assert.Equal(@"<input id=""MyPrefix"" name=""MyPrefix"" type=""password"" value=""fooValue"" />", html.ToHtmlString());
  916. }
  917. [Fact]
  918. public void PasswordWithNullNameThrows()
  919. {
  920. // Arrange
  921. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  922. // Act & Assert
  923. Assert.ThrowsArgumentNullOrEmpty(
  924. delegate { helper.Password(null /* name */); },
  925. "name");
  926. }
  927. [Fact]
  928. public void PasswordWithViewDataErrors()
  929. {
  930. // Arrange
  931. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewDataWithErrors());
  932. // Act
  933. MvcHtmlString html = helper.Password("foo", null, _attributesObjectDictionary);
  934. // Assert
  935. Assert.Equal(@"<input baz=""BazObjValue"" class=""input-validation-error"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  936. }
  937. [Fact]
  938. public void PasswordWithViewDataErrorsAndCustomClass()
  939. {
  940. // Arrange
  941. HtmlHelper helper = MvcHelper.GetHtmlHelper(GetPasswordViewDataWithErrors());
  942. // Act
  943. MvcHtmlString html = helper.Password("foo", null, new { @class = "foo-class" });
  944. // Assert
  945. Assert.Equal(@"<input class=""input-validation-error foo-class"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  946. }
  947. // PasswordFor
  948. [Fact]
  949. public void PasswordForWithNullExpressionThrows()
  950. {
  951. // Arrange
  952. HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  953. // Act & Assert
  954. Assert.ThrowsArgumentNull(
  955. () => helper.PasswordFor<FooModel, object>(null),
  956. "expression");
  957. }
  958. [Fact]
  959. public void PasswordForDictionaryOverridesImplicitParameters()
  960. {
  961. // Arrange
  962. HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  963. // Act
  964. MvcHtmlString html = helper.PasswordFor(m => m.foo, new { type = "fooType" });
  965. // Assert
  966. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""fooType"" />", html.ToHtmlString());
  967. }
  968. [Fact]
  969. public void PasswordForExpressionNameOverridesDictionary()
  970. {
  971. // Arrange
  972. HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  973. // Act
  974. MvcHtmlString html = helper.PasswordFor(m => m.foo, new { name = "bar" });
  975. // Assert
  976. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  977. }
  978. [Fact]
  979. public void PasswordForWithImplicitValue()
  980. {
  981. // Arrange
  982. HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  983. // Act
  984. MvcHtmlString html = helper.PasswordFor(m => m.foo);
  985. // Assert
  986. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  987. }
  988. [Fact]
  989. public void PasswordForWithImplicitValue_Unobtrusive()
  990. {
  991. // Arrange
  992. HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  993. helper.ViewContext.ClientValidationEnabled = true;
  994. helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
  995. helper.ViewContext.FormContext = new FormContext();
  996. helper.ClientValidationRuleFactory = (name, metadata) => new[] { new ModelClientValidationRule { ValidationType = "type", ErrorMessage = "error" } };
  997. // Act
  998. MvcHtmlString html = helper.PasswordFor(m => m.foo);
  999. // Assert
  1000. Assert.Equal(@"<input data-val=""true"" data-val-type=""error"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  1001. }
  1002. [Fact]
  1003. public void PasswordForWithDeepValueWithNullModel_Unobtrusive()
  1004. { // Dev10 Bug #936192
  1005. // Arrange
  1006. HtmlHelper<DeepContainerModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<DeepContainerModel>());
  1007. helper.ViewContext.ClientValidationEnabled = true;
  1008. helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
  1009. helper.ViewContext.FormContext = new FormContext();
  1010. // Act
  1011. MvcHtmlString html = helper.PasswordFor(m => m.contained.foo);
  1012. // Assert
  1013. Assert.Equal(@"<input data-val=""true"" data-val-required=""The foo field is required."" id=""contained_foo"" name=""contained.foo"" type=""password"" />", html.ToHtmlString());
  1014. }
  1015. [Fact]
  1016. public void PasswordForWithAttributesDictionary()
  1017. {
  1018. // Arrange
  1019. HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  1020. // Act
  1021. MvcHtmlString html = helper.PasswordFor(m => m.foo, _attributesDictionary);
  1022. // Assert
  1023. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  1024. }
  1025. [Fact]
  1026. public void PasswordForWithAttributesObject()
  1027. {
  1028. // Arrange
  1029. HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  1030. // Act
  1031. MvcHtmlString html = helper.PasswordFor(m => m.foo, _attributesObjectDictionary);
  1032. // Assert
  1033. Assert.Equal(@"<input baz=""BazObjValue"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  1034. }
  1035. [Fact]
  1036. public void PasswordForWithAttributesObjectWithUnderscores()
  1037. {
  1038. // Arrange
  1039. HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  1040. // Act
  1041. MvcHtmlString html = helper.PasswordFor(m => m.foo, _attributesObjectUnderscoresDictionary);
  1042. // Assert
  1043. Assert.Equal(@"<input foo-baz=""BazObjValue"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  1044. }
  1045. [Fact]
  1046. public void PasswordForWithPrefix()
  1047. {
  1048. // Arrange
  1049. HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(GetPasswordViewData());
  1050. helper.ViewContext.ViewData.TemplateInfo.Ht