Skip to content

Commit adc8214

Browse files
committed
Colourise test summary results at top of core runner report.
1 parent 7b0e446 commit adc8214

File tree

3 files changed

+37
-19
lines changed

3 files changed

+37
-19
lines changed

java/server/src/org/openqa/selenium/server/htmlrunner/CoreTestSuite.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public CoreTestSuite(String url) {
3535
this.url = url;
3636
}
3737

38-
public void run(Results results, WebDriver driver, Selenium selenium) {
38+
public Results run(WebDriver driver, Selenium selenium) {
3939
if (!url.equals(driver.getCurrentUrl())) {
4040
driver.get(url);
4141
}
@@ -56,13 +56,22 @@ public void run(Results results, WebDriver driver, Selenium selenium) {
5656
" var allLinks = cell.getElementsByTagName('a');\n" +
5757
" if (allLinks.length > 0) {\n" +
5858
" toReturn.push(allLinks[0].href);\n" +
59+
" arguments[0].rows[i].className += 'insert-test-result';\n" +
5960
" }\n" +
6061
"}\n" +
6162
"return toReturn;\n",
6263
allTables.get(0));
6364

65+
String rawSuite = (String) ((JavascriptExecutor) driver).executeScript(
66+
"return arguments[0].outerHTML;",
67+
allTables.get(0));
68+
69+
Results results = new Results(rawSuite);
70+
6471
for (String testUrl : allTestUrls) {
6572
new CoreTestCase(testUrl).run(results, driver, selenium);
6673
}
74+
75+
return results;
6776
}
6877
}

java/server/src/org/openqa/selenium/server/htmlrunner/HTMLLauncher.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import com.thoughtworks.selenium.webdriven.WebDriverBackedSelenium;
2424

2525
import org.openqa.selenium.By;
26-
import org.openqa.selenium.JavascriptExecutor;
2726
import org.openqa.selenium.WebDriver;
2827
import org.openqa.selenium.WebElement;
2928
import org.openqa.selenium.chrome.ChromeDriver;
@@ -157,10 +156,7 @@ private String runHTMLSuite(String browser, String browserURL, String suiteURL,
157156
if (allTables.isEmpty()) {
158157
throw new RuntimeException("Unable to find suite table: " + driver.getPageSource());
159158
}
160-
String rawSuite =
161-
(String) ((JavascriptExecutor) driver).executeScript("return arguments[0].outerHTML", allTables.get(0));
162-
Results results = new Results(rawSuite);
163-
new CoreTestSuite(suiteUrl.toString()).run(results, driver, selenium);
159+
Results results = new CoreTestSuite(suiteUrl.toString()).run(driver, selenium);
164160

165161
HTMLTestResults htmlResults = results.toSuiteResult();
166162
try (Writer writer = Files.newBufferedWriter(outputFile.toPath())) {

java/server/src/org/openqa/selenium/server/htmlrunner/Results.java

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717

1818
package org.openqa.selenium.server.htmlrunner;
1919

20+
import com.google.common.base.Function;
21+
import com.google.common.collect.FluentIterable;
22+
2023
import org.openqa.selenium.internal.BuildInfo;
2124

2225
import java.io.IOException;
@@ -35,6 +38,7 @@ public class Results {
3538

3639
private final String suiteSource;
3740
private final List<String> allTables = new LinkedList<>();
41+
private final List<Boolean> allResults = new LinkedList<>();
3842
private final StringBuilder log = new StringBuilder();
3943
private final long start = System.currentTimeMillis();
4044

@@ -72,12 +76,16 @@ public void addTest(String rawSource, List<CoreTestCase.StepResult> stepResults)
7276
}
7377
succeeded &= passed;
7478

75-
allTables.add(massage(rawSource, stepResults));
79+
allTables.add(
80+
massage(rawSource, "insert-core-result", stepResults, input -> input.getRenderableClass()));
81+
allResults.add(passed);
7682
}
7783

78-
private String massage(
84+
private <X> String massage(
7985
String rawSource,
80-
List<CoreTestCase.StepResult> stepResults) {
86+
String toSubstitute,
87+
List<X> toConvert,
88+
Function<X, String> transform) {
8189

8290
Reader stringReader = new StringReader(rawSource);
8391
HTMLEditorKit htmlKit = new HTMLEditorKit();
@@ -86,8 +94,9 @@ private String massage(
8694
doc.setAsynchronousLoadPriority(-1);
8795
ElementCallback callback;
8896
try {
89-
final Iterator<CoreTestCase.StepResult> allResults = stepResults.iterator();
90-
callback = new ElementCallback(allResults);
97+
callback = new ElementCallback(
98+
toSubstitute,
99+
FluentIterable.from(toConvert).transform(transform).iterator());
91100
parser.parse(stringReader, callback, true);
92101
} catch (IOException e) {
93102
throw new RuntimeException("Unable to parse test table");
@@ -124,18 +133,24 @@ public HTMLTestResults toSuiteResult() {
124133
String.valueOf(commandPasses),
125134
String.valueOf(commandFailures),
126135
String.valueOf(commandErrors),
127-
suiteSource,
136+
massage(
137+
suiteSource,
138+
"insert-test-result",
139+
allResults,
140+
input -> input ? "status_passed" : "status_failed"),
128141
allTables,
129142
log.toString());
130143
}
131144

132145
private static class ElementCallback extends HTMLEditorKit.ParserCallback {
146+
private final String toSubstitute;
133147
private final List<Integer> tagPositions = new LinkedList<>();
134148
private final List<String> originals = new LinkedList<>();
135149
private final List<String> substitutions = new LinkedList<>();
136-
private final Iterator<CoreTestCase.StepResult> allResults;
150+
private final Iterator<String> allResults;
137151

138-
public ElementCallback(Iterator<CoreTestCase.StepResult> allResults) {
152+
public ElementCallback(String toSubstitute, Iterator<String> allResults) {
153+
this.toSubstitute = toSubstitute;
139154
this.allResults = allResults;
140155
}
141156

@@ -145,12 +160,10 @@ public void handleStartTag(HTML.Tag tag, MutableAttributeSet attrs, int pos) {
145160
Object rawAttr = attrs.getAttribute(HTML.Attribute.CLASS);
146161
if (rawAttr != null) {
147162
String classes = String.valueOf(rawAttr);
148-
if (classes.contains("insert-core-result")) {
149-
CoreTestCase.StepResult result = allResults.next();
163+
if (classes.contains(toSubstitute)) {
164+
String result = allResults.next();
150165
originals.add(classes);
151-
substitutions.add(classes.replace(
152-
"insert-core-result",
153-
result.getRenderableClass()));
166+
substitutions.add(classes.replace(toSubstitute, result));
154167
tagPositions.add(pos);
155168
}
156169
}

0 commit comments

Comments
 (0)