NIHVIVO-222 Tweak the data listener.
This commit is contained in:
parent
028f4c038f
commit
f09fcee448
5 changed files with 78 additions and 76 deletions
|
@ -25,6 +25,8 @@ public class SeleniumRunner {
|
||||||
private final SuiteRunner suiteRunner;
|
private final SuiteRunner suiteRunner;
|
||||||
private final OutputManager outputManager;
|
private final OutputManager outputManager;
|
||||||
|
|
||||||
|
private final List<File> selectedSuites = new ArrayList<File>();
|
||||||
|
|
||||||
public SeleniumRunner(SeleniumRunnerParameters parms) {
|
public SeleniumRunner(SeleniumRunnerParameters parms) {
|
||||||
this.parms = parms;
|
this.parms = parms;
|
||||||
this.listener = parms.getListener();
|
this.listener = parms.getListener();
|
||||||
|
@ -36,6 +38,28 @@ public class SeleniumRunner {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select all test suites which aren't explicitly ignored.
|
||||||
|
*/
|
||||||
|
public void selectSuites() {
|
||||||
|
Listener listener = parms.getListener();
|
||||||
|
IgnoredTests ignored = parms.getIgnoredTests();
|
||||||
|
|
||||||
|
this.selectedSuites.clear();
|
||||||
|
|
||||||
|
for (File parentDir : parms.getSuiteParentDirectories()) {
|
||||||
|
for (File suite : parms.findSuiteDirs(parentDir)) {
|
||||||
|
String suiteName = suite.getName();
|
||||||
|
if (ignored.isIgnored(suiteName)) {
|
||||||
|
listener.suiteIgnored(suite);
|
||||||
|
} else {
|
||||||
|
listener.suiteAdded(suite);
|
||||||
|
this.selectedSuites.add(suite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set up the run, run the selected suites, summarize the output, and clean
|
* Set up the run, run the selected suites, summarize the output, and clean
|
||||||
* up afterwards.
|
* up afterwards.
|
||||||
|
@ -68,7 +92,7 @@ public class SeleniumRunner {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void runSelectedSuites() {
|
public void runSelectedSuites() {
|
||||||
for (File suiteDir : parms.getSelectedSuites()) {
|
for (File suiteDir : this.selectedSuites) {
|
||||||
listener.suiteStarted(suiteDir);
|
listener.suiteStarted(suiteDir);
|
||||||
try {
|
try {
|
||||||
if (parms.isCleanModel()) {
|
if (parms.isCleanModel()) {
|
||||||
|
@ -87,24 +111,6 @@ public class SeleniumRunner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void selectAllSuites(SeleniumRunnerParameters parms) {
|
|
||||||
Listener listener = parms.getListener();
|
|
||||||
IgnoredTests ignored = parms.getIgnoredTests();
|
|
||||||
List<File> suites = new ArrayList<File>();
|
|
||||||
for (File parentDir : parms.getSuiteParentDirectories()) {
|
|
||||||
for (File suite : parms.findSuiteDirs(parentDir)) {
|
|
||||||
String suiteName = suite.getName();
|
|
||||||
if (ignored.isIgnored(suiteName)) {
|
|
||||||
listener.suiteIgnored(suite);
|
|
||||||
} else {
|
|
||||||
listener.suiteAdded(suite);
|
|
||||||
suites.add(suite);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parms.setSelectedSuites(suites);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void usage(String message) {
|
private static void usage(String message) {
|
||||||
System.out.println(message);
|
System.out.println(message);
|
||||||
System.out.println("Usage is: SeleniumRunner <parameters_file> "
|
System.out.println("Usage is: SeleniumRunner <parameters_file> "
|
||||||
|
@ -137,23 +143,31 @@ public class SeleniumRunner {
|
||||||
usage("Can't read properties file: " + e.getMessage());
|
usage("Can't read properties file: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (interactive) {
|
try {
|
||||||
// TODO hook up the GUI.
|
if (interactive) {
|
||||||
throw new RuntimeException("interactive mode not implemented.");
|
// TODO hook up the GUI.
|
||||||
} else {
|
throw new RuntimeException("interactive mode not implemented.");
|
||||||
File logFile = new File(parms.getOutputDirectory(), LOGFILE_NAME);
|
} else {
|
||||||
System.out.println("Log file is '" + logFile.getPath() + "'");
|
File logFile = new File(parms.getOutputDirectory(),
|
||||||
|
LOGFILE_NAME);
|
||||||
|
System.out.println("Log file is '" + logFile.getPath() + "'");
|
||||||
|
|
||||||
// Run all of the suites.
|
// Run all of the suites.
|
||||||
// For each suite, clean the model and the upload area.
|
// For each suite, clean the model and the upload area.
|
||||||
selectAllSuites(parms);
|
parms.setCleanModel(true);
|
||||||
parms.setCleanModel(true);
|
parms.setCleanUploads(true);
|
||||||
parms.setCleanUploads(true);
|
|
||||||
|
|
||||||
System.out.println(parms);
|
System.out.println(parms);
|
||||||
|
|
||||||
SeleniumRunner runner = new SeleniumRunner(parms);
|
SeleniumRunner runner = new SeleniumRunner(parms);
|
||||||
success = runner.run();
|
runner.selectSuites();
|
||||||
|
success = runner.run();
|
||||||
|
}
|
||||||
|
} catch (FatalException e) {
|
||||||
|
System.err.println("\n\n-----------------\n"
|
||||||
|
+ "| FATAL ERROR | " + e.getMessage()
|
||||||
|
+ "\n-----------------\n\n");
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
System.out.println("Exiting SeleniumRunner");
|
System.out.println("Exiting SeleniumRunner");
|
||||||
System.exit(success ? 0 : -1);
|
System.exit(success ? 0 : -1);
|
||||||
|
|
|
@ -49,7 +49,6 @@ public class SeleniumRunnerParameters {
|
||||||
private final ModelCleanerProperties modelCleanerProperties;
|
private final ModelCleanerProperties modelCleanerProperties;
|
||||||
private final IgnoredTests ignoredTests;
|
private final IgnoredTests ignoredTests;
|
||||||
|
|
||||||
private Collection<File> selectedSuites = Collections.emptySet();
|
|
||||||
private boolean cleanModel = true;
|
private boolean cleanModel = true;
|
||||||
private boolean cleanUploads = true;
|
private boolean cleanUploads = true;
|
||||||
|
|
||||||
|
@ -377,14 +376,6 @@ public class SeleniumRunnerParameters {
|
||||||
return ignoredTests;
|
return ignoredTests;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSelectedSuites(Collection<File> selectedSuites) {
|
|
||||||
this.selectedSuites = selectedSuites;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<File> getSelectedSuites() {
|
|
||||||
return new ArrayList<File>(this.selectedSuites);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isCleanModel() {
|
public boolean isCleanModel() {
|
||||||
return cleanModel;
|
return cleanModel;
|
||||||
}
|
}
|
||||||
|
@ -411,19 +402,10 @@ public class SeleniumRunnerParameters {
|
||||||
+ "\n outputDirectory: " + outputDirectory
|
+ "\n outputDirectory: " + outputDirectory
|
||||||
+ "\n suiteParentDirectories: " + suiteParentDirectories
|
+ "\n suiteParentDirectories: " + suiteParentDirectories
|
||||||
+ "\n modelCleanerProperties: " + modelCleanerProperties
|
+ "\n modelCleanerProperties: " + modelCleanerProperties
|
||||||
+ "\n" + ignoredTests + "\n\n selectedSuites: "
|
+ "\n" + ignoredTests + "\n cleanModel: " + cleanModel
|
||||||
+ showSelectedSuites() + "\n cleanModel: " + cleanModel
|
|
||||||
+ "\n cleanUploads: " + cleanUploads;
|
+ "\n cleanUploads: " + cleanUploads;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String showSelectedSuites() {
|
|
||||||
StringBuilder buffer = new StringBuilder();
|
|
||||||
for (File suite : selectedSuites) {
|
|
||||||
buffer.append("\n ").append(suite.getPath());
|
|
||||||
}
|
|
||||||
return buffer.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Look inside this parent directory and find any suite directories. You can
|
* Look inside this parent directory and find any suite directories. You can
|
||||||
* recognize a suite directory because it contains a file named Suite.html.
|
* recognize a suite directory because it contains a file named Suite.html.
|
||||||
|
|
|
@ -11,7 +11,7 @@ import java.util.List;
|
||||||
import edu.cornell.mannlib.vitro.utilities.testrunner.FileHelper;
|
import edu.cornell.mannlib.vitro.utilities.testrunner.FileHelper;
|
||||||
import edu.cornell.mannlib.vitro.utilities.testrunner.listener.Listener;
|
import edu.cornell.mannlib.vitro.utilities.testrunner.listener.Listener;
|
||||||
|
|
||||||
public class OutputDataModel implements Listener {
|
public class OutputDataListener implements Listener {
|
||||||
private boolean runCompleted;
|
private boolean runCompleted;
|
||||||
private long startTime;
|
private long startTime;
|
||||||
private long endTime;
|
private long endTime;
|
||||||
|
@ -24,6 +24,7 @@ public class OutputDataModel implements Listener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void runStarted() {
|
public void runStarted() {
|
||||||
|
System.out.println("run started");
|
||||||
startTime = new Date().getTime();
|
startTime = new Date().getTime();
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,12 +19,12 @@ import edu.cornell.mannlib.vitro.utilities.testrunner.Status;
|
||||||
*/
|
*/
|
||||||
public class OutputManager {
|
public class OutputManager {
|
||||||
private final SeleniumRunnerParameters parms;
|
private final SeleniumRunnerParameters parms;
|
||||||
private final OutputDataModel dataModel;
|
private final OutputDataListener dataListener;
|
||||||
|
|
||||||
public OutputManager(SeleniumRunnerParameters parms) {
|
public OutputManager(SeleniumRunnerParameters parms) {
|
||||||
this.parms = parms;
|
this.parms = parms;
|
||||||
this.dataModel = new OutputDataModel();
|
this.dataListener = new OutputDataListener();
|
||||||
parms.addListener(this.dataModel);
|
parms.addListener(this.dataListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -76,7 +76,7 @@ public class OutputManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputSummaryFormatter formatter = new OutputSummaryFormatter(parms);
|
OutputSummaryFormatter formatter = new OutputSummaryFormatter(parms);
|
||||||
formatter.format(log, suites, dataModel);
|
formatter.format(log, suites, dataListener);
|
||||||
return formatter.figureOverallStatus(log, suites);
|
return formatter.figureOverallStatus(log, suites);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,9 +30,9 @@ public class OutputSummaryFormatter {
|
||||||
"yyyy-MM-dd HH:mm:ss");
|
"yyyy-MM-dd HH:mm:ss");
|
||||||
private final SeleniumRunnerParameters parms;
|
private final SeleniumRunnerParameters parms;
|
||||||
|
|
||||||
private LogStats log;
|
private LogStats logStats;
|
||||||
private Map<String, SuiteResults> suites;
|
private Map<String, SuiteResults> suites;
|
||||||
private OutputDataModel dataModel;
|
private OutputDataListener dataListener;
|
||||||
private Status runStatus;
|
private Status runStatus;
|
||||||
private List<TestResults> allTests = new ArrayList<TestResults>();
|
private List<TestResults> allTests = new ArrayList<TestResults>();
|
||||||
private int passingTestCount;
|
private int passingTestCount;
|
||||||
|
@ -51,12 +51,12 @@ public class OutputSummaryFormatter {
|
||||||
* Create a summary HTML file from the info contained in this log file and
|
* Create a summary HTML file from the info contained in this log file and
|
||||||
* these suite outputs.
|
* these suite outputs.
|
||||||
*/
|
*/
|
||||||
public void format(LogStats log, Map<String, SuiteResults> suites,
|
public void format(LogStats logStats, Map<String, SuiteResults> suites,
|
||||||
OutputDataModel dataModel) {
|
OutputDataListener dataListener) {
|
||||||
this.log = log;
|
this.logStats = logStats;
|
||||||
this.suites = suites;
|
this.suites = suites;
|
||||||
this.dataModel = dataModel;
|
this.dataListener = dataListener;
|
||||||
this.runStatus = figureOverallStatus(log, suites);
|
this.runStatus = figureOverallStatus(logStats, suites);
|
||||||
tallyTests();
|
tallyTests();
|
||||||
tallySuites();
|
tallySuites();
|
||||||
|
|
||||||
|
@ -148,9 +148,9 @@ public class OutputSummaryFormatter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tallySuites() {
|
private void tallySuites() {
|
||||||
List<String> ignoredSuiteNames = dataModel.getIgnoredSuiteNames();
|
List<String> ignoredSuiteNames = dataListener.getIgnoredSuiteNames();
|
||||||
|
|
||||||
for (String name : dataModel.getSuiteNames()) {
|
for (String name : dataListener.getSuiteNames()) {
|
||||||
if (ignoredSuiteNames.contains(name)) {
|
if (ignoredSuiteNames.contains(name)) {
|
||||||
this.ignoredSuites.add(name);
|
this.ignoredSuites.add(name);
|
||||||
} else if (!suites.containsKey(name)) {
|
} else if (!suites.containsKey(name)) {
|
||||||
|
@ -167,7 +167,7 @@ public class OutputSummaryFormatter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeHeader(PrintWriter writer) {
|
private void writeHeader(PrintWriter writer) {
|
||||||
String startString = formatDateTime(dataModel.getStartTime());
|
String startString = formatDateTime(dataListener.getStartTime());
|
||||||
|
|
||||||
writer.println("<html>");
|
writer.println("<html>");
|
||||||
writer.println("<head>");
|
writer.println("<head>");
|
||||||
|
@ -192,9 +192,9 @@ public class OutputSummaryFormatter {
|
||||||
String ignoreClass = this.ignoredTests.isEmpty() ? "" : Status.WARN
|
String ignoreClass = this.ignoredTests.isEmpty() ? "" : Status.WARN
|
||||||
.getHtmlClass();
|
.getHtmlClass();
|
||||||
|
|
||||||
String start = formatDateTime(dataModel.getStartTime());
|
String start = formatDateTime(dataListener.getStartTime());
|
||||||
String end = formatDateTime(dataModel.getEndTime());
|
String end = formatDateTime(dataListener.getEndTime());
|
||||||
String elapsed = formatElapsedTime(dataModel.getElapsedTime());
|
String elapsed = formatElapsedTime(dataListener.getElapsedTime());
|
||||||
|
|
||||||
writer.println(" <div class=\"section\">Summary</div>");
|
writer.println(" <div class=\"section\">Summary</div>");
|
||||||
writer.println();
|
writer.println();
|
||||||
|
@ -213,8 +213,13 @@ public class OutputSummaryFormatter {
|
||||||
writer.println(" <td>");
|
writer.println(" <td>");
|
||||||
writer.println(" <table cellspacing=\"0\">");
|
writer.println(" <table cellspacing=\"0\">");
|
||||||
writer.println(" <tr><th> </th><th>Suites</th><th>Tests</th>");
|
writer.println(" <tr><th> </th><th>Suites</th><th>Tests</th>");
|
||||||
writer.println(" <tr><th>Total</th><td>" + "</td><td>"
|
writer.println(" <tr><th>Total</th><td>"
|
||||||
+ "</td>");
|
+ (this.passingSuites.size() + this.failingSuites.size()
|
||||||
|
+ this.ignoredSuites.size() + this.remainingSuites
|
||||||
|
.size())
|
||||||
|
+ "</td><td>"
|
||||||
|
+ (this.passingTestCount + this.failingTests.size() + this.ignoredTests
|
||||||
|
.size()) + "</td>");
|
||||||
writer.println(" <tr class=\"" + passClass
|
writer.println(" <tr class=\"" + passClass
|
||||||
+ "\"><th>Passed</th><td>" + this.passingSuites.size()
|
+ "\"><th>Passed</th><td>" + this.passingSuites.size()
|
||||||
+ "</td><td>" + this.passingTestCount + "</td>");
|
+ "</td><td>" + this.passingTestCount + "</td>");
|
||||||
|
@ -243,14 +248,14 @@ public class OutputSummaryFormatter {
|
||||||
writer.println();
|
writer.println();
|
||||||
writer.println(" <table cellspacing=\"0\">");
|
writer.println(" <table cellspacing=\"0\">");
|
||||||
|
|
||||||
if ((!log.hasErrors()) && (!log.hasWarnings())) {
|
if ((!logStats.hasErrors()) && (!logStats.hasWarnings())) {
|
||||||
writer.println(" <tr><td colspan=\"2\">No errors or warnings</td></tr>");
|
writer.println(" <tr><td colspan=\"2\">No errors or warnings</td></tr>");
|
||||||
} else {
|
} else {
|
||||||
for (String e : log.getErrors()) {
|
for (String e : logStats.getErrors()) {
|
||||||
writer.println(" <tr class=\"" + errorClass
|
writer.println(" <tr class=\"" + errorClass
|
||||||
+ "\"><td>ERROR</td><td>" + e + "</td></tr>");
|
+ "\"><td>ERROR</td><td>" + e + "</td></tr>");
|
||||||
}
|
}
|
||||||
for (String w : log.getWarnings()) {
|
for (String w : logStats.getWarnings()) {
|
||||||
writer.println(" <tr class=\"" + warnClass
|
writer.println(" <tr class=\"" + warnClass
|
||||||
+ "\"><td>ERROR</td><td>" + w + "</td></tr>");
|
+ "\"><td>ERROR</td><td>" + w + "</td></tr>");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue