diff --git a/test-case-reporting/app.ts b/test-case-reporting/app.ts
index 09002ab82..c6290e32d 100644
--- a/test-case-reporting/app.ts
+++ b/test-case-reporting/app.ts
@@ -67,6 +67,24 @@ function extractPageInfo(req: express.Request): PageInfo {
};
}
+// We need the testRun index in mustache to give each collapsable
+// its own id.
+function enumerateTestRun(
+ testRun: TestRun,
+ index: number
+): {testRun: TestRun; index: number} {
+ return {testRun, index};
+}
+
+function lowerCaseStatus({status, ...rest}: TestRun): any {
+ return {
+ status: status.toLowerCase(),
+ ...rest,
+ };
+}
+
+app.use(express.static('static/css'));
+
app.get(['/', '/builds'], async (req, res) => {
const {json} = req.query;
@@ -96,7 +114,12 @@ app.get('/test-results/build/:buildNumber', async (req, res) => {
if (json) {
res.json({testRuns});
} else {
- res.send(render('test-run-list', {testRuns}));
+ res.send(
+ render('test-run-list', {
+ title: `Test Runs for Build #${buildNumber}`,
+ testRuns: testRuns.map(lowerCaseStatus).map(enumerateTestRun),
+ })
+ );
}
} catch (error) {
handleError(error, res);
@@ -113,10 +136,17 @@ app.get('/test-results/history/:testCaseId', async (req, res) => {
extractPageInfo(req)
);
+ const testCaseName = testRuns ? testRuns[0].testCase.name : '';
+
if (json) {
res.json({testRuns});
} else {
- res.send(render('test-run-list', {testRuns}));
+ res.send(
+ render('test-run-list', {
+ title: `Test Runs for test case "${testCaseName}"`,
+ testRuns: testRuns.map(lowerCaseStatus).map(enumerateTestRun),
+ })
+ );
}
} catch (error) {
handleError(error, res);
diff --git a/test-case-reporting/src/test_result_record.ts b/test-case-reporting/src/test_result_record.ts
index acebafbea..a17792d57 100644
--- a/test-case-reporting/src/test_result_record.ts
+++ b/test-case-reporting/src/test_result_record.ts
@@ -38,6 +38,7 @@ type QueryFunction = (q: QueryBuilder) => QueryBuilder;
*/
function getTestRunFromRow({
build_number,
+ build_started_at,
commit_sha,
job_number,
test_suite_type,
@@ -50,6 +51,7 @@ function getTestRunFromRow({
const build: Build = {
buildNumber: build_number,
commitSha: commit_sha,
+ startedAt: new Date(build_started_at),
};
const job: Job = {
@@ -286,9 +288,10 @@ export class TestResultRecord {
.offset(offset);
/* eslint-disable @typescript-eslint/camelcase */
- return dbBuilds.map(({commit_sha, build_number}) => ({
+ return dbBuilds.map(({commit_sha, build_number, started_at}) => ({
commitSha: commit_sha,
buildNumber: build_number,
+ startedAt: new Date(started_at),
}));
/* eslint-enable @typescript-eslint/camelcase */
}
diff --git a/test-case-reporting/static/build-list.html b/test-case-reporting/static/build-list.html
index 3692dc131..85ba88c2c 100644
--- a/test-case-reporting/static/build-list.html
+++ b/test-case-reporting/static/build-list.html
@@ -1,20 +1,25 @@
+
{{title}}
+
+
+
-
- {{#builds}}
- -
- Build {{buildNumber}}
-
- {{/builds}}
- {{^builds}}
-
- There are no builds.
-
- {{/builds}}
-
+
+
+
{{title}}
+ {{#builds}}
+
+ {{/builds}}
+ {{^builds}}
+ There are no builds.
+ {{/builds}}
+
+
diff --git a/test-case-reporting/static/css/custom.css b/test-case-reporting/static/css/custom.css
new file mode 100644
index 000000000..0cd41fd24
--- /dev/null
+++ b/test-case-reporting/static/css/custom.css
@@ -0,0 +1,30 @@
+/**
+ * Copyright 2020 The AMP HTML Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+.status-badge {
+ width: 60px;
+ padding: 2.5px;
+ display: inline-block;
+ font-family: sans-serif;
+ font-variant: small-caps;
+ color: white;
+ margin-right: 10px;
+ text-align: center;
+ font-weight: bold;
+}
+.status-pass { background-color: green; }
+.status-fail { background-color: orange; }
+.status-skip { background-color: gray; }
+.status-error { background-color: red; }
diff --git a/test-case-reporting/static/css/surface.min.css b/test-case-reporting/static/css/surface.min.css
new file mode 100644
index 000000000..c395e4713
--- /dev/null
+++ b/test-case-reporting/static/css/surface.min.css
@@ -0,0 +1,27 @@
+/**
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015 Ben Mildren
+ *
+ * Permission is hereby granted, free of charge,to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+@font-face{font-family:'Gentium Book Basic';font-style:normal;font-weight:400;src:local('Gentium Book Basic'),local('GentiumBookBasic'),url(https://fonts.gstatic.com/s/gentiumbookbasic/v7/IRFxB2matTxrjZt6a3FUnsQ6HWhO-urg7Zd40mHsFaI.ttf) format('truetype')}@font-face{font-family:'Gentium Book Basic';font-style:normal;font-weight:700;src:local('Gentium Book Basic Bold'),local('GentiumBookBasic-Bold'),url(https://fonts.gstatic.com/s/gentiumbookbasic/v7/T2vUYmWzlqUtgLYdlemGnbdiNC2EW_LVDR83j5uZVEA.ttf) format('truetype')}@font-face{font-family:Roboto;font-style:normal;font-weight:300;src:local('Roboto Light'),local('Roboto-Light'),url(https://fonts.gstatic.com/s/roboto/v16/Hgo13k-tfSpn0qi1SFdUfaCWcynf_cDxXwCLxiixG1c.ttf) format('truetype')}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local('Roboto'),local('Roboto-Regular'),url(https://fonts.gstatic.com/s/roboto/v16/zN7GBFwfMP4uA6AR0HCoLQ.ttf) format('truetype')}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:local('Roboto Medium'),local('Roboto-Medium'),url(https://fonts.gstatic.com/s/roboto/v16/RxZJdnzeo3R5zSexge8UUaCWcynf_cDxXwCLxiixG1c.ttf) format('truetype')}@font-face{font-family:Roboto;font-style:normal;font-weight:700;src:local('Roboto Bold'),local('Roboto-Bold'),url(https://fonts.gstatic.com/s/roboto/v16/d-6IYplOFocCacKzxwXSOKCWcynf_cDxXwCLxiixG1c.ttf) format('truetype')}body,html{width:100%}body{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline;box-sizing:border-box}.g--1,.g--10,.g--11,.g--12,.g--2,.g--3,.g--4,.g--5,.g--7,.g--8,.g--9{margin-top:40px;margin-bottom:40px}.table-header,tr{line-height:52px}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}button{border:none;cursor:pointer}.g--1{width:8.33333%}.m--1{margin-left:8.33333%}.g--2{width:16.66667%}.m--2{margin-left:16.66667%}.g--3{width:25%}.m--3{margin-left:25%}.g--4{width:33.33333%}.m--4{margin-left:33.33333%}.g--5{width:41.66667%}.m--5{margin-left:41.66667%}.g--6{width:50%;margin-top:40px;margin-bottom:40px}.m--6{margin-left:50%}.g--7{width:58.33333%}.m--7{margin-left:58.33333%}.g--8{width:66.66667%}.m--8{margin-left:66.66667%}.g--9{width:75%}.m--9{margin-left:75%}.g--10{width:83.33333%}.m--10{margin-left:83.33333%}.g--11{width:91.66667%}.m--11{margin-left:91.66667%}.g--12{width:100%}.m--12{margin-left:100%}.m--0{margin-left:0}[class*=container]{display:-ms-flexbox;display:flex}.container--baseline{-ms-flex-align:baseline;align-items:baseline}.container--center{-ms-flex-align:center;align-items:center}.container--start{-ms-flex-align:start;align-items:flex-start}.container--end{-ms-flex-align:end;align-items:flex-end}.container--justify{-ms-flex-pack:center;justify-content:center}.container--wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.nudge--right{margin-right:20px}.nudge--left{margin-left:20px}@media screen and (max-width:1200px){.g-m--1,.g-m--10,.g-m--11,.g-m--12,.g-m--2,.g-m--3,.g-m--4,.g-m--5,.g-m--7,.g-m--8,.g-m--9{margin-top:26px;margin-bottom:26px}.g-m--1{width:8.33333%}.m-m--1{margin-left:8.33333%}.g-m--2{width:16.66667%}.m-m--2{margin-left:16.66667%}.g-m--3{width:25%}.m-m--3{margin-left:25%}.g-m--4{width:33.33333%}.m-m--4{margin-left:33.33333%}.g-m--5{width:41.66667%}.m-m--5{margin-left:41.66667%}.g-m--6{width:50%;margin-top:26px;margin-bottom:26px}.m-m--6{margin-left:50%}.g-m--7{width:58.33333%}.m-m--7{margin-left:58.33333%}.g-m--8{width:66.66667%}.m-m--8{margin-left:66.66667%}.g-m--9{width:75%}.m-m--9{margin-left:75%}.g-m--10{width:83.33333%}.m-m--10{margin-left:83.33333%}.g-m--11{width:91.66667%}.m-m--11{margin-left:91.66667%}.g-m--12{width:100%}.m-m--12{margin-left:100%}.m-m--0,.no-nudge--m{margin-left:0}.container--wrap--m{-ms-flex-wrap:wrap;flex-wrap:wrap}.no-nudge--m{margin-right:0}}@media screen and (max-width:900px){.g-s--1,.g-s--10,.g-s--11,.g-s--12,.g-s--2,.g-s--3,.g-s--4,.g-s--5,.g-s--7,.g-s--8,.g-s--9{margin-top:18px;margin-bottom:18px}.g-s--1{width:8.33333%}.m-s--1{margin-left:8.33333%}.g-s--2{width:16.66667%}.m-s--2{margin-left:16.66667%}.g-s--3{width:25%}.m-s--3{margin-left:25%}.g-s--4{width:33.33333%}.m-s--4{margin-left:33.33333%}.g-s--5{width:41.66667%}.m-s--5{margin-left:41.66667%}.g-s--6{width:50%;margin-top:18px;margin-bottom:18px}.m-s--6{margin-left:50%}.g-s--7{width:58.33333%}.m-s--7{margin-left:58.33333%}.g-s--8{width:66.66667%}.m-s--8{margin-left:66.66667%}.g-s--9{width:75%}.m-s--9{margin-left:75%}.g-s--10{width:83.33333%}.m-s--10{margin-left:83.33333%}.g-s--11{width:91.66667%}.m-s--11{margin-left:91.66667%}.g-s--12{width:100%}.m-s--12{margin-left:100%}.m-s--0{margin-left:0}.container--wrap--s{-ms-flex-wrap:wrap;flex-wrap:wrap}.nudge--right{margin-right:15px}.nudge--left{margin-left:15px}.no-nudge--s{margin-left:0;margin-right:0}}@media screen and (max-width:520px){.g-t--1,.g-t--10,.g-t--11,.g-t--12,.g-t--2,.g-t--3,.g-t--4,.g-t--5,.g-t--7,.g-t--8,.g-t--9{margin-top:10px;margin-bottom:10px}.g-t--1{width:8.33333%}.m-t--1{margin-left:8.33333%}.g-t--2{width:16.66667%}.m-t--2{margin-left:16.66667%}.g-t--3{width:25%}.m-t--3{margin-left:25%}.g-t--4{width:33.33333%}.m-t--4{margin-left:33.33333%}.g-t--5{width:41.66667%}.m-t--5{margin-left:41.66667%}.g-t--6{width:50%;margin-top:10px;margin-bottom:10px}.m-t--6{margin-left:50%}.g-t--7{width:58.33333%}.m-t--7{margin-left:58.33333%}.g-t--8{width:66.66667%}.m-t--8{margin-left:66.66667%}.g-t--9{width:75%}.m-t--9{margin-left:75%}.g-t--10{width:83.33333%}.m-t--10{margin-left:83.33333%}.g-t--11{width:91.66667%}.m-t--11{margin-left:91.66667%}.g-t--12{width:100%}.m-t--12{margin-left:100%}.m-t--0{margin-left:0}.container--wrap--t{-ms-flex-wrap:wrap;flex-wrap:wrap}.nudge--right{margin-right:10px}.nudge--left{margin-left:10px}.no-nudge--t{margin-left:0;margin-right:0}}.nav--horizontal ol,.nav--horizontal ul,.nav--vertical ol,.nav--vertical ul{margin-left:0}.card{box-shadow:0 2px 5px 0 rgba(0,0,0,.1),0 2px 10px 0 rgba(0,0,0,.07);border-radius:3px}.card,.tile{padding:20px;background:#fff}a,aside,body,div,h1,h2,h3,h4,h5,h6,header,input,label,menu,p{font-family:Roboto,sans-serif;color:#212121}h1,h2,h3,h4,h5,h6{margin-bottom:.8em;line-height:130%}p{margin-bottom:20px}h1{font-size:40px}h2{font-size:34px}h3{font-size:28px}h4{font-size:24.8px}h5{font-size:20.8px}h6{font-size:18px}a,p{font-size:16px}.subtitle{font-style:italic;color:#919191}body{background:#fcfcfc;line-height:130%}a:not([class^=btn]){background:linear-gradient(to top,rgba(40,225,189,.8) 50%,rgba(255,255,255,0) 50%);background-size:100% 200%;background-position:0 10%;background-repeat:no-repeat;text-decoration:none;color:inherit;transition:background-position .3s cubic-bezier(.64,.09,.08,1);will-change:background-position}a:not([class^=btn]):active{color:inherit}a:not([class^=btn]):hover{background-position:0 100%}a[class^=btn]{text-decoration:none}[class^=btn]{box-shadow:0 2px 5px 0 rgba(0,0,0,.14),0 2px 10px 0 rgba(0,0,0,.1);position:relative;cursor:pointer;text-transform:uppercase;margin-bottom:10px;background-image:none;background-size:0;background-repeat:no-repeat;background-position:50% 50%;transition:background-color .3s cubic-bezier(.64,.09,.08,1),box-shadow .3s cubic-bezier(.64,.09,.08,1);will-change:background-size,background-image;padding:10px 20px;display:inline-block;font-family:Roboto;border:0}[class^=btn]:after{position:absolute;content:'';transition:none;background:radial-gradient(circle,#fff 95%,transparent 95%);background-size:.7%;background-position:50% 50%;background-repeat:no-repeat}[class^=btn]:focus{outline:0;background-size:1000%;transition:all 1s cubic-bezier(.64,.09,.08,1)}.btn--float{border-radius:50%;width:50px;height:50px;background-image:radial-gradient(circle,#ffeb3b 1%,#fff388 15%,transparent 30%);background-color:#ffeb3b;will-change:box-shadow,background-color;font-size:22px;padding:0}.btn--float:hover{box-shadow:0 5px 11px 0 rgba(0,0,0,.16),0 4px 15px 0 rgba(0,0,0,.13);background-color:#fe5}.btn--raised,.modal-trigger,.modal-trigger:after{border-radius:1.98px;box-shadow:0 2px 5px 0 rgba(0,0,0,.14),0 2px 10px 0 rgba(0,0,0,.1);background-image:radial-gradient(circle,#3498db 1%,#75b9e7 15%,transparent 30%);background-color:#3498db;will-change:box-shadow,background-color;color:#fff}.btn--raised:hover,.modal-trigger:hover,.modal-trigger:hover:after{box-shadow:0 5px 11px 0 rgba(0,0,0,.16),0 4px 15px 0 rgba(0,0,0,.13);background-color:#4aa3df}.btn--flat{background-image:radial-gradient(circle,#28e1bd 1%,#6bebd1 15%,transparent 30%);background-color:#fcfcfc;box-shadow:none}.btn--primary{background-image:radial-gradient(circle,#1abc9c 1%,#3ee4c4 15%,transparent 30%);background-color:#1abc9c}.btn--primary:hover{background-color:#1dd2af}.btn--secondary{background-image:radial-gradient(circle,#28e1bd 1%,#6bebd1 15%,transparent 30%);background-color:#28e1bd}.btn--secondary:hover{background-color:#3ee4c4}.btn--accent{background-image:radial-gradient(circle,#ffeb3b 1%,#fff388 15%,transparent 30%);background-color:#ffeb3b}.btn--accent:hover{background-color:#fe5}.btn--red{background-image:radial-gradient(circle,#e74c3c 1%,#ef8b80 15%,transparent 30%);background-color:#e74c3c}.btn--red:hover{background-color:#ea6153}.btn--yellow{background-image:radial-gradient(circle,#f1c40f 1%,#f5d657 15%,transparent 30%);background-color:#f1c40f}.btn--yellow:hover{background-color:#f2ca27}.btn--green{background-image:radial-gradient(circle,#4caf50 1%,#80c883 15%,transparent 30%);background-color:#4caf50}.btn--green:hover{background-color:#5cb860}.btn--blue{background-image:radial-gradient(circle,#2196f3 1%,#6ab8f7 15%,transparent 30%);background-color:#2196f3}.btn--blue:hover{background-color:#39a1f4}table{border-collapse:collapse;border-spacing:0;width:100%}.table-header{color:#474747;font-size:16px}tr{font-size:17px;border-bottom:solid 1px #ebebeb;will-change:background}tr:not(.table-header):hover{background:#ebebeb}td:first-child{padding-left:40px}td:last-child{padding-right:40px}header{width:100%;padding-top:10px;padding-bottom:10px;background:#1abc9c;margin-bottom:70px}header h1,header h2,header h3{color:#fff}@media screen and (max-width:1200px){td:first-child{padding-left:32px}td:last-child{padding-right:32px}header{margin-bottom:34px;padding-top:20px}}@media screen and (max-width:900px){td:first-child{padding-left:20px}td:last-child{padding-right:20px}header{padding-top:40px;padding-bottom:5px;margin-bottom:8.5px}}.nav--horizontal,.nav--vertical{margin-top:0;margin-bottom:0}.nav--horizontal{display:-ms-flexbox;display:flex}.nav--horizontal>li,.nav--horizontal>ul{display:-ms-flexbox;display:flex}.nav--horizontal a{display:inline-block}.nav--vertical a,.nav--vertical li,.nav--vertical ul{display:inline-block;float:left;clear:left}.nav--vertical li:first-child a{margin-bottom:7px}.nav--vertical li:last-child a{margin-top:7px}.nav--vertical li a{margin-top:7px;margin-bottom:7px}.logo-area{width:100%;height:152px;border-bottom:solid 1px #e0e0e0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;color:#474747}.nav--super-vertical{margin-top:0;margin-bottom:0;position:fixed;height:100%;-webkit-transform:translateZ(0);-webkit-backface-visibility:hidden;background:#fff;z-index:7;overflow-Y:auto;box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}.dropdown ul,.toggle+label:after{box-shadow:0 2px 5px 0 rgba(0,0,0,.1),0 2px 10px 0 rgba(0,0,0,.07)}.nav--super-vertical a,.nav--super-vertical label{width:100%;display:block;text-decoration:none;color:#474747;cursor:pointer;font-weight:500;padding:20px 24px;transition:none;background-image:none}.nav--super-vertical a:hover,.nav--super-vertical label:hover{background:#e0e0e0}.nav--super-vertical input{display:none}.nav--super-vertical input:checked+label{transition:background .2s cubic-bezier(.64,.09,.08,1),color .2s cubic-bezier(.64,.09,.08,1);background:#e0e0e0}.nav--super-vertical input:checked~.nav-collapsible-links{height:auto;transform:scaleY(1)}.nav--super-vertical input:checked~.nav-collapsible-links a{height:54px}.nav-collapsible-links{height:100%;transform:scaleY(0);transform-origin:0 0;transition:transform .3s cubic-bezier(.64,.09,.08,1)}.nav-collapsible-links a{padding:0 24px 0 34px;height:0;font-weight:400;transition:height .3s cubic-bezier(.64,.09,.08,1);display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}#nav--horizontal-responsive,#nav--horizontal-responsive+label,#nav--super-vertical-responsive,#nav--super-vertical-responsive+label{display:none}@media screen and (max-width:1200px){.nav--super-vertical{padding-top:40px;transform:translateX(-100%);transition:transform .3s cubic-bezier(.64,.09,.08,1)}#nav--super-vertical-responsive+label{display:block;position:fixed;z-index:8;top:0;left:0;padding:10px;background:#fff;box-shadow:0 2px 5px 0 rgba(0,0,0,.1),0 2px 10px 0 rgba(0,0,0,.07);cursor:pointer;transition:background .3s cubic-bezier(.64,.09,.08,1),color .3s cubic-bezier(.64,.09,.08,1)}#nav--super-vertical-responsive:checked+label{background:#1abc9c;color:#fff}#nav--super-vertical-responsive:checked~.nav--super-vertical{transform:translateX(0)}}@media screen and (max-width:900px){#nav--horizontal-responsive+label,.nav--horizontal>ul{background:#fff;box-shadow:0 2px 5px 0 rgba(0,0,0,.1),0 2px 10px 0 rgba(0,0,0,.07)}.nav--horizontal{position:absolute;top:0;left:0;width:100%;z-index:7;transform:translateY(-100%);transition:transform .3s cubic-bezier(.64,.09,.08,1)}.nav--horizontal a,.nav--horizontal li,.nav--horizontal ul{width:100%;display:block;margin:0}.nav--horizontal a{line-height:40px}.nav--horizontal>ul{padding-top:50px}#nav--horizontal-responsive+label{display:block;position:fixed;z-index:8;top:0;left:0;padding:10px;cursor:pointer;transition:background .3s cubic-bezier(.64,.09,.08,1),color .3s cubic-bezier(.64,.09,.08,1)}#nav--horizontal-responsive:checked+label{background:#1abc9c;color:#fff}#nav--horizontal-responsive:checked~.nav--horizontal{transform:translateY(0)}}.nav--horizontal a,.nav--vertical a{color:#1abc9c;background:#fff;padding:10px;transition:none;will-change:background}.nav--horizontal a:hover,.nav--vertical a:hover{background:#e5e5e5}.dropdown{position:relative}.dropdown ul{position:absolute;background:#fff;left:0;transition:all .3s ease;transform:scale(0);transform-origin:0 0;z-index:2;width:100%}.dropdown ul li{width:100%;margin:0;padding:0}.dropdown ul li a{width:100%;padding:8px 10px;display:inline-block;margin:0;border-radius:0}.dropdown:hover ul{transform:scale(1)}ol,ul{list-style:none;margin-left:20px;margin-bottom:20px}ol li,ul li{margin-top:10px}ol{list-style-type:decimal;white-space:nowrap}footer{display:block;width:100%;background:#28e1bd;padding-top:20px;padding-bottom:20px}input[id*=modal-]{display:none}input[id*=modal-]:checked+label{outline:0;background-size:1000%;transition:all 1s cubic-bezier(.64,.09,.08,1)}input[id*=modal-]:checked+label:before{content:'';position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.4);transition:all .3s cubic-bezier(.64,.09,.08,1);z-index:9}input[id*=modal-]:checked~.modal-content{transition:opacity .3s cubic-bezier(.64,.09,.08,1);opacity:1;display:block;height:auto;width:auto;padding:40px;left:50%;top:50%;transform:translate(-50%,-50%);z-index:10}input[id*=modal-]:checked~.modal-content *{height:auto;width:auto}.modal-trigger{white-space:pre;cursor:pointer;transition:all .3s cubic-bezier(.64,.09,.08,1);padding:10px 20px;background-size:1%;background-repeat:no-repeat;background-position:50% 50%}.modal-trigger:after{white-space:nowrap;padding:10px;cursor:pointer;transition:all .2s cubic-bezier(.64,.09,.08,1);background-image:none}.modal-content{position:fixed;opacity:0;height:0;background:#fff;border-radius:3px}.modal-content *{width:0;height:0}.tooltip{position:relative}.tooltip:hover:after{position:absolute;content:attr(data-text);background:#b8b8b8;border-radius:3px;padding:8px;bottom:-2.5em;left:50%;transform:translateX(-50%);z-index:2}.tabs{display:-ms-flexbox;display:flex;position:relative;padding:0}.tabs input[type=radio][name=tabs]{position:absolute;z-index:-1}.tabs input[type=radio][name=tabs]:checked+.tab-label-content label{color:#fff}.tabs input[type=radio][name=tabs]:checked+.tab-label-content .tab-content{display:block}.tabs input[type=radio][name=tabs]:first-of-type:checked~.slide{left:0}.tabs input[type=radio][name=tabs]:nth-of-type(1):checked~.slide-demo{left:0;left:calc((100% / 3) * 0)}.tabs input[type=radio][name=tabs]:nth-of-type(2):checked~.slide-demo{left:33.33333%;left:calc((100% / 3) * 1)}.tabs input[type=radio][name=tabs]:nth-of-type(3):checked~.slide-demo{left:66.66667%;left:calc((100% / 3) * 2)}.slide-demo{width:33.33333%;width:calc(100% / 3)}.tab-label-content:nth-of-type(1) .tab-content{left:0}.tab-label-content:nth-of-type(2) .tab-content{left:-100%}.tab-label-content:nth-of-type(3) .tab-content{left:-200%}.tab-content{width:300%}.tabs label{cursor:pointer;color:rgba(255,255,255,.8);background-color:#1abc9c;box-sizing:border-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;height:56px;transition:color .2s cubic-bezier(.64,.09,.08,1);will-change:color;width:100%}.tabs label,.text-center{text-align:center}.slide{background:#ffeb3b;height:4px;position:absolute;left:0;top:52px;transition:left .3s cubic-bezier(.64,.09,.08,1);will-change:left}.tab-label-content{width:100%}.tab-label-content .tab-content{position:relative;padding:20px;display:none}.card.tabs .tab-label-content:first-of-type label{border-top-left-radius:3px}.card.tabs .tab-label-content:nth-last-child(2) label{border-top-right-radius:3px}label{color:#2e2e2e}input[type=email],input[type=text],input[type=password]{margin-bottom:40px;width:200px;display:block;border:none;padding:10px 0;border-bottom:solid 1px #1abc9c;will-change:background-position;transition:all .3s cubic-bezier(.64,.09,.08,1);background:linear-gradient(to bottom,rgba(255,255,255,0) 96%,#1abc9c 96%);background-position:-200px 0;background-size:200px 100%;background-repeat:no-repeat;color:#0e6252}input[type=email]:focus,input[type=email]:valid,input[type=text]:focus,input[type=text]:valid,input[type=password]:focus,input[type=password]:valid{box-shadow:none;outline:0;background-position:0 0}input[type=email]:focus::-webkit-input-placeholder,input[type=email]:valid::-webkit-input-placeholder,input[type=text]:focus::-webkit-input-placeholder,input[type=text]:valid::-webkit-input-placeholder,input[type=password]:focus::-webkit-input-placeholder,input[type=password]:valid::-webkit-input-placeholder{color:#1abc9c;font-size:11px;transform:translateY(-20px);visibility:visible}input[type=email]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder{transition:all .2s cubic-bezier(.64,.09,.08,1)}input[type=checkbox]:not(.modal-trigger):not(.toggle):not(#alert-check):not([id*=lightbox-]){position:relative;cursor:pointer}input[type=checkbox]:not(.modal-trigger):not(.toggle):not(#alert-check):not([id*=lightbox-]):before{content:'';width:16px;height:16px;border:2px solid #1abc9c;border-radius:3px;background:#fff;position:absolute}input[type=checkbox]:not(.modal-trigger):not(.toggle):not(#alert-check):not([id*=lightbox-]):after{content:'✓';color:#fff;background:#1abc9c;position:absolute;top:0;left:0;width:16px;height:16px;border:2px solid #1abc9c;border-radius:3px;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;opacity:0;transition:opacity .3s cubic-bezier(.64,.09,.08,1);will-change:opacity}input[type=radio]:after,input[type=radio]:before{transition:all .3s cubic-bezier(.64,.09,.08,1);height:16px;width:16px;content:''}input[type=checkbox]:not(.modal-trigger):not(.toggle):not(#alert-check):not([id*=lightbox-]):checked:after{opacity:1}input[type=checkbox]:not(.modal-trigger):not(.toggle):not(#alert-check):not([id*=lightbox-]):focus{outline:0}input[type=radio]{position:relative;top:2px;left:2px;margin:0 8px;cursor:pointer}input[type=radio]:before{background-color:#fff;border-radius:50%;border:2px solid #1abc9c;display:inline-block;position:absolute;top:-2px;left:-2px;background-image:radial-gradient(circle,#1abc9c 40%,#fff 50%);background-size:0;background-position:50% 50%;background-repeat:no-repeat;will-change:background-size;z-index:2}input[type=radio]:after{background:#fff;border-radius:50%;position:absolute}input[type=radio]:checked:before{background-size:14px 14px}input[type=radio]:focus,input[type=range]:focus{outline:0}select{border:none;border-bottom:solid 1px #9e9e9e;color:#212121;padding:6px;cursor:pointer}input[type=range]{-webkit-appearance:none}input[type=range]::-webkit-slider-runnable-track{height:3px;cursor:pointer;background:#9e9e9e}input[type=range]::-webkit-slider-thumb{height:16px;width:16px;border-radius:50%;background:#2ecc71;cursor:pointer;-webkit-appearance:none;margin-top:-6px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1),0 2px 10px 0 rgba(0,0,0,.07)}input[type=range]::-moz-range-track{height:3px;cursor:pointer;background:#9e9e9e}input[type=range]::-moz-range-thumb{height:16px;width:16px;border-radius:50%;border:none;background:#2ecc71;cursor:pointer}input[type=range]::-ms-track{cursor:pointer;background:0 0;border-color:transparent;color:transparent}input[type=range]::-ms-fill-lower{background:#2ecc71}input[type=range]::-ms-fill-upper{background:#9e9e9e}input[type=range]::-ms-thumb{background:#2ecc71}.toggle{display:none}.toggle:checked+label{background:#93e7b6}.toggle:checked+label:after{background:#2ecc71;margin-left:18px}.toggle+label{position:absolute;width:30px;height:6px;margin-top:12px;background:#9e9e9e;transition:background .3s cubic-bezier(.64,.09,.08,1);will-change:background}.toggle+label:after{position:absolute;content:'';width:14px;height:14px;border-radius:50%;background:#dedede;display:inline-block;cursor:pointer;margin-top:-4px;margin-left:-1px;transition:all .3s ease;will-change:background,margin-left}textarea{border:1px solid #9e9e9e;transition:border .3s cubic-bezier(.64,.09,.08,1)}textarea:focus{border:1px solid #1abc9c;outline:0}label[for*=lightbox-]{cursor:pointer;width:100%;transition:none}input[id*=lightbox-]{display:none}input[id*=lightbox-]:checked{display:block;position:absolute;top:50%;left:50%}input[id*=lightbox-]:checked:before{content:'';position:fixed;z-index:9;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.4)}input[id*=lightbox-]:checked+label{top:50%;left:50%;transform:translate(-50%,-50%);width:50vw;position:fixed;z-index:10}.right{float:right}.left{float:left}.clear{clear:both}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fixed{display:fixed}.no-pad{padding:0}.no-margin-vertical{margin-top:0;margin-bottom:0}.no-margin{margin:0}.center{margin:0 auto}.fade-in-from-top{opacity:0;transform:translateY(-6px);animation:fadeInVert .5s ease-out forwards;-webkit-animation:fadeInVert .5s ease-out forwards}.fade-in-from-bottom{opacity:0;transform:translateY(6px);animation:fadeInVert .5s ease-out forwards;-webkit-animation:fadeInVert .5s ease-out forwards}@keyframes fadeInVert{to{opacity:1;transform:translateY(0)}}.fade-in-from-left{opacity:0;transform:translateX(-6px);animation:fadeInHoriz .5s ease-out forwards;-webkit-animation:fadeInHoriz .5s ease-out forwards}.fade-in-from-right{opacity:0;transform:translateX(6px);animation:fadeInHoriz .5s ease-out forwards;-webkit-animation:fadeInHoriz .5s ease-out forwards}@keyframes fadeInHoriz{to{opacity:1;transform:translateX(0)}}.anim-delay--5{animation-delay:.5s;-webkit-animation-delay:.5s}.anim-delay--10{animation-delay:1s;-webkit-animation-delay:1s}.anim-delay--15{animation-delay:1.5s;-webkit-animation-delay:1.5s}.anim-delay--20{animation-delay:2s;-webkit-animation-delay:2s}.anim-delay--25{animation-delay:2.5s;-webkit-animation-delay:2.5s}.anim-delay--30{animation-delay:3s;-webkit-animation-delay:3s}.anim-delay--35{animation-delay:3.5s;-webkit-animation-delay:3.5s}.anim-delay--40{animation-delay:4s;-webkit-animation-delay:4s}.anim-delay--45{animation-delay:4.5s;-webkit-animation-delay:4.5s}.anim-delay--50{animation-delay:5s;-webkit-animation-delay:5s}audio,img,video{width:100%;vertical-align:middle}.alert-wrap{position:relative}.alert{padding-bottom:50px}#alert-check,#alert-check:checked~div,#alert-check:checked~label,[id*=collapsible-]{display:none}#alert-check+label{position:absolute;right:16px;bottom:10px;cursor:pointer}[id*=collapsible-]:checked~[class*=collapsible-][class$=area]{transform:scaleY(1);height:auto;padding:15px 20px;margin-bottom:20px}[id*=collapsible-]:checked+label:before{transform:rotate(45deg)}[id*=collapsible-]:checked+label:after{transform:rotate(-45deg)}label[for*=collapsible-]{width:100%;cursor:pointer;display:-ms-flexbox;display:flex;position:relative;padding:15px 24px;border-bottom:solid 1px #ebebeb;color:#474747;border-radius:3px}label[for*=collapsible-]:after,label[for*=collapsible-]:before{content:'';position:absolute;right:20px;width:2px;height:8px;background:#9e9e9e;transition:all .3s ease}label[for*=collapsible-]:before{margin-top:6px;transform:rotate(-45deg)}label[for*=collapsible-]:after{margin-top:6px;transform:rotate(45deg);right:15px}[class*=collapsible-][class$=area]{transform:scaleY(0);transform-origin:0 0;height:0;will-change:height,transform;transition:all .3s ease;padding-left:20px}code{font-family:monospace;font-size:16px;padding-left:40px;padding-right:40px;min-width:500px;max-width:800px}@media screen and (max-width:900px){code{width:400px}}@media screen and (max-width:520px){code{width:100%;min-width:100%;max-width:100%}}.bg--turqoise{background:#1abc9c}.bg--green-sea{background:#16a085}.bg--emerald{background:#2ecc71}.bg--nephritis{background:#27ae60}.bg--green{background:#4caf50}.bg--light-green{background:#8bc34a}.bg--lime{background:#cddc39}.bg--river{background:#3498db}.bg--belize{background:#2980b9}.bg--asphalt{background:#34495e}.bg--midnight-blue{background:#2c3e50}.bg--blue{background:#2196f3}.bg--light-blue{background:#03a9f4}.bg--cyan{background:#00bcd4}.bg--teal{background:#009688}.bg--alizarin{background:#e74c3c}.bg--pomegranate{background:#c0392b}.bg--red{background:#f44336}.bg--carrot{background:#e67e22}.bg--pumpkin{background:#d35400}.bg--dull-orange{background:#f39c12}.bg--orange{background:#ff9800}.bg--blood-orange{background:#ff5722}.bg--amber{background:#ffc107}.bg--sunflower{background:#f1c40f}.bg--yellow{background:#ffeb3b}.bg--amethyst{background:#9b59b6}.bg--plum{background:#8e44ad}.bg--purple{background:#9c27b0}.bg--deep-purple{background:#673ab7}.bg--pink{background:#e91e63}.bg--indigo{background:#3f51b5}.bg--brown{background:#795548}.bg--grey{background:#9e9e9e}.bg--gun-metal{background:#607d8b}.bg--asbestos{background:#7f8c8d}.bg--concrete{background:#95a5a6}.bg--silver{background:#bdc3c7}.bg--clouds{background:#dde4e6}.bg--paper{background:#efefef}.bg--black{background:#212121}.color--turqoise{color:#1abc9c}.color--green-sea{color:#16a085}.color--emerald{color:#2ecc71}.color--nephritis{color:#27ae60}.color--green{color:#4caf50}.color--light-green{color:#8bc34a}.color--lime{color:#cddc39}.color--river{color:#3498db}.color--belize{color:#2980b9}.color--asphalt{color:#34495e}.color--midnight-blue{color:#2c3e50}.color--blue{color:#2196f3}.color--light-blue{color:#03a9f4}.color--cyan{color:#00bcd4}.color--teal{color:#009688}.color--alizarin{color:#e74c3c}.color--pomegranate{color:#c0392b}.color--red{color:#f44336}.color--carrot{color:#e67e22}.color--pumpkin{color:#d35400}.color--dull-orange{color:#f39c12}.color--orange{color:#ff9800}.color--blood-orange{color:#ff5722}.color--amber{color:#ffc107}.color--sunflower{color:#f1c40f}.color--yellow{color:#ffeb3b}.color--amethyst{color:#9b59b6}.color--plum{color:#8e44ad}.color--purple{color:#9c27b0}.color--deep-purple{color:#673ab7}.color--pink{color:#e91e63}.color--indigo{color:#3f51b5}.color--brown{color:#795548}.color--grey{color:#9e9e9e}.color--gun-metal{color:#607d8b}.color--asbestos{color:#7f8c8d}.color--concrete{color:#95a5a6}.color--silver{color:#bdc3c7}.color--clouds{color:#dde4e6}.color--paper{color:#efefef}.color--white{color:#fff}.color--black{color:#212121}.color--primary{color:#1abc9c}.color--secondary{color:#28e1bd}.color--accent{color:#ffeb3b}
diff --git a/test-case-reporting/static/test-run-list.html b/test-case-reporting/static/test-run-list.html
index f76752c2a..ace82dff4 100644
--- a/test-case-reporting/static/test-run-list.html
+++ b/test-case-reporting/static/test-run-list.html
@@ -1,23 +1,36 @@
-
-
- Test runs
-
-
-
- {{#testRuns}}
- - Test case is {{testCase.name}}
-
- {{/testRuns}}
- {{^testRuns}}
-
- There are no test runs.
-
- {{/testRuns}}
-
-
+
+
+
+ {{title}}
+
+
+
+
+
+
+
+
+
{{title}}
+ {{#testRuns}}
+
+ {{/testRuns}}
+ {{^testRuns}}
+
+ There are no test runs.
+
+ {{/testRuns}}
+
+
+
diff --git a/test-case-reporting/types/test-case-reporting.d.ts b/test-case-reporting/types/test-case-reporting.d.ts
index bc7aff210..6aa3135e4 100644
--- a/test-case-reporting/types/test-case-reporting.d.ts
+++ b/test-case-reporting/types/test-case-reporting.d.ts
@@ -29,6 +29,7 @@ declare module 'test-case-reporting' {
// Despite being a *Number, buildNumber is of type string for parity with
// jobNumber
buildNumber: string;
+ startedAt: Date;
}
/** A job within a Travis build. */
@@ -110,7 +111,9 @@ declare module 'test-case-reporting' {
duration_ms: number;
}
- export interface BigJoin extends Build, Job, TestCase, TestRun {}
+ export interface BigJoin extends Build, Job, TestCase, TestRun {
+ build_started_at: number;
+ }
}
/* eslint @typescript-eslint/camelcase: "error" */