109 lines
2.9 KiB
JavaScript
109 lines
2.9 KiB
JavaScript
jasmineRequire.OverallStatusBar = function(j$) {
|
|
'use strict';
|
|
|
|
const { createDom } = j$.private.htmlReporterUtils;
|
|
const staticClassNames = 'jasmine-overall-result jasmine-bar';
|
|
|
|
class OverallStatusBar {
|
|
#urlBuilder;
|
|
|
|
constructor(urlBuilder) {
|
|
this.#urlBuilder = urlBuilder;
|
|
this.rootEl = createDom('span', {
|
|
className: staticClassNames,
|
|
'aria-live': 'polite'
|
|
});
|
|
}
|
|
|
|
showRunning() {
|
|
this.rootEl.textContent = 'Running...';
|
|
this.rootEl.classList.add('jasmine-in-progress');
|
|
}
|
|
|
|
showFailing() {
|
|
this.rootEl.textContent = 'Failing...';
|
|
this.rootEl.classList.add('jasmine-failed');
|
|
}
|
|
|
|
showDone(doneResult, stateBuilder) {
|
|
// Clear any classes added to represent in-progress state
|
|
this.rootEl.className = staticClassNames;
|
|
|
|
let statusBarMessage = '';
|
|
const globalFailures =
|
|
(doneResult && doneResult.failedExpectations) || [];
|
|
const failed = stateBuilder.failureCount + globalFailures.length > 0;
|
|
|
|
if (stateBuilder.totalSpecsDefined > 0 || failed) {
|
|
statusBarMessage +=
|
|
pluralize('spec', stateBuilder.specsExecuted) +
|
|
', ' +
|
|
pluralize('failure', stateBuilder.failureCount);
|
|
if (stateBuilder.pendingSpecCount) {
|
|
statusBarMessage +=
|
|
', ' + pluralize('pending spec', stateBuilder.pendingSpecCount);
|
|
}
|
|
}
|
|
|
|
if (doneResult.overallStatus === 'passed') {
|
|
this.rootEl.classList.add('jasmine-passed');
|
|
} else if (doneResult.overallStatus === 'incomplete') {
|
|
this.rootEl.classList.add('jasmine-incomplete');
|
|
statusBarMessage =
|
|
'Incomplete: ' +
|
|
doneResult.incompleteReason +
|
|
', ' +
|
|
statusBarMessage;
|
|
} else {
|
|
this.rootEl.classList.add('jasmine-failed');
|
|
}
|
|
|
|
// Replace any existing children with the message
|
|
this.rootEl.textContent = statusBarMessage;
|
|
|
|
const order = doneResult.order;
|
|
if (order && order.random) {
|
|
this.#addSeedBar(order);
|
|
}
|
|
|
|
this.#addDuration(doneResult);
|
|
}
|
|
|
|
#addSeedBar(order) {
|
|
this.rootEl.appendChild(
|
|
createDom(
|
|
'span',
|
|
{ className: 'jasmine-seed-bar' },
|
|
', randomized with seed ',
|
|
createDom(
|
|
'a',
|
|
{
|
|
title: 'randomized with seed ' + order.seed,
|
|
href: this.#urlBuilder.seedHref(order.seed)
|
|
},
|
|
order.seed
|
|
)
|
|
)
|
|
);
|
|
}
|
|
|
|
#addDuration(doneResult) {
|
|
const secs = doneResult.totalTime / 1000;
|
|
this.rootEl.appendChild(
|
|
createDom(
|
|
'span',
|
|
{ className: 'jasmine-duration' },
|
|
`finished in ${secs}s`
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
function pluralize(singular, count) {
|
|
const word = count === 1 ? singular : singular + 's';
|
|
return '' + count + ' ' + word;
|
|
}
|
|
|
|
return OverallStatusBar;
|
|
};
|