PageRenderTime 59ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://bitbucket.org/mdavid/aspnetwebstack
C# | 584 lines | 342 code | 121 blank | 121 comment | 0 complexity | 36312ab712c089a418fc62be3253677b MD5 | raw file
  1. using System.Collections.Generic;
  2. using System.Data.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 InputHelperTest
  10. {
  11. private static readonly IDictionary<string, object> _attributesDictionary = new Dictionary<string, object> { { "baz", "BazValue" } };
  12. private static readonly object _attributesObject = new { baz = "BazValue" };
  13. [Fact]
  14. public void HiddenWithBinaryArrayValueRendersBase64EncodedValue()
  15. {
  16. // Arrange
  17. HtmlHelper helper = HtmlHelperFactory.Create();
  18. // Act
  19. var result = helper.Hidden("ProductName", new Binary(new byte[] { 23, 43, 53 }));
  20. // Assert
  21. Assert.Equal("<input id=\"ProductName\" name=\"ProductName\" type=\"hidden\" value=\"Fys1\" />", result.ToHtmlString());
  22. }
  23. [Fact]
  24. public void HiddenWithEmptyNameThrows()
  25. {
  26. // Arrange
  27. HtmlHelper helper = HtmlHelperFactory.Create();
  28. // Act & Assert
  29. Assert.ThrowsArgumentNullOrEmptyString(() => helper.Hidden(String.Empty), "name");
  30. Assert.ThrowsArgumentNullOrEmptyString(() => helper.Hidden(null), "name");
  31. }
  32. [Fact]
  33. public void HiddenWithExplicitValue()
  34. {
  35. // Arrange
  36. HtmlHelper helper = HtmlHelperFactory.Create();
  37. // Act
  38. var html = helper.Hidden("foo", "DefaultFoo");
  39. // Assert
  40. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />",
  41. html.ToHtmlString());
  42. }
  43. [Fact]
  44. public void HiddenWithExplicitValueAndAttributesDictionary()
  45. {
  46. // Arrange
  47. HtmlHelper helper = HtmlHelperFactory.Create();
  48. // Act
  49. var html = helper.Hidden("foo", "DefaultFoo", new Dictionary<string, object> { { "attr", "attr-val" } });
  50. // Assert
  51. Assert.Equal(@"<input attr=""attr-val"" id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />",
  52. html.ToHtmlString());
  53. }
  54. [Fact]
  55. public void HiddenWithExplicitValueAndObjectDictionary()
  56. {
  57. // Arrange
  58. HtmlHelper helper = HtmlHelperFactory.Create();
  59. // Act
  60. var html = helper.Hidden("foo", "DefaultFoo", new { attr = "attr-val" });
  61. // Assert
  62. Assert.Equal(@"<input attr=""attr-val"" id=""foo"" name=""foo"" type=""hidden"" value=""DefaultFoo"" />",
  63. html.ToHtmlString());
  64. }
  65. [Fact]
  66. public void HiddenWithExplicitValueNull()
  67. {
  68. // Arrange
  69. HtmlHelper helper = HtmlHelperFactory.Create();
  70. // Act
  71. var html = helper.Hidden("foo", value: null);
  72. // Assert
  73. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value="""" />", html.ToHtmlString());
  74. }
  75. [Fact]
  76. public void HiddenWithModelValue()
  77. {
  78. // Arrange
  79. var model = new ModelStateDictionary();
  80. model.SetModelValue("foo", "bar");
  81. HtmlHelper helper = HtmlHelperFactory.Create(model);
  82. // Act
  83. var html = helper.Hidden("foo");
  84. // Assert
  85. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value=""bar"" />", html.ToHtmlString());
  86. }
  87. [Fact]
  88. public void HiddenWithModelValueAndAttributesDictionary()
  89. {
  90. // Arrange
  91. var model = new ModelStateDictionary();
  92. model.SetModelValue("foo", "bar");
  93. HtmlHelper helper = HtmlHelperFactory.Create(model);
  94. // Act
  95. var html = helper.Hidden("foo", null, new Dictionary<string, object> { { "attr", "attr-val" } });
  96. // Assert
  97. Assert.Equal(@"<input attr=""attr-val"" id=""foo"" name=""foo"" type=""hidden"" value=""bar"" />", html.ToHtmlString());
  98. }
  99. [Fact]
  100. public void HiddenWithImplicitValueAndAttributesObject()
  101. {
  102. // Arrange
  103. var model = new ModelStateDictionary();
  104. model.SetModelValue("foo", "bar");
  105. HtmlHelper helper = HtmlHelperFactory.Create(model);
  106. // Act
  107. var html = helper.Hidden("foo", null, new { attr = "attr-val" });
  108. // Assert
  109. Assert.Equal(@"<input attr=""attr-val"" id=""foo"" name=""foo"" type=""hidden"" value=""bar"" />", html.ToHtmlString());
  110. }
  111. [Fact]
  112. public void HiddenWithNameAndValue()
  113. {
  114. // Arrange
  115. HtmlHelper helper = HtmlHelperFactory.Create();
  116. // Act
  117. var html = helper.Hidden("foo", "fooValue");
  118. // Assert
  119. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value=""fooValue"" />", html.ToHtmlString());
  120. }
  121. [Fact]
  122. public void HiddenWithExplicitOverwritesAttributeValue()
  123. {
  124. // Arrange
  125. HtmlHelper helper = HtmlHelperFactory.Create();
  126. // Act
  127. var html = helper.Hidden("foo", "fooValue", new { value = "barValue" });
  128. // Assert
  129. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value=""fooValue"" />", html.ToHtmlString());
  130. }
  131. [Fact]
  132. public void HiddenWithModelValueOverwritesAttributeValue()
  133. {
  134. // Arrange
  135. var model = new ModelStateDictionary();
  136. model.SetModelValue("foo", "fooValue");
  137. HtmlHelper helper = HtmlHelperFactory.Create(model);
  138. // Act
  139. var html = helper.Hidden("foo", null, new { value = "barValue" });
  140. // Assert
  141. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""hidden"" value=""fooValue"" />", html.ToHtmlString());
  142. }
  143. [Fact]
  144. public void HiddenAddsUnobtrusiveValidationAttributes()
  145. {
  146. // Arrange
  147. const string fieldName = "name";
  148. var modelStateDictionary = new ModelStateDictionary();
  149. var validationHelper = new ValidationHelper(new Mock<HttpContextBase>().Object, modelStateDictionary);
  150. HtmlHelper helper = HtmlHelperFactory.Create(modelStateDictionary, validationHelper);
  151. // Act
  152. validationHelper.RequireField(fieldName, "Please specify a valid Name.");
  153. validationHelper.Add(fieldName, Validator.StringLength(30, errorMessage: "Name cannot exceed {0} characters"));
  154. var html = helper.Hidden(fieldName, value: null, htmlAttributes: new Dictionary<string, object> { { "data-some-val", "5" } });
  155. // Assert
  156. Assert.Equal(@"<input 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"" type=""hidden"" value="""" />",
  157. html.ToString());
  158. }
  159. // Password
  160. [Fact]
  161. public void PasswordWithEmptyNameThrows()
  162. {
  163. // Arrange
  164. HtmlHelper helper = HtmlHelperFactory.Create();
  165. // Act & Assert
  166. Assert.ThrowsArgumentNullOrEmptyString(() => helper.Password(String.Empty), "name");
  167. Assert.ThrowsArgumentNullOrEmptyString(() => helper.Password(null), "name");
  168. }
  169. [Fact]
  170. public void PasswordDictionaryOverridesImplicitParameters()
  171. {
  172. // Arrange
  173. HtmlHelper helper = HtmlHelperFactory.Create();
  174. // Act
  175. var html = helper.Password("foo", "Some Value", new { type = "fooType" });
  176. // Assert
  177. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""fooType"" value=""Some Value"" />", html.ToHtmlString());
  178. }
  179. [Fact]
  180. public void PasswordExplicitParametersOverrideDictionary()
  181. {
  182. // Arrange
  183. HtmlHelper helper = HtmlHelperFactory.Create();
  184. // Act
  185. var html = helper.Password("foo", "Some Value", new { value = "Another Value", name = "bar" });
  186. // Assert
  187. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" value=""Some Value"" />", html.ToHtmlString());
  188. }
  189. [Fact]
  190. public void PasswordWithExplicitValue()
  191. {
  192. // Arrange
  193. HtmlHelper helper = HtmlHelperFactory.Create();
  194. // Act
  195. var html = helper.Password("foo", "DefaultFoo", (object)null);
  196. // Assert
  197. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" value=""DefaultFoo"" />", html.ToHtmlString());
  198. }
  199. [Fact]
  200. public void PasswordWithExplicitValueAndAttributesDictionary()
  201. {
  202. // Arrange
  203. HtmlHelper helper = HtmlHelperFactory.Create();
  204. // Act
  205. var html = helper.Password("foo", "DefaultFoo", new { baz = "BazValue" });
  206. // Assert
  207. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""password"" value=""DefaultFoo"" />",
  208. html.ToHtmlString());
  209. }
  210. [Fact]
  211. public void PasswordWithExplicitValueAndAttributesObject()
  212. {
  213. // Arrange
  214. HtmlHelper helper = HtmlHelperFactory.Create();
  215. // Act
  216. var html = helper.Password("foo", "DefaultFoo", new Dictionary<string, object> { { "baz", "BazValue" } });
  217. // Assert
  218. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""password"" value=""DefaultFoo"" />",
  219. html.ToHtmlString());
  220. }
  221. [Fact]
  222. public void PasswordWithExplicitValueNull()
  223. {
  224. // Arrange
  225. HtmlHelper helper = HtmlHelperFactory.Create();
  226. // Act
  227. var html = helper.Password("foo", value: (string)null);
  228. // Assert
  229. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  230. }
  231. [Fact]
  232. public void PasswordWithImplicitValue()
  233. {
  234. // Arrange
  235. HtmlHelper helper = HtmlHelperFactory.Create();
  236. // Act
  237. var html = helper.Password("foo");
  238. // Assert
  239. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  240. }
  241. [Fact]
  242. public void PasswordWithImplicitValueAndAttributesDictionary()
  243. {
  244. // Arrange
  245. HtmlHelper helper = HtmlHelperFactory.Create();
  246. // Act
  247. var html = helper.Password("foo", null, _attributesDictionary);
  248. // Assert
  249. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  250. }
  251. [Fact]
  252. public void PasswordWithImplicitValueAndAttributesDictionaryReturnsEmptyValueIfNotFound()
  253. {
  254. // Arrange
  255. HtmlHelper helper = HtmlHelperFactory.Create();
  256. // Act
  257. var html = helper.Password("keyNotFound", null, _attributesDictionary);
  258. // Assert
  259. Assert.Equal(@"<input baz=""BazValue"" id=""keyNotFound"" name=""keyNotFound"" type=""password"" />", html.ToHtmlString());
  260. }
  261. [Fact]
  262. public void PasswordWithImplicitValueAndAttributesObject()
  263. {
  264. // Arrange
  265. HtmlHelper helper = HtmlHelperFactory.Create();
  266. // Act
  267. var html = helper.Password("foo", null, _attributesObject);
  268. // Assert
  269. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""password"" />", html.ToHtmlString());
  270. }
  271. [Fact]
  272. public void PasswordWithNameAndValue()
  273. {
  274. // Arrange
  275. HtmlHelper helper = HtmlHelperFactory.Create();
  276. // Act
  277. var html = helper.Password("foo", "fooValue");
  278. // Assert
  279. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""password"" value=""fooValue"" />", html.ToHtmlString());
  280. }
  281. [Fact]
  282. public void PasswordWithNullNameThrows()
  283. {
  284. // Arrange
  285. HtmlHelper helper = HtmlHelperFactory.Create();
  286. // Act & Assert
  287. Assert.ThrowsArgumentNullOrEmptyString(() => helper.Password(null), "name");
  288. Assert.ThrowsArgumentNullOrEmptyString(() => helper.Password(String.Empty), "name");
  289. }
  290. [Fact]
  291. public void PasswordAddsUnobtrusiveValidationAttributes()
  292. {
  293. // Arrange
  294. const string fieldName = "name";
  295. var modelStateDictionary = new ModelStateDictionary();
  296. var validationHelper = new ValidationHelper(new Mock<HttpContextBase>().Object, modelStateDictionary);
  297. HtmlHelper helper = HtmlHelperFactory.Create(modelStateDictionary, validationHelper);
  298. // Act
  299. validationHelper.RequireField(fieldName, "Please specify a valid Name.");
  300. validationHelper.Add(fieldName, Validator.StringLength(30, errorMessage: "Name cannot exceed {0} characters"));
  301. var html = helper.Password(fieldName, value: null, htmlAttributes: new Dictionary<string, object> { { "data-some-val", "5" } });
  302. // Assert
  303. Assert.Equal(@"<input 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"" type=""password"" />",
  304. html.ToString());
  305. }
  306. //Input
  307. [Fact]
  308. public void TextBoxDictionaryOverridesImplicitValues()
  309. {
  310. // Arrange
  311. HtmlHelper helper = HtmlHelperFactory.Create();
  312. // Act
  313. var html = helper.TextBox("foo", "DefaultFoo", new { type = "fooType" });
  314. // Assert
  315. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""fooType"" value=""DefaultFoo"" />", html.ToHtmlString());
  316. }
  317. [Fact]
  318. public void TextBoxExplicitParametersOverrideDictionaryValues()
  319. {
  320. // Arrange
  321. HtmlHelper helper = HtmlHelperFactory.Create();
  322. // Act
  323. var html = helper.TextBox("foo", "DefaultFoo", new { value = "Some other value" });
  324. // Assert
  325. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""text"" value=""DefaultFoo"" />", html.ToHtmlString());
  326. }
  327. [Fact]
  328. public void TextBoxWithDotReplacementForId()
  329. {
  330. // Arrange
  331. HtmlHelper helper = HtmlHelperFactory.Create();
  332. // Act
  333. var html = helper.TextBox("foo.bar.baz", null);
  334. // Assert
  335. Assert.Equal(@"<input id=""foo_bar_baz"" name=""foo.bar.baz"" type=""text"" value="""" />", html.ToHtmlString());
  336. }
  337. [Fact]
  338. public void TextBoxWithEmptyNameThrows()
  339. {
  340. // Arrange
  341. HtmlHelper helper = HtmlHelperFactory.Create();
  342. // Act & Assert
  343. Assert.ThrowsArgumentNullOrEmptyString(() => helper.TextBox(null), "name");
  344. Assert.ThrowsArgumentNullOrEmptyString(() => helper.TextBox(String.Empty), "name");
  345. }
  346. [Fact]
  347. public void TextBoxWithExplicitValue()
  348. {
  349. // Arrange
  350. HtmlHelper helper = HtmlHelperFactory.Create();
  351. // Act
  352. var html = helper.TextBox("foo", "DefaultFoo", (object)null);
  353. // Assert
  354. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""text"" value=""DefaultFoo"" />", html.ToHtmlString());
  355. }
  356. [Fact]
  357. public void TextBoxWithExplicitValueAndAttributesDictionary()
  358. {
  359. // Arrange
  360. HtmlHelper helper = HtmlHelperFactory.Create();
  361. // Act
  362. var html = helper.TextBox("foo", "DefaultFoo", _attributesDictionary);
  363. // Assert
  364. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""text"" value=""DefaultFoo"" />", html.ToHtmlString());
  365. }
  366. [Fact]
  367. public void TextBoxWithExplicitValueAndAttributesObject()
  368. {
  369. // Arrange
  370. HtmlHelper helper = HtmlHelperFactory.Create();
  371. // Act
  372. var html = helper.TextBox("foo", "DefaultFoo", _attributesObject);
  373. // Assert
  374. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""text"" value=""DefaultFoo"" />", html.ToHtmlString());
  375. }
  376. [Fact]
  377. public void TextBoxWithExplicitValueNull()
  378. {
  379. // Arrange
  380. var modelState = new ModelStateDictionary();
  381. modelState.SetModelValue("foo", "fooModelValue");
  382. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  383. // Act
  384. var html = helper.TextBox("foo", (string)null /* value */, (object)null);
  385. // Assert
  386. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""text"" value=""fooModelValue"" />", html.ToHtmlString());
  387. }
  388. [Fact]
  389. public void TextBoxWithImplicitValue()
  390. {
  391. // Arrange
  392. var modelState = new ModelStateDictionary();
  393. modelState.SetModelValue("foo", "fooModelValue");
  394. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  395. // Act
  396. var html = helper.TextBox("foo");
  397. // Assert
  398. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""text"" value=""fooModelValue"" />", html.ToHtmlString());
  399. }
  400. [Fact]
  401. public void TextBoxWithImplicitValueAndAttributesDictionary()
  402. {
  403. // Arrange
  404. var modelState = new ModelStateDictionary();
  405. modelState.SetModelValue("foo", "fooModelValue");
  406. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  407. // Act
  408. var html = helper.TextBox("foo", null, _attributesDictionary);
  409. // Assert
  410. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""text"" value=""fooModelValue"" />", html.ToHtmlString());
  411. }
  412. [Fact]
  413. public void TextBoxWithImplicitValueAndAttributesDictionaryReturnsEmptyValueIfNotFound()
  414. {
  415. // Arrange
  416. var modelState = new ModelStateDictionary();
  417. modelState.SetModelValue("foo", "fooModelValue");
  418. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  419. // Act
  420. var html = helper.TextBox("keyNotFound", null, _attributesDictionary);
  421. // Assert
  422. Assert.Equal(@"<input baz=""BazValue"" id=""keyNotFound"" name=""keyNotFound"" type=""text"" value="""" />", html.ToHtmlString());
  423. }
  424. [Fact]
  425. public void TextBoxWithImplicitValueAndAttributesObject()
  426. {
  427. // Arrange
  428. var modelState = new ModelStateDictionary();
  429. modelState.SetModelValue("foo", "fooModelValue");
  430. HtmlHelper helper = HtmlHelperFactory.Create(modelState);
  431. // Act
  432. var html = helper.TextBox("foo", null, _attributesObject);
  433. // Assert
  434. Assert.Equal(@"<input baz=""BazValue"" id=""foo"" name=""foo"" type=""text"" value=""fooModelValue"" />", html.ToHtmlString());
  435. }
  436. [Fact]
  437. public void TextBoxWithNameAndValue()
  438. {
  439. // Arrange
  440. HtmlHelper helper = HtmlHelperFactory.Create();
  441. // Act
  442. var html = helper.TextBox("foo", "fooValue");
  443. // Assert
  444. Assert.Equal(@"<input id=""foo"" name=""foo"" type=""text"" value=""fooValue"" />", html.ToHtmlString());
  445. }
  446. [Fact]
  447. public void TextBoxAddsUnobtrusiveValidationAttributes()
  448. {
  449. // Arrange
  450. const string fieldName = "name";
  451. var modelStateDictionary = new ModelStateDictionary();
  452. var validationHelper = new ValidationHelper(new Mock<HttpContextBase>().Object, modelStateDictionary);
  453. HtmlHelper helper = HtmlHelperFactory.Create(modelStateDictionary, validationHelper);
  454. // Act
  455. validationHelper.RequireField(fieldName, "Please specify a valid Name.");
  456. validationHelper.Add(fieldName, Validator.StringLength(30, errorMessage: "Name cannot exceed {0} characters"));
  457. var html = helper.TextBox(fieldName, value: null, htmlAttributes: new Dictionary<string, object> { { "data-some-val", "5" } });
  458. // Assert
  459. Assert.Equal(@"<input 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"" type=""text"" value="""" />",
  460. html.ToString());
  461. }
  462. }
  463. }