Consolidated ASP Classic MVC framework from best components
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

191 wiersze
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.