PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/ExoWeb.UnitTests/Templates/MicrosoftAjax/ToggleTests.cs

https://github.com/vc3/ExoWeb
C# | 162 lines | 149 code | 12 blank | 1 comment | 0 complexity | 2f9cc7b043e98e206fedd04073b40c6e MD5 | raw file
  1. using System;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using FluentAssertions;
  4. using System.Text.RegularExpressions;
  5. using ExoModel.UnitTests.Models;
  6. using ExoWeb.UnitTests.Models.Requests;
  7. namespace ExoWeb.UnitTests.Templates.MicrosoftAjax
  8. {
  9. [TestClass]
  10. [TestModel(Name = "Requests")]
  11. public class ToggleTests : TestModelBase
  12. {
  13. private const string linkScript = "<script type='text/javascript'>$exoweb({ domReady: function() { Sys.Application.linkElement(document.getElementById('__id__'), document.getElementById('__id__')); } });</script>";
  14. [TestMethod]
  15. public void SimpleShowBehaviorWithNoneDisplayStyleRemoved()
  16. {
  17. TestRequest(request =>
  18. {
  19. request.User = new User();
  20. request.Description = "Enter description here...";
  21. }, "<div class='sys-template' sys:attach='dataview' dataview:data='{~ context.model.request, source=window }'>" +
  22. "<div style='display:none;' sys:attach='toggle' toggle:on='{binding Description}'>" +
  23. "<span>{binding Description}</span>" +
  24. "</div>" +
  25. "</div>",
  26. "<div data-sys-attach='dataview' data-dataview-data='{~ context.model.request, source=window }' data-sys-tmplidx='0' id='__id__' class='sys-ignore'>" +
  27. "<!--item:s#-->" +
  28. "<div data-sys-attach='toggle' data-toggle-on='{binding Description}' class='toggle-on'>" +
  29. "<span data-sys-innerhtml='{binding Description}'>Enter description here...</span>" +
  30. "</div>" +
  31. "<!--/item:s#-->" +
  32. "</div>");
  33. }
  34. [TestMethod]
  35. public void SimpleHideBehavior()
  36. {
  37. TestRequest(request =>
  38. {
  39. request.User = new User();
  40. request.Description = "Enter description here...";
  41. }, "<div class='sys-template' sys:attach='dataview' dataview:data='{~ context.model.request, source=window }'>" +
  42. "<div sys:attach='toggle' toggle:on='{binding Description}' toggle:action='hide'>" +
  43. "<span>{binding Description}</span>" +
  44. "</div>" +
  45. "</div>",
  46. "<div data-sys-attach='dataview' data-dataview-data='{~ context.model.request, source=window }' data-sys-tmplidx='0' id='__id__' class='sys-ignore'>" +
  47. "<!--item:s#-->" +
  48. "<div data-sys-attach='toggle' data-toggle-on='{binding Description}' data-toggle-action='hide' style='display:none;' class='toggle-on'>" +
  49. "<span data-sys-innerhtml='{binding Description}'>Enter description here...</span>" +
  50. "</div>" +
  51. "<!--/item:s#-->" +
  52. "</div>");
  53. }
  54. [TestMethod]
  55. public void SimpleHideBehaviorWithStyle()
  56. {
  57. TestRequest(request =>
  58. {
  59. request.User = new User();
  60. request.Description = "Enter description here...";
  61. }, "<div class='sys-template' sys:attach='dataview' dataview:data='{~ context.model.request, source=window }'>" +
  62. "<div sys:attach='toggle' toggle:on='{binding Description}' toggle:action='hide' style='border:1'>" +
  63. "<span>{binding Description}</span>" +
  64. "</div>" +
  65. "</div>",
  66. "<div data-sys-attach='dataview' data-dataview-data='{~ context.model.request, source=window }' data-sys-tmplidx='0' id='__id__' class='sys-ignore'>" +
  67. "<!--item:s#-->" +
  68. "<div style='display:none; border:1' data-sys-attach='toggle' data-toggle-on='{binding Description}' data-toggle-action='hide' class='toggle-on'>" +
  69. "<span data-sys-innerhtml='{binding Description}'>Enter description here...</span>" +
  70. "</div>" +
  71. "<!--/item:s#-->" +
  72. "</div>");
  73. }
  74. [TestMethod]
  75. public void SimpleAddClassBehavior()
  76. {
  77. TestRequest(request =>
  78. {
  79. request.User = new User();
  80. request.Description = "Enter description here...";
  81. }, "<div class='sys-template' sys:attach='dataview' dataview:data='{~ context.model.request, source=window }'>" +
  82. "<div sys:attach='toggle' toggle:on='{binding Description}' toggle:action='addClass' toggle:class='active'>" +
  83. "<span>{binding Description}</span>" +
  84. "</div>" +
  85. "</div>",
  86. "<div data-sys-attach='dataview' data-dataview-data='{~ context.model.request, source=window }' data-sys-tmplidx='0' id='__id__' class='sys-ignore'>" +
  87. "<!--item:s#-->" +
  88. "<div data-sys-attach='toggle' data-toggle-on='{binding Description}' data-toggle-class='active' data-toggle-action='addClass' class='active toggle-on'>" +
  89. "<span data-sys-innerhtml='{binding Description}'>Enter description here...</span>" +
  90. "</div>" +
  91. "<!--/item:s#-->" +
  92. "</div>");
  93. }
  94. [TestMethod]
  95. public void SimpleAddClassBehaviorWithExistingClass()
  96. {
  97. TestRequest(request =>
  98. {
  99. request.User = new User();
  100. request.Description = "Enter description here...";
  101. }, "<div class='sys-template' sys:attach='dataview' dataview:data='{~ context.model.request, source=window }'>" +
  102. "<div sys:attach='toggle' class='foo' toggle:on='{binding Description}' toggle:action='addClass' toggle:class='active'>" +
  103. "<span>{binding Description}</span>" +
  104. "</div>" +
  105. "</div>",
  106. "<div data-sys-attach='dataview' data-dataview-data='{~ context.model.request, source=window }' data-sys-tmplidx='0' id='__id__' class='sys-ignore'>" +
  107. "<!--item:s#-->" +
  108. "<div data-sys-attach='toggle' data-toggle-on='{binding Description}' data-toggle-class='active' data-toggle-action='addClass' class='foo active toggle-on'>" +
  109. "<span data-sys-innerhtml='{binding Description}'>Enter description here...</span>" +
  110. "</div>" +
  111. "<!--/item:s#-->" +
  112. "</div>");
  113. }
  114. [TestMethod]
  115. public void SimpleAddClassBehaviorWithExistingBlankClass()
  116. {
  117. TestRequest(request =>
  118. {
  119. request.User = new User();
  120. request.Description = "Enter description here...";
  121. }, "<div class='sys-template' sys:attach='dataview' dataview:data='{~ context.model.request, source=window }'>" +
  122. "<div sys:attach='toggle' class='' toggle:on='{binding Description}' toggle:action='addClass' toggle:class='active'>" +
  123. "<span>{binding Description}</span>" +
  124. "</div>" +
  125. "</div>",
  126. "<div data-sys-attach='dataview' data-dataview-data='{~ context.model.request, source=window }' data-sys-tmplidx='0' id='__id__' class='sys-ignore'>" +
  127. "<!--item:s#-->" +
  128. "<div data-sys-attach='toggle' data-toggle-on='{binding Description}' data-toggle-class='active' data-toggle-action='addClass' class='active toggle-on'>" +
  129. "<span data-sys-innerhtml='{binding Description}'>Enter description here...</span>" +
  130. "</div>" +
  131. "<!--/item:s#-->" +
  132. "</div>");
  133. }
  134. #region Helpers
  135. void TestRequest(Action<Request> action, string template, string expected)
  136. {
  137. ExoWeb.Model(new { request = ExoWeb.Query<Request>((string)null) }, action);
  138. string output = Accessors.Render(template);
  139. template = template.Replace("\"", "'");
  140. output = Regex.Replace(Regex.Replace(output.Replace("\"", "'"), "exo[0-9]+", "__id__"), "item:s\\d*\\-\\-", "item:s#--");
  141. output.Should().Match(
  142. // template markup converted into an element embedded to be used as a Sys.UI.Template
  143. Regex.Replace(template, "sys\\-template(\"|')[^\\>]*\\>", "sys-template$1 id='__id__'>") +
  144. expected +
  145. linkScript
  146. );
  147. }
  148. #endregion
  149. }
  150. }