Consolidated ASP Classic MVC framework from best components
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

191 lignes
5.9KB

  1. <%
  2. Class PlainRunnerTheme
  3. Public Sub Render(ByRef objRunner)
  4. %>
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <meta charset="utf-8">
  9. <title>MVC-Starter Test Runner</title>
  10. <style type="text/css">
  11. body {
  12. font-family: Arial, sans-serif;
  13. margin: 24px;
  14. color: #1f2933;
  15. background: #f7fafc;
  16. }
  17. h1 {
  18. margin-bottom: 8px;
  19. }
  20. .summary {
  21. margin-bottom: 16px;
  22. padding: 12px 16px;
  23. background: #ffffff;
  24. border: 1px solid #d9e2ec;
  25. }
  26. .page {
  27. margin-bottom: 16px;
  28. padding: 12px 16px;
  29. border: 1px solid #bcccdc;
  30. background: #ffffff;
  31. }
  32. .page.pass {
  33. border-left: 6px solid #2f855a;
  34. }
  35. .page.fail {
  36. border-left: 6px solid #c53030;
  37. }
  38. .module {
  39. margin-top: 12px;
  40. padding-top: 8px;
  41. border-top: 1px solid #e2e8f0;
  42. }
  43. .test {
  44. margin: 6px 0;
  45. }
  46. .pass-text {
  47. color: #2f855a;
  48. }
  49. .fail-text {
  50. color: #c53030;
  51. }
  52. code {
  53. background: #edf2f7;
  54. padding: 2px 4px;
  55. }
  56. </style>
  57. </head>
  58. <body>
  59. <h1>MVC-Starter Test Runner</h1>
  60. <p>Dev-only aspunit runner for the separate <code>tests/</code> IIS application.</p>
  61. <div id="summary" class="summary">Running tests...</div>
  62. <div id="results"></div>
  63. <script type="text/javascript">
  64. (function() {
  65. var pages = [<%= GetPagesAsJSArray(objRunner.Pages) %>];
  66. var summaryEl = document.getElementById("summary");
  67. var resultsEl = document.getElementById("results");
  68. var totals = { pages: 0, passedPages: 0, tests: 0, passedTests: 0 };
  69. function escapeHtml(value) {
  70. return String(value)
  71. .replace(/&/g, "&amp;")
  72. .replace(/</g, "&lt;")
  73. .replace(/>/g, "&gt;")
  74. .replace(/"/g, "&quot;")
  75. .replace(/'/g, "&#39;");
  76. }
  77. function renderModule(module) {
  78. var testsHtml = module.tests.map(function(test) {
  79. return '<div class="test ' + (test.passed ? 'pass-text' : 'fail-text') + '">' +
  80. '<strong>' + escapeHtml(test.name) + ':</strong> ' +
  81. escapeHtml(test.description || '') +
  82. '</div>';
  83. }).join("");
  84. return '<div class="module">' +
  85. '<div><strong>' + escapeHtml(module.name) + '</strong> (' + module.passCount + '/' + module.testCount + ')</div>' +
  86. testsHtml +
  87. '</div>';
  88. }
  89. function renderPage(page, data, error) {
  90. var wrapper = document.createElement("div");
  91. wrapper.className = "page " + (error || !data.passed ? "fail" : "pass");
  92. if (error) {
  93. wrapper.innerHTML =
  94. '<div><strong>' + escapeHtml(page) + '</strong></div>' +
  95. '<div class="fail-text">' + escapeHtml(error) + '</div>';
  96. resultsEl.appendChild(wrapper);
  97. return;
  98. }
  99. wrapper.innerHTML =
  100. '<div><strong>' + escapeHtml(page) + '</strong> - ' +
  101. (data.passed ? '<span class="pass-text">PASS</span>' : '<span class="fail-text">FAIL</span>') +
  102. ' (' + data.passCount + '/' + data.testCount + ')</div>' +
  103. data.modules.map(renderModule).join("");
  104. resultsEl.appendChild(wrapper);
  105. }
  106. function updateSummary(done) {
  107. summaryEl.innerHTML =
  108. '<strong>Pages:</strong> ' + totals.passedPages + '/' + totals.pages +
  109. ' &nbsp; <strong>Tests:</strong> ' + totals.passedTests + '/' + totals.tests +
  110. (done ? '' : ' &nbsp; <em>Running...</em>');
  111. }
  112. function next(index) {
  113. if (index >= pages.length) {
  114. updateSummary(true);
  115. return;
  116. }
  117. var page = pages[index];
  118. fetch(page + '?task=test', { credentials: 'same-origin' })
  119. .then(function(response) {
  120. if (!response.ok) {
  121. throw new Error('HTTP ' + response.status + ' while loading ' + page);
  122. }
  123. return response.json();
  124. })
  125. .then(function(data) {
  126. totals.pages += 1;
  127. totals.tests += data.testCount;
  128. totals.passedTests += data.passCount;
  129. if (data.passed) {
  130. totals.passedPages += 1;
  131. }
  132. renderPage(page, data, null);
  133. updateSummary(false);
  134. next(index + 1);
  135. })
  136. .catch(function(error) {
  137. totals.pages += 1;
  138. renderPage(page, null, error.message);
  139. updateSummary(false);
  140. next(index + 1);
  141. });
  142. }
  143. updateSummary(false);
  144. next(0);
  145. })();
  146. </script>
  147. </body>
  148. </html>
  149. <%
  150. End Sub
  151. Private Function GetPagesAsJSArray(ByRef pages)
  152. Dim strReturn, i
  153. strReturn = ""
  154. For i = 0 To (pages.Count - 1)
  155. strReturn = strReturn & """" & Replace(pages.Item(i), """", "\""") & """"
  156. If i < (pages.Count - 1) Then
  157. strReturn = strReturn & ", "
  158. End If
  159. Next
  160. GetPagesAsJSArray = strReturn
  161. End Function
  162. End Class
  163. %>

Powered by TurnKey Linux.