PageRenderTime 46ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/test/System.Web.WebPages.Test/Html/SelectHelperTest.cs

https://bitbucket.org/mdavid/aspnetwebstack
C# | 776 lines | 549 code | 114 blank | 113 comment | 0 complexity | f9d23d7b86b9f32608df4a3aa20c313d MD5 | raw file
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Web.WebPages.Html;
  4. using Moq;
  5. using Xunit;
  6. using Assert = Microsoft.TestCommon.AssertEx;
  7. namespace System.Web.WebPages.Test
  8. {
  9. public class SelectExtensionsTest
  10. {
  11. [Fact]
  12. public void DropDownListThrowsWithNoName()
  13. {
  14. // Arrange
  15. HtmlHelper helper = HtmlHelperFactory.Create();
  16. // Act and assert
  17. Assert.ThrowsArgumentNullOrEmptyString(() => helper.DropDownList(name: null, selectList: null), "name");
  18. }
  19. [Fact]
  20. public void DropDownListWithNoSelectedItem()
  21. {
  22. // Arrange
  23. HtmlHelper helper = HtmlHelperFactory.Create();
  24. // Act
  25. var html = helper.DropDownList("foo", GetSelectList());
  26. // Assert
  27. Assert.Equal(
  28. @"<select id=""foo"" name=""foo"">
  29. <option value=""A"">Alpha</option>
  30. <option value=""B"">Bravo</option>
  31. <option value=""C"">Charlie</option>
  32. </select>",
  33. html.ToHtmlString());
  34. }
  35. [Fact]
  36. public void DropDownListWithDefaultOption()
  37. {
  38. // Arrange
  39. HtmlHelper helper = HtmlHelperFactory.Create();
  40. // Act
  41. var html = helper.DropDownList("foo", "select-one", GetSelectList());
  42. // Assert
  43. Assert.Equal(
  44. @"<select id=""foo"" name=""foo"">
  45. <option value="""">select-one</option>
  46. <option value=""A"">Alpha</option>
  47. <option value=""B"">Bravo</option>
  48. <option value=""C"">Charlie</option>
  49. </select>",
  50. html.ToHtmlString());
  51. }
  52. [Fact]
  53. public void DropDownListWithAttributes()
  54. {
  55. // Arrange
  56. HtmlHelper helper = HtmlHelperFactory.Create();
  57. // Act
  58. var html = helper.DropDownList("foo", GetSelectList(), new { attr = "attr-val", attr2 = "attr-val2" });
  59. // Assert
  60. Assert.Equal(
  61. @"<select attr=""attr-val"" attr2=""attr-val2"" id=""foo"" name=""foo"">
  62. <option value=""A"">Alpha</option>
  63. <option value=""B"">Bravo</option>
  64. <option value=""C"">Charlie</option>
  65. </select>",
  66. html.ToHtmlString());
  67. }
  68. [Fact]
  69. public void DropDownListWithExplicitValue()
  70. {
  71. // Arrange
  72. HtmlHelper helper = HtmlHelperFactory.Create();
  73. // Act
  74. var html = helper.DropDownList("foo", null, GetSelectList(), "B", new Dictionary<string, object> { { "attr", "attr-val" } });
  75. // Assert
  76. Assert.Equal(
  77. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  78. <option value=""A"">Alpha</option>
  79. <option selected=""selected"" value=""B"">Bravo</option>
  80. <option value=""C"">Charlie</option>
  81. </select>",
  82. html.ToHtmlString());
  83. }
  84. [Fact]
  85. public void DropDownWithModelValue()
  86. {
  87. // Arrange
  88. var modelState = new ModelStateDictionary();
  89. modelState.SetModelValue("foo", "C");
  90. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  91. // Act
  92. var html = helper.DropDownList("foo", GetSelectList(), new { attr = "attr-val" });
  93. // Assert
  94. Assert.Equal(
  95. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  96. <option value=""A"">Alpha</option>
  97. <option value=""B"">Bravo</option>
  98. <option selected=""selected"" value=""C"">Charlie</option>
  99. </select>",
  100. html.ToHtmlString());
  101. }
  102. [Fact]
  103. public void DropDownWithExplictAndModelValue()
  104. {
  105. // Arrange
  106. var modelState = new ModelStateDictionary();
  107. modelState.SetModelValue("foo", "C");
  108. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  109. // Act
  110. var html = helper.DropDownList("foo", null, GetSelectList(), "B", new { attr = "attr-val" });
  111. // Assert
  112. Assert.Equal(
  113. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  114. <option value=""A"">Alpha</option>
  115. <option selected=""selected"" value=""B"">Bravo</option>
  116. <option value=""C"">Charlie</option>
  117. </select>",
  118. html.ToHtmlString());
  119. }
  120. [Fact]
  121. public void DropDownWithNonStringModelValue()
  122. {
  123. // Arrange
  124. var modelState = new ModelStateDictionary();
  125. modelState.SetModelValue("foo", 23);
  126. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  127. // Act
  128. var html = helper.DropDownList("foo", null, GetSelectList(), new { attr = "attr-val" });
  129. // Assert
  130. Assert.Equal(
  131. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  132. <option value=""A"">Alpha</option>
  133. <option value=""B"">Bravo</option>
  134. <option value=""C"">Charlie</option>
  135. </select>",
  136. html.ToHtmlString());
  137. }
  138. [Fact]
  139. public void DropDownWithNonStringExplicitValue()
  140. {
  141. // Arrange
  142. HtmlHelper helper = HtmlHelperFactory.Create();
  143. // Act
  144. var html = helper.DropDownList("foo", null, GetSelectList(), new List<int>(), new { attr = "attr-val" });
  145. // Assert
  146. Assert.Equal(
  147. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  148. <option value=""A"">Alpha</option>
  149. <option value=""B"">Bravo</option>
  150. <option value=""C"">Charlie</option>
  151. </select>",
  152. html.ToHtmlString());
  153. }
  154. [Fact]
  155. public void DropDownWithErrors()
  156. {
  157. // Arrange
  158. var modelState = new ModelStateDictionary();
  159. modelState.AddError("foo", "some error");
  160. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  161. // Act
  162. var html = helper.DropDownList("foo", GetSelectList());
  163. // Assert
  164. Assert.Equal(
  165. @"<select class=""input-validation-error"" id=""foo"" name=""foo"">
  166. <option value=""A"">Alpha</option>
  167. <option value=""B"">Bravo</option>
  168. <option value=""C"">Charlie</option>
  169. </select>",
  170. html.ToHtmlString());
  171. }
  172. [Fact]
  173. public void DropDownListWithErrorsAndCustomClass()
  174. {
  175. // Arrange
  176. var modelState = new ModelStateDictionary();
  177. modelState.AddError("foo", "some error");
  178. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  179. // Act
  180. var html = helper.DropDownList("foo", GetSelectList(), new { @class = "my-class" });
  181. // Assert
  182. Assert.Equal(
  183. @"<select class=""input-validation-error my-class"" id=""foo"" name=""foo"">
  184. <option value=""A"">Alpha</option>
  185. <option value=""B"">Bravo</option>
  186. <option value=""C"">Charlie</option>
  187. </select>",
  188. html.ToHtmlString());
  189. }
  190. [Fact]
  191. public void DropDownListWithEmptyOptionLabel()
  192. {
  193. // Arrange
  194. var modelState = new ModelStateDictionary();
  195. modelState.AddError("foo", "some error");
  196. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  197. // Act
  198. var html = helper.DropDownList("foo", GetSelectList(), new { @class = "my-class" });
  199. // Assert
  200. Assert.Equal(
  201. @"<select class=""input-validation-error my-class"" id=""foo"" name=""foo"">
  202. <option value=""A"">Alpha</option>
  203. <option value=""B"">Bravo</option>
  204. <option value=""C"">Charlie</option>
  205. </select>",
  206. html.ToHtmlString());
  207. }
  208. [Fact]
  209. public void DropDownListWithObjectDictionaryAndTitle()
  210. {
  211. // Arrange
  212. HtmlHelper helper = HtmlHelperFactory.Create();
  213. // Act
  214. var html = helper.DropDownList("foo", "Select One", GetSelectList(), new { @class = "my-class" });
  215. // Assert
  216. Assert.Equal(
  217. @"<select class=""my-class"" id=""foo"" name=""foo"">
  218. <option value="""">Select One</option>
  219. <option value=""A"">Alpha</option>
  220. <option value=""B"">Bravo</option>
  221. <option value=""C"">Charlie</option>
  222. </select>",
  223. html.ToHtmlString());
  224. }
  225. [Fact]
  226. public void DropDownListWithDotReplacementForId()
  227. {
  228. // Arrange
  229. HtmlHelper helper = HtmlHelperFactory.Create();
  230. // Act
  231. var html = helper.DropDownList("foo.bar", "Select One", GetSelectList());
  232. // Assert
  233. Assert.Equal(
  234. @"<select id=""foo_bar"" name=""foo.bar"">
  235. <option value="""">Select One</option>
  236. <option value=""A"">Alpha</option>
  237. <option value=""B"">Bravo</option>
  238. <option value=""C"">Charlie</option>
  239. </select>",
  240. html.ToHtmlString());
  241. }
  242. [Fact]
  243. public void DropDownAddsUnobtrusiveValidationAttributes()
  244. {
  245. // Arrange
  246. const string fieldName = "name";
  247. var modelStateDictionary = new ModelStateDictionary();
  248. var validationHelper = new ValidationHelper(new Mock<HttpContextBase>().Object, modelStateDictionary);
  249. HtmlHelper helper = HtmlHelperFactory.Create(modelStateDictionary, validationHelper);
  250. // Act
  251. validationHelper.RequireField(fieldName, "Please specify a valid Name.");
  252. validationHelper.Add(fieldName, Validator.StringLength(30, errorMessage: "Name cannot exceed {0} characters"));
  253. var html = helper.DropDownList(fieldName, GetSelectList(), htmlAttributes: new Dictionary<string, object> { { "data-some-val", "5" } });
  254. // Assert
  255. Assert.Equal(@"<select data-some-val=""5"" data-val=""true"" data-val-length=""Name cannot exceed 30 characters"" data-val-length-max=""30"" data-val-required=""Please specify a valid Name."" id=""name"" name=""name"">
  256. <option value=""A"">Alpha</option>
  257. <option value=""B"">Bravo</option>
  258. <option value=""C"">Charlie</option>
  259. </select>", html.ToString());
  260. }
  261. // ListBox
  262. [Fact]
  263. public void ListBoxThrowsWithNoName()
  264. {
  265. // Arrange
  266. HtmlHelper helper = HtmlHelperFactory.Create();
  267. // Act and assert
  268. Assert.ThrowsArgumentNullOrEmptyString(() => helper.ListBox(name: null, selectList: null), "name");
  269. }
  270. [Fact]
  271. public void ListBoxWithNoSelectedItem()
  272. {
  273. // Arrange
  274. HtmlHelper helper = HtmlHelperFactory.Create();
  275. // Act
  276. var html = helper.ListBox("foo", GetSelectList());
  277. // Assert
  278. Assert.Equal(
  279. @"<select id=""foo"" name=""foo"">
  280. <option value=""A"">Alpha</option>
  281. <option value=""B"">Bravo</option>
  282. <option value=""C"">Charlie</option>
  283. </select>",
  284. html.ToHtmlString());
  285. }
  286. [Fact]
  287. public void ListBoxWithDefaultOption()
  288. {
  289. // Arrange
  290. HtmlHelper helper = HtmlHelperFactory.Create();
  291. // Act
  292. var html = helper.ListBox("foo", "select-one", GetSelectList());
  293. // Assert
  294. Assert.Equal(
  295. @"<select id=""foo"" name=""foo"">
  296. <option value="""">select-one</option>
  297. <option value=""A"">Alpha</option>
  298. <option value=""B"">Bravo</option>
  299. <option value=""C"">Charlie</option>
  300. </select>",
  301. html.ToHtmlString());
  302. }
  303. [Fact]
  304. public void ListBoxWithAttributes()
  305. {
  306. // Arrange
  307. HtmlHelper helper = HtmlHelperFactory.Create();
  308. // Act
  309. var html = helper.ListBox("foo", GetSelectList(), new { attr = "attr-val", attr2 = "attr-val2" });
  310. // Assert
  311. Assert.Equal(
  312. @"<select attr=""attr-val"" attr2=""attr-val2"" id=""foo"" name=""foo"">
  313. <option value=""A"">Alpha</option>
  314. <option value=""B"">Bravo</option>
  315. <option value=""C"">Charlie</option>
  316. </select>",
  317. html.ToHtmlString());
  318. }
  319. [Fact]
  320. public void ListBoxWithExplicitValue()
  321. {
  322. // Arrange
  323. HtmlHelper helper = HtmlHelperFactory.Create();
  324. // Act
  325. var html = helper.ListBox("foo", null, GetSelectList(), "B", new Dictionary<string, object> { { "attr", "attr-val" } });
  326. // Assert
  327. Assert.Equal(
  328. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  329. <option value=""A"">Alpha</option>
  330. <option selected=""selected"" value=""B"">Bravo</option>
  331. <option value=""C"">Charlie</option>
  332. </select>",
  333. html.ToHtmlString());
  334. }
  335. [Fact]
  336. public void ListBoxWithModelValue()
  337. {
  338. // Arrange
  339. var modelState = new ModelStateDictionary();
  340. modelState.SetModelValue("foo", "C");
  341. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  342. // Act
  343. var html = helper.ListBox("foo", GetSelectList(), new { attr = "attr-val" });
  344. // Assert
  345. Assert.Equal(
  346. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  347. <option value=""A"">Alpha</option>
  348. <option value=""B"">Bravo</option>
  349. <option selected=""selected"" value=""C"">Charlie</option>
  350. </select>",
  351. html.ToHtmlString());
  352. }
  353. [Fact]
  354. public void ListBoxWithExplicitMultipleValuesAndNoMultiple()
  355. {
  356. // Arrange
  357. HtmlHelper helper = HtmlHelperFactory.Create();
  358. // Act
  359. var html = helper.ListBox("foo", null, GetSelectList(), new[] { "B", "C" }, new Dictionary<string, object> { { "attr", "attr-val" } });
  360. // Assert
  361. Assert.Equal(
  362. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  363. <option value=""A"">Alpha</option>
  364. <option selected=""selected"" value=""B"">Bravo</option>
  365. <option value=""C"">Charlie</option>
  366. </select>",
  367. html.ToHtmlString());
  368. }
  369. [Fact]
  370. public void ListBoxWithExplicitMultipleValuesAndMultiple()
  371. {
  372. // Arrange
  373. HtmlHelper helper = HtmlHelperFactory.Create();
  374. // Act
  375. var html = helper.ListBox("foo", null, GetSelectList(), new[] { "B", "C" }, 4, true);
  376. // Assert
  377. Assert.Equal(
  378. @"<select id=""foo"" multiple=""multiple"" name=""foo"" size=""4"">
  379. <option value=""A"">Alpha</option>
  380. <option selected=""selected"" value=""B"">Bravo</option>
  381. <option selected=""selected"" value=""C"">Charlie</option>
  382. </select>",
  383. html.ToHtmlString());
  384. }
  385. [Fact]
  386. public void ListBoxWithMultipleModelValue()
  387. {
  388. // Arrange
  389. var modelState = new ModelStateDictionary();
  390. modelState.SetModelValue("foo", new[] { "A", "C" });
  391. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  392. // Act
  393. var html = helper.ListBox("foo", GetSelectList(), new { attr = "attr-val" });
  394. // Assert
  395. Assert.Equal(
  396. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  397. <option selected=""selected"" value=""A"">Alpha</option>
  398. <option value=""B"">Bravo</option>
  399. <option value=""C"">Charlie</option>
  400. </select>",
  401. html.ToHtmlString());
  402. }
  403. [Fact]
  404. public void ListBoxWithModelValueAndExplicitSelectItem()
  405. {
  406. // Arrange
  407. var modelState = new ModelStateDictionary();
  408. modelState.SetModelValue("foo", new[] { "C", "D" });
  409. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  410. var selectList = GetSelectList().ToList();
  411. selectList[1].Selected = true;
  412. // Act
  413. var html = helper.ListBox("foo", selectList, new { attr = "attr-val" });
  414. // Assert
  415. Assert.Equal(
  416. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  417. <option value=""A"">Alpha</option>
  418. <option selected=""selected"" value=""B"">Bravo</option>
  419. <option value=""C"">Charlie</option>
  420. </select>",
  421. html.ToHtmlString());
  422. }
  423. [Fact]
  424. public void ListBoxWithMultiSelectAndMultipleModelValue()
  425. {
  426. // Arrange
  427. var modelState = new ModelStateDictionary();
  428. modelState.SetModelValue("foo", new[] { "A", "C" });
  429. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  430. // Act
  431. var html = helper.ListBox("foo", GetSelectList(), null, 4, true);
  432. // Assert
  433. Assert.Equal(
  434. @"<select id=""foo"" multiple=""multiple"" name=""foo"" size=""4"">
  435. <option selected=""selected"" value=""A"">Alpha</option>
  436. <option value=""B"">Bravo</option>
  437. <option selected=""selected"" value=""C"">Charlie</option>
  438. </select>",
  439. html.ToHtmlString());
  440. }
  441. [Fact]
  442. public void ListBoxWithMultiSelectAndMultipleExplicitValues()
  443. {
  444. // Arrange
  445. HtmlHelper helper = HtmlHelperFactory.Create();
  446. // Act
  447. var html = helper.ListBox("foo", GetSelectList(), new[] { "A", "C" }, 4, true);
  448. // Assert
  449. Assert.Equal(
  450. @"<select id=""foo"" multiple=""multiple"" name=""foo"" size=""4"">
  451. <option selected=""selected"" value=""A"">Alpha</option>
  452. <option value=""B"">Bravo</option>
  453. <option selected=""selected"" value=""C"">Charlie</option>
  454. </select>",
  455. html.ToHtmlString());
  456. }
  457. [Fact]
  458. public void ListBoxWithMultiSelectAndExplitSelectValue()
  459. {
  460. // Arrange
  461. HtmlHelper helper = HtmlHelperFactory.Create();
  462. var selectList = GetSelectList().ToList();
  463. selectList.First().Selected = selectList.Last().Selected = true;
  464. // Act
  465. var html = helper.ListBox("foo", selectList, new[] { "B" }, 4, true);
  466. // Assert
  467. Assert.Equal(
  468. @"<select id=""foo"" multiple=""multiple"" name=""foo"" size=""4"">
  469. <option selected=""selected"" value=""A"">Alpha</option>
  470. <option selected=""selected"" value=""B"">Bravo</option>
  471. <option selected=""selected"" value=""C"">Charlie</option>
  472. </select>",
  473. html.ToHtmlString());
  474. }
  475. [Fact]
  476. public void ListBoxWithExplictAndModelValue()
  477. {
  478. // Arrange
  479. var modelState = new ModelStateDictionary();
  480. modelState.SetModelValue("foo", "C");
  481. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  482. // Act
  483. var html = helper.ListBox("foo", defaultOption: null, selectList: GetSelectList(),
  484. selectedValues: "B", htmlAttributes: new { attr = "attr-val" });
  485. // Assert
  486. Assert.Equal(
  487. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  488. <option value=""A"">Alpha</option>
  489. <option selected=""selected"" value=""B"">Bravo</option>
  490. <option value=""C"">Charlie</option>
  491. </select>",
  492. html.ToHtmlString());
  493. }
  494. [Fact]
  495. public void ListBoxWithErrorAndExplictAndModelState()
  496. {
  497. // Arrange
  498. var modelState = new ModelStateDictionary();
  499. modelState.SetModelValue("foo", "C");
  500. modelState.AddError("foo", "test");
  501. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  502. // Act
  503. var html = helper.ListBox("foo.bar", "Select One", GetSelectList());
  504. // Assert
  505. Assert.Equal(
  506. @"<select id=""foo_bar"" name=""foo.bar"">
  507. <option value="""">Select One</option>
  508. <option value=""A"">Alpha</option>
  509. <option value=""B"">Bravo</option>
  510. <option value=""C"">Charlie</option>
  511. </select>",
  512. html.ToHtmlString());
  513. }
  514. [Fact]
  515. public void ListBoxWithNonStringModelValue()
  516. {
  517. // Arrange
  518. var modelState = new ModelStateDictionary();
  519. modelState.SetModelValue("foo", 23);
  520. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  521. // Act
  522. var html = helper.ListBox("foo", null, GetSelectList(), new { attr = "attr-val" });
  523. // Assert
  524. Assert.Equal(
  525. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  526. <option value=""A"">Alpha</option>
  527. <option value=""B"">Bravo</option>
  528. <option value=""C"">Charlie</option>
  529. </select>",
  530. html.ToHtmlString());
  531. }
  532. [Fact]
  533. public void ListBoxWithNonStringExplicitValue()
  534. {
  535. // Arrange
  536. HtmlHelper helper = HtmlHelperFactory.Create();
  537. // Act
  538. var html = helper.ListBox("foo", null, GetSelectList(), new List<int>(), new { attr = "attr-val" });
  539. // Assert
  540. Assert.Equal(
  541. @"<select attr=""attr-val"" id=""foo"" name=""foo"">
  542. <option value=""A"">Alpha</option>
  543. <option value=""B"">Bravo</option>
  544. <option value=""C"">Charlie</option>
  545. </select>",
  546. html.ToHtmlString());
  547. }
  548. [Fact]
  549. public void ListBoxWithErrors()
  550. {
  551. // Arrange
  552. var modelState = new ModelStateDictionary();
  553. modelState.AddError("foo", "some error");
  554. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  555. // Act
  556. var html = helper.ListBox("foo", GetSelectList());
  557. // Assert
  558. Assert.Equal(
  559. @"<select class=""input-validation-error"" id=""foo"" name=""foo"">
  560. <option value=""A"">Alpha</option>
  561. <option value=""B"">Bravo</option>
  562. <option value=""C"">Charlie</option>
  563. </select>",
  564. html.ToHtmlString());
  565. }
  566. [Fact]
  567. public void ListBoxWithErrorsAndCustomClass()
  568. {
  569. // Arrange
  570. var modelState = new ModelStateDictionary();
  571. modelState.AddError("foo", "some error");
  572. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  573. // Act
  574. var html = helper.ListBox("foo", GetSelectList(), new { @class = "my-class" });
  575. // Assert
  576. Assert.Equal(
  577. @"<select class=""input-validation-error my-class"" id=""foo"" name=""foo"">
  578. <option value=""A"">Alpha</option>
  579. <option value=""B"">Bravo</option>
  580. <option value=""C"">Charlie</option>
  581. </select>",
  582. html.ToHtmlString());
  583. }
  584. [Fact]
  585. public void ListBoxWithEmptyOptionLabel()
  586. {
  587. // Arrange
  588. var modelState = new ModelStateDictionary();
  589. modelState.AddError("foo", "some error");
  590. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  591. // Act
  592. var html = helper.ListBox("foo", GetSelectList(), new { @class = "my-class" });
  593. // Assert
  594. Assert.Equal(
  595. @"<select class=""input-validation-error my-class"" id=""foo"" name=""foo"">
  596. <option value=""A"">Alpha</option>
  597. <option value=""B"">Bravo</option>
  598. <option value=""C"">Charlie</option>
  599. </select>",
  600. html.ToHtmlString());
  601. }
  602. [Fact]
  603. public void ListBoxWithObjectDictionaryAndTitle()
  604. {
  605. // Arrange
  606. HtmlHelper helper = HtmlHelperFactory.Create();
  607. // Act
  608. var html = helper.ListBox("foo", "Select One", GetSelectList(), new { @class = "my-class" });
  609. // Assert
  610. Assert.Equal(
  611. @"<select class=""my-class"" id=""foo"" name=""foo"">
  612. <option value="""">Select One</option>
  613. <option value=""A"">Alpha</option>
  614. <option value=""B"">Bravo</option>
  615. <option value=""C"">Charlie</option>
  616. </select>",
  617. html.ToHtmlString());
  618. }
  619. [Fact]
  620. public void ListBoxWithDotReplacementForId()
  621. {
  622. // Arrange
  623. HtmlHelper helper = HtmlHelperFactory.Create();
  624. // Act
  625. var html = helper.ListBox("foo.bar", "Select One", GetSelectList());
  626. // Assert
  627. Assert.Equal(
  628. @"<select id=""foo_bar"" name=""foo.bar"">
  629. <option value="""">Select One</option>
  630. <option value=""A"">Alpha</option>
  631. <option value=""B"">Bravo</option>
  632. <option value=""C"">Charlie</option>
  633. </select>",
  634. html.ToHtmlString());
  635. }
  636. [Fact]
  637. public void ListBoxAddsUnobtrusiveValidationAttributes()
  638. {
  639. // Arrange
  640. const string fieldName = "name";
  641. var modelStateDictionary = new ModelStateDictionary();
  642. var validationHelper = new ValidationHelper(new Mock<HttpContextBase>().Object, modelStateDictionary);
  643. HtmlHelper helper = HtmlHelperFactory.Create(modelStateDictionary, validationHelper);
  644. // Act
  645. validationHelper.RequireField(fieldName, "Please specify a valid Name.");
  646. validationHelper.Add(fieldName, Validator.StringLength(30, errorMessage: "Name cannot exceed {0} characters"));
  647. var html = helper.ListBox(fieldName, GetSelectList(), htmlAttributes: new Dictionary<string, object> { { "data-some-val", "5" } });
  648. // Assert
  649. Assert.Equal(@"<select data-some-val=""5"" data-val=""true"" data-val-length=""Name cannot exceed 30 characters"" data-val-length-max=""30"" data-val-required=""Please specify a valid Name."" id=""name"" name=""name"">
  650. <option value=""A"">Alpha</option>
  651. <option value=""B"">Bravo</option>
  652. <option value=""C"">Charlie</option>
  653. </select>", html.ToString());
  654. }
  655. private static IEnumerable<SelectListItem> GetSelectList()
  656. {
  657. yield return new SelectListItem() { Text = "Alpha", Value = "A" };
  658. yield return new SelectListItem() { Text = "Bravo", Value = "B" };
  659. yield return new SelectListItem() { Text = "Charlie", Value = "C" };
  660. }
  661. }
  662. }