Consolidated ASP Classic MVC framework from best components
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

395 lines
11KB

  1. <%
  2. Class ASPUnitUIModern
  3. Public Sub Render(ByRef objRunner) %>
  4. <html>
  5. <head>
  6. <title>ASPUnit</title>
  7. <link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet">
  8. <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/3.2.1/css/font-awesome.min.css" rel="stylesheet">
  9. <link href='//fonts.googleapis.com/css?family=Open+Sans:400,600,700' rel='stylesheet' type='text/css'>
  10. <style type="text/css">
  11. body {
  12. background-color: #ECF0F1;
  13. padding-top: 280px;
  14. font-family: 'Open Sans', sans-serif;
  15. -webkit-font-smoothing: antialiased;
  16. }
  17. h1, h2, h3, h4, h5, h6 {
  18. font-family: 'Open Sans', sans-serif;
  19. }
  20. a {
  21. color: #95a5a6;
  22. transition: all 0.25s;
  23. }
  24. a:hover {
  25. color: #fff;
  26. text-decoration: none;
  27. }
  28. .project-name {
  29. color: #fff !important;
  30. }
  31. #footer .project-name {
  32. margin-top: 0;
  33. margin-bottom: 0;
  34. }
  35. #container {
  36. position: relative;
  37. height: auto;
  38. min-height: 100%;
  39. }
  40. #header {
  41. color: #ecf0f1;
  42. background-color: #13202c;
  43. transition: all 0.5s;
  44. position: fixed;
  45. left: 0;
  46. right: 0;
  47. top: 0;
  48. z-index: 1000;
  49. text-shadow: 0px 2px 1px #000;
  50. }
  51. #header a {
  52. color: #ecf0f1;
  53. }
  54. #header a:active {
  55. position: relative;
  56. top: 1px;
  57. text-shadow: 0px 1px 1px #000;
  58. }
  59. #header.affix {
  60. padding-top: 0;
  61. padding-bottom: 0.2em;
  62. }
  63. #main {
  64. padding-bottom: 12em;
  65. }
  66. #footer {
  67. position: absolute;
  68. bottom: 0;
  69. width: 100%;
  70. padding-top: 2em;
  71. padding-bottom: 2em;
  72. margin-top: 4em;
  73. color: #95a5a6;
  74. background-color: #13202c;
  75. }
  76. .progress-loading {
  77. box-shadow: 0 2px 6px RGBA(0,0,0,0.25);
  78. border-bottom: 2px #444 solid;
  79. border-radius: 0 0 2px 2px;
  80. }
  81. .pages-overview {
  82. position: relative;
  83. }
  84. .pages-status {
  85. display: inline-block;
  86. }
  87. .pages-options {
  88. display: inline-block;
  89. position: absolute;
  90. right: 0;
  91. }
  92. .page-report .page-overview {
  93. color: #7F8C8D;
  94. }
  95. .page-report .page-overview small {
  96. color: #95A5A6;
  97. }
  98. .page-module {
  99. margin-bottom: 1em;
  100. box-shadow: 0 2px 6px RGBA(0,0,0,0.25);
  101. }
  102. .page-module .page-module-header {
  103. color: #fff;
  104. padding: 1em 2em;
  105. }
  106. .page-module-pass .page-module-header {
  107. background-color: #2ECC71;
  108. border: 1px #27AE60 solid;
  109. }
  110. .page-module-fail .page-module-header {
  111. background-color: #E74C3C;
  112. border: 1px #C0392B solid;
  113. }
  114. .page-module-name {
  115. font-weight: bold;
  116. margin: 0;
  117. }
  118. .page-module-tests {
  119. border-left: 1px #95A5A6 solid;
  120. border-right: 1px #95A5A6 solid;
  121. border-bottom: 3px #95A5A6 solid;
  122. border-radius: 0 0 3px 3px;
  123. }
  124. .page-module-test {
  125. padding: 0.8em 2em;
  126. background-color: #fff;
  127. margin-bottom: 1px;
  128. position: relative;
  129. }
  130. .page-module-test-icon {
  131. position: absolute;
  132. top: 0.5em;
  133. left: -11px;
  134. color: #fff;
  135. width: 22px;
  136. height: 22px;
  137. padding: 3px 4px;
  138. border-radius: 11px;
  139. }
  140. .page-module-test-icon-pass {
  141. box-shadow: 0 3px 0 #27AE60, 0 6px 3px RGBA(0,0,0,0.25);
  142. background-color: #2ECC71;
  143. }
  144. .page-module-test-icon-fail {
  145. box-shadow: 0 3px 0 #C0392B, 0 6px 3px RGBA(0,0,0,0.25);
  146. background-color: #E74C3C;
  147. }
  148. .page-module-test-name {
  149. font-weight: bold;
  150. }
  151. .page-module-test-fail .page-module-test-name, .page-module-test-fail .page-module-test-description {
  152. color: #C0392B;
  153. }
  154. @media (max-width: 768px) {
  155. body {
  156. padding-top: 260px;
  157. }
  158. #main {
  159. padding-bottom: 15em;
  160. }
  161. .pages-options {
  162. display: inline-block;
  163. position: relative;
  164. }
  165. }
  166. </style>
  167. </head>
  168. <body>
  169. <div id="container">
  170. <div id="header" class="jumbotron" data-spy="affix" data-offset-top="10">
  171. <div class="container">
  172. <h1 class="project-name"><strong>ASP</strong>Unit</h1>
  173. <div class="pages-overview">
  174. <div class="pages-status"></div>
  175. <div class="pages-options">
  176. <div class="pages-option-passed-tests">
  177. <a href="#" class="action-hide-passed"><i class="glyphicon glyphicon-remove-sign"></i> Hide Passed Tests</a>
  178. </div>
  179. </div>
  180. <div class="progress progress-striped progress-loading">
  181. <div class="progress-bar progress-bar-success" role="progressbar"></div>
  182. <div class="progress-bar progress-bar-danger" role="progressbar"></div>
  183. </div>
  184. <div class="alert alert-danger progress-error" style="display: none;"></div>
  185. </div>
  186. </div>
  187. </div>
  188. <div id="main">
  189. <div class="page-reports"></div>
  190. </div>
  191. <div id="footer">
  192. <div class="container">
  193. <div class="row">
  194. <div class="col-md-12">
  195. <h3 class="project-name"><strong>ASP</strong>Unit</h3>
  196. </div>
  197. </div>
  198. <div class="row">
  199. <div class="col-md-4">
  200. Classic ASP Unit Testing Library<br />
  201. </div>
  202. <div class="col-md-4">
  203. <ul class="list-unstyled">
  204. <li><a href="https://github.com/rpeterclark/aspunit/"><i class="icon-github"></i> GitHub Project</a></li>
  205. <li><a href="https://github.com/rpeterclark/aspunit/wiki/"><i class="icon-book"></i> Documentation</a></li>
  206. <li><a href="https://github.com/rpeterclark/aspunit/issues/"><i class="icon-bug"></i> Issues</a></li>
  207. </ul>
  208. </div>
  209. <div class="col-md-4">
  210. MIT Licensed
  211. </div>
  212. </div>
  213. </div>
  214. </div>
  215. </div>
  216. <script id="page-status-template" type="text/x-handlebars-template">
  217. {{pageNumber}} of {{pageCount}} pages tested, {{passCount}} of {{testCount}} tests passed
  218. </script>
  219. <script id="page-report-template" type="text/x-handlebars-template">
  220. <div class="page-report container">
  221. <div class="page-overview">
  222. <h3>{{page}} <small>{{passCount}} of {{testCount}} tests passed</small></h3>
  223. </div>
  224. {{#each modules}}
  225. <div class="page-module page-module-{{#if passed}}pass{{else}}fail{{/if}}">
  226. <div class="page-module-header">
  227. <h4 class="page-module-name">{{name}}</h4>
  228. {{passCount}} of {{testCount}} tests passed, {{failCount}} failed, completed in {{duration}} milliseconds
  229. </div>
  230. <div class="page-module-tests">
  231. {{#each tests}}
  232. <div class="page-module-test page-module-test-{{#if passed}}pass{{else}}fail{{/if}}">
  233. {{#if passed}}
  234. <i class="page-module-test-icon page-module-test-icon-pass glyphicon glyphicon-ok"></i>
  235. {{else}}
  236. <i class="page-module-test-icon page-module-test-icon-fail glyphicon glyphicon-remove"></i>
  237. {{/if}}
  238. <span class="page-module-test-name">{{name}}:</span>
  239. <span class="page-module-test-description">{{description}}</span>
  240. </div>
  241. {{/each}}
  242. </div>
  243. </div>
  244. {{/each}}
  245. </div>
  246. </script>
  247. <script id="page-error-template" type="text/x-handlebars-template">
  248. <div class="page-report container">
  249. <div class="page-module page-module-fail">
  250. <div class="page-module-header">
  251. <h4 class="page-module-name">{{page}}</h4>
  252. </div>
  253. <div class="page-module-tests">
  254. <div class="page-module-test page-module-test-fail">
  255. <i class="page-module-test-icon page-module-test-icon-fail glyphicon glyphicon-remove"></i>
  256. <span class="page-module-test-name">{{error}}{{#if description}}:{{/if}}</span>
  257. <span class="page-module-test-description">{{description}}</span>
  258. </div>
  259. </div>
  260. </div>
  261. </div>
  262. </div>
  263. </script>
  264. <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
  265. <script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
  266. <script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0/handlebars.min.js"></script>
  267. <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.0/js/bootstrap.min.js"></script>
  268. <%= objRunner.RenderJSLib() %>
  269. <script>
  270. $(function() {
  271. var successCount = 0;
  272. var pageReportsContainer = $('.page-reports');
  273. var pageReportTemplate = Handlebars.compile($('#page-report-template').html());
  274. var pageErrorTemplate = Handlebars.compile($('#page-error-template').html());
  275. var pageStatusContainer = $('.pages-status');
  276. var pageStatusTemplate = Handlebars.compile($('#page-status-template').html());
  277. var pageReportsProgress = $('.progress-loading');
  278. var progressError = $('.progress-error');
  279. ASPUnit.onStart(function() {
  280. pageReportsProgress.addClass('active');
  281. });
  282. ASPUnit.onPageSuccess(function(details) {
  283. successCount++;
  284. $(pageReportTemplate(details)).appendTo(pageReportsContainer).hide().fadeIn();
  285. });
  286. ASPUnit.onPageFail(function(details) {
  287. $(pageErrorTemplate(details)).appendTo(pageReportsContainer);
  288. });
  289. ASPUnit.onPageFinish(function(details) {
  290. var status = $.extend(details.status, {pageNumber: (details.status.pageIndex + 1)});
  291. pageStatusContainer.html(pageStatusTemplate(status));
  292. var progressPct = (status.pageNumber / status.pageCount);
  293. var passPct = (status.passCount / status.testCount) * (successCount / status.pageNumber);
  294. var failPct = (1 - passPct);
  295. pageReportsProgress.find('.progress-bar-success').css({"width": ((passPct * 100) * progressPct) + "%"})
  296. pageReportsProgress.find('.progress-bar-danger').css({"width": ((failPct * 100) * progressPct) + "%"})
  297. });
  298. ASPUnit.onFinish(function() {
  299. pageReportsProgress.removeClass('active');
  300. });
  301. $(document).on('click', '.action-hide-passed', function(e) {
  302. e.preventDefault();
  303. var $el = $(e.target);
  304. if ($el.hasClass('active')) {
  305. $el.removeClass('active').html('<i class="glyphicon glyphicon-remove-sign"></i> Hide Passed Tests</a>');
  306. showPassedTests();
  307. } else {
  308. $el.addClass('active').html('<i class="glyphicon glyphicon-ok-sign"></i> Show Passed Tests</a>');
  309. hidePassedTests();
  310. }
  311. });
  312. function hidePassedTests() {
  313. $('.page-report').each(function() {
  314. if ($(this).find('.page-module-test-fail').length > 0) {
  315. $(this).find('.page-module-pass').addClass('hidden');
  316. $(this).find('.page-module-test-pass').addClass('hidden');
  317. } else {
  318. $(this).addClass('hidden');
  319. }
  320. });
  321. }
  322. function showPassedTests() {
  323. $('.hidden').removeClass('hidden');
  324. }
  325. });
  326. </script>
  327. <%= objRunner.RenderJSInit() %>
  328. </body>
  329. </html> <%
  330. End Sub
  331. End Class
  332. %>

Powered by TurnKey Linux.