diff --git a/lib/jasmine-core/jasmine-html.js b/lib/jasmine-core/jasmine-html.js
index 4b932657..c9aa426f 100644
--- a/lib/jasmine-core/jasmine-html.js
+++ b/lib/jasmine-core/jasmine-html.js
@@ -30,6 +30,7 @@ jasmineRequire.html = function(j$) {
j$.private.ResultsStateBuilder = jasmineRequire.ResultsStateBuilder(j$);
j$.private.htmlReporterUtils = jasmineRequire.htmlReporterUtils(j$);
j$.private.AlertsView = jasmineRequire.AlertsView(j$);
+ j$.private.OverallStatusBar = jasmineRequire.OverallStatusBar(j$);
j$.private.Banner = jasmineRequire.Banner(j$);
j$.private.SymbolsView = jasmineRequire.SymbolsView(j$);
j$.private.SummaryTreeView = jasmineRequire.SummaryTreeView(j$);
@@ -164,7 +165,9 @@ jasmineRequire.HtmlReporter = function(j$) {
);
}
- this.#alerts.addSeedBar(doneResult, this.#stateBuilder, doneResult.order);
+ const statusBar = new j$.private.OverallStatusBar(this.#urlBuilder);
+ statusBar.showDone(doneResult, this.#stateBuilder);
+ this.#alerts.addBar(statusBar.rootEl);
if (doneResult.failedExpectations) {
for (const f of doneResult.failedExpectations) {
@@ -422,11 +425,11 @@ jasmineRequire.AlertsView = function(j$) {
}
addDuration(ms) {
- this.#add('jasmine-duration', 'finished in ' + ms / 1000 + 's');
+ this.#createAndAdd('jasmine-duration', 'finished in ' + ms / 1000 + 's');
}
addSkipped(numExecuted, numDefined) {
- this.#add(
+ this.#createAndAdd(
'jasmine-bar jasmine-skipped',
createDom(
'a',
@@ -458,69 +461,21 @@ jasmineRequire.AlertsView = function(j$) {
return false;
};
- this.#add('jasmine-menu jasmine-bar jasmine-spec-list', [
+ this.#createAndAdd('jasmine-menu jasmine-bar jasmine-spec-list', [
createDom('span', {}, 'Spec List | '),
failuresLink
]);
- this.#add('jasmine-menu jasmine-bar jasmine-failure-list', [
+ this.#createAndAdd('jasmine-menu jasmine-bar jasmine-failure-list', [
specListLink,
createDom('span', {}, ' | Failures ')
]);
}
addGlobalFailure(failure) {
- this.#add(errorBarClassName, this.#globalFailureMessage(failure));
- }
-
- addSeedBar(doneResult, stateBuilder, order) {
- let statusBarMessage = '';
- let statusBarClassName = 'jasmine-overall-result jasmine-bar ';
- 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') {
- statusBarClassName += ' jasmine-passed ';
- } else if (doneResult.overallStatus === 'incomplete') {
- statusBarClassName += ' jasmine-incomplete ';
- statusBarMessage =
- 'Incomplete: ' +
- doneResult.incompleteReason +
- ', ' +
- statusBarMessage;
- } else {
- statusBarClassName += ' jasmine-failed ';
- }
-
- let seedBar;
- if (order && order.random) {
- seedBar = 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
- )
- );
- }
-
- this.#add(statusBarClassName, [statusBarMessage, seedBar]);
+ this.#createAndAdd(
+ errorBarClassName,
+ this.#globalFailureMessage(failure)
+ );
}
#globalFailureMessage(failure) {
@@ -566,10 +521,14 @@ jasmineRequire.AlertsView = function(j$) {
children.push(this.#createExpander(dw.stack));
}
- this.#add('jasmine-bar jasmine-warning', children);
+ this.#createAndAdd('jasmine-bar jasmine-warning', children);
}
- #add(className, children) {
+ addBar(el) {
+ this.rootEl.appendChild(el);
+ }
+
+ #createAndAdd(className, children) {
this.rootEl.appendChild(createDom('span', { className }, children));
}
@@ -602,12 +561,6 @@ jasmineRequire.AlertsView = function(j$) {
}
}
- function pluralize(singular, count) {
- const word = count == 1 ? singular : singular + 's';
-
- return '' + count + ' ' + word;
- }
-
return AlertsView;
};
@@ -1129,7 +1082,9 @@ jasmineRequire.HtmlReporterV2 = function(j$) {
);
}
- this.#alerts.addSeedBar(doneResult, this.#stateBuilder, doneResult.order);
+ const statusBar = new j$.private.OverallStatusBar(this.#urlBuilder);
+ statusBar.showDone(doneResult, this.#stateBuilder);
+ this.#alerts.addBar(statusBar.rootEl);
if (doneResult.failedExpectations) {
for (const f of doneResult.failedExpectations) {
@@ -1368,6 +1323,82 @@ jasmineRequire.HtmlSpecFilterV2 = function() {
return HtmlSpecFilterV2;
};
+jasmineRequire.OverallStatusBar = function(j$) {
+ 'use strict';
+
+ const { createDom } = j$.private.htmlReporterUtils;
+
+ class OverallStatusBar {
+ #urlBuilder;
+
+ constructor(urlBuilder) {
+ this.#urlBuilder = urlBuilder;
+ this.rootEl = createDom('span', {
+ className: 'jasmine-overall-result jasmine-bar'
+ });
+ }
+
+ showDone(doneResult, stateBuilder) {
+ 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');
+ }
+
+ this.rootEl.textContent = statusBarMessage;
+
+ const order = doneResult.order;
+ if (order && order.random) {
+ 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
+ )
+ )
+ );
+ }
+ }
+ }
+
+ function pluralize(singular, count) {
+ const word = count === 1 ? singular : singular + 's';
+ return '' + count + ' ' + word;
+ }
+
+ return OverallStatusBar;
+};
+
jasmineRequire.ResultsStateBuilder = function(j$) {
'use strict';
diff --git a/src/html/AlertsView.js b/src/html/AlertsView.js
index 530f43d7..9f9195a7 100644
--- a/src/html/AlertsView.js
+++ b/src/html/AlertsView.js
@@ -14,11 +14,11 @@ jasmineRequire.AlertsView = function(j$) {
}
addDuration(ms) {
- this.#add('jasmine-duration', 'finished in ' + ms / 1000 + 's');
+ this.#createAndAdd('jasmine-duration', 'finished in ' + ms / 1000 + 's');
}
addSkipped(numExecuted, numDefined) {
- this.#add(
+ this.#createAndAdd(
'jasmine-bar jasmine-skipped',
createDom(
'a',
@@ -50,69 +50,21 @@ jasmineRequire.AlertsView = function(j$) {
return false;
};
- this.#add('jasmine-menu jasmine-bar jasmine-spec-list', [
+ this.#createAndAdd('jasmine-menu jasmine-bar jasmine-spec-list', [
createDom('span', {}, 'Spec List | '),
failuresLink
]);
- this.#add('jasmine-menu jasmine-bar jasmine-failure-list', [
+ this.#createAndAdd('jasmine-menu jasmine-bar jasmine-failure-list', [
specListLink,
createDom('span', {}, ' | Failures ')
]);
}
addGlobalFailure(failure) {
- this.#add(errorBarClassName, this.#globalFailureMessage(failure));
- }
-
- addSeedBar(doneResult, stateBuilder, order) {
- let statusBarMessage = '';
- let statusBarClassName = 'jasmine-overall-result jasmine-bar ';
- 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') {
- statusBarClassName += ' jasmine-passed ';
- } else if (doneResult.overallStatus === 'incomplete') {
- statusBarClassName += ' jasmine-incomplete ';
- statusBarMessage =
- 'Incomplete: ' +
- doneResult.incompleteReason +
- ', ' +
- statusBarMessage;
- } else {
- statusBarClassName += ' jasmine-failed ';
- }
-
- let seedBar;
- if (order && order.random) {
- seedBar = 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
- )
- );
- }
-
- this.#add(statusBarClassName, [statusBarMessage, seedBar]);
+ this.#createAndAdd(
+ errorBarClassName,
+ this.#globalFailureMessage(failure)
+ );
}
#globalFailureMessage(failure) {
@@ -158,10 +110,14 @@ jasmineRequire.AlertsView = function(j$) {
children.push(this.#createExpander(dw.stack));
}
- this.#add('jasmine-bar jasmine-warning', children);
+ this.#createAndAdd('jasmine-bar jasmine-warning', children);
}
- #add(className, children) {
+ addBar(el) {
+ this.rootEl.appendChild(el);
+ }
+
+ #createAndAdd(className, children) {
this.rootEl.appendChild(createDom('span', { className }, children));
}
@@ -194,11 +150,5 @@ jasmineRequire.AlertsView = function(j$) {
}
}
- function pluralize(singular, count) {
- const word = count == 1 ? singular : singular + 's';
-
- return '' + count + ' ' + word;
- }
-
return AlertsView;
};
diff --git a/src/html/HtmlReporter.js b/src/html/HtmlReporter.js
index 019e5bab..19c49f43 100644
--- a/src/html/HtmlReporter.js
+++ b/src/html/HtmlReporter.js
@@ -120,7 +120,9 @@ jasmineRequire.HtmlReporter = function(j$) {
);
}
- this.#alerts.addSeedBar(doneResult, this.#stateBuilder, doneResult.order);
+ const statusBar = new j$.private.OverallStatusBar(this.#urlBuilder);
+ statusBar.showDone(doneResult, this.#stateBuilder);
+ this.#alerts.addBar(statusBar.rootEl);
if (doneResult.failedExpectations) {
for (const f of doneResult.failedExpectations) {
diff --git a/src/html/HtmlReporterV2.js b/src/html/HtmlReporterV2.js
index c06b4413..f1b9b552 100644
--- a/src/html/HtmlReporterV2.js
+++ b/src/html/HtmlReporterV2.js
@@ -134,7 +134,9 @@ jasmineRequire.HtmlReporterV2 = function(j$) {
);
}
- this.#alerts.addSeedBar(doneResult, this.#stateBuilder, doneResult.order);
+ const statusBar = new j$.private.OverallStatusBar(this.#urlBuilder);
+ statusBar.showDone(doneResult, this.#stateBuilder);
+ this.#alerts.addBar(statusBar.rootEl);
if (doneResult.failedExpectations) {
for (const f of doneResult.failedExpectations) {
diff --git a/src/html/OverallStatusBar.js b/src/html/OverallStatusBar.js
new file mode 100644
index 00000000..2c9a1e7c
--- /dev/null
+++ b/src/html/OverallStatusBar.js
@@ -0,0 +1,75 @@
+jasmineRequire.OverallStatusBar = function(j$) {
+ 'use strict';
+
+ const { createDom } = j$.private.htmlReporterUtils;
+
+ class OverallStatusBar {
+ #urlBuilder;
+
+ constructor(urlBuilder) {
+ this.#urlBuilder = urlBuilder;
+ this.rootEl = createDom('span', {
+ className: 'jasmine-overall-result jasmine-bar'
+ });
+ }
+
+ showDone(doneResult, stateBuilder) {
+ 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');
+ }
+
+ this.rootEl.textContent = statusBarMessage;
+
+ const order = doneResult.order;
+ if (order && order.random) {
+ 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
+ )
+ )
+ );
+ }
+ }
+ }
+
+ function pluralize(singular, count) {
+ const word = count === 1 ? singular : singular + 's';
+ return '' + count + ' ' + word;
+ }
+
+ return OverallStatusBar;
+};
diff --git a/src/html/requireHtml.js b/src/html/requireHtml.js
index a27c39b9..df9d85bc 100644
--- a/src/html/requireHtml.js
+++ b/src/html/requireHtml.js
@@ -6,6 +6,7 @@ jasmineRequire.html = function(j$) {
j$.private.ResultsStateBuilder = jasmineRequire.ResultsStateBuilder(j$);
j$.private.htmlReporterUtils = jasmineRequire.htmlReporterUtils(j$);
j$.private.AlertsView = jasmineRequire.AlertsView(j$);
+ j$.private.OverallStatusBar = jasmineRequire.OverallStatusBar(j$);
j$.private.Banner = jasmineRequire.Banner(j$);
j$.private.SymbolsView = jasmineRequire.SymbolsView(j$);
j$.private.SummaryTreeView = jasmineRequire.SummaryTreeView(j$);