Add the CLIReporter and its tests.
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing

This commit is contained in:
2023-10-07 20:11:45 +03:00
parent 9945480a6a
commit b57b005d97
3 changed files with 244 additions and 0 deletions
@@ -0,0 +1,95 @@
package space.kklochko.simple_jbdd.tests.reports;
import space.kklochko.simple_jbdd.tests.factories.meta.AbstractTestCommandMetaDataFactory;
import space.kklochko.simple_jbdd.tests.reports.fmt.AbstractTestReportFormatter;
import java.util.AbstractMap;
import java.util.ArrayList;
import org.apache.commons.lang3.StringUtils;
public class CLIReporter extends AbstractReporter {
final int terminalWidth = 80;
public CLIReporter(ArrayList<AbstractMap.SimpleEntry<AbstractTestCommandMetaDataFactory, Boolean>> metadata, AbstractTestReportFormatter formatter) {
super(metadata, formatter);
}
public void report() {
ArrayList<AbstractMap.SimpleEntry<String, Boolean>> testData = format();
ArrayList<AbstractMap.SimpleEntry<String, Boolean>> failedTestData = getFailedTests(testData);
int passed = count(testData, true);
int failed = count(testData, false);
System.out.printf("%s\n", center(" Tests "));
printTests(testData);
if(failed != 0) {
System.out.printf("\n%s\n", center(" Errors "));
printTests(failedTestData);
}
System.out.printf("\n%s\n", center(" Summary "));
System.out.print(summary(passed, failed));
}
public ArrayList<AbstractMap.SimpleEntry<String, Boolean>> format() {
ArrayList<AbstractMap.SimpleEntry<String, Boolean>> data = new ArrayList<>();
for(var pair : getMetadata()) {
boolean isPassed = pair.getValue();
getFormatter().setTestMetaData(pair.getKey().create());
getFormatter().setPassed(isPassed);
data.add(new AbstractMap.SimpleEntry<>(getFormatter().format(), isPassed));
}
return data;
}
public ArrayList<AbstractMap.SimpleEntry<String, Boolean>> getFailedTests(ArrayList<AbstractMap.SimpleEntry<String, Boolean>> testData) {
ArrayList<AbstractMap.SimpleEntry<String, Boolean>> failed = new ArrayList<>();
for(var pair : testData) {
boolean isPassed = pair.getValue();
if(isPassed) continue;
failed.add(pair);
}
return failed;
}
public int count(ArrayList<AbstractMap.SimpleEntry<String, Boolean>> testData, boolean isPassedStatus) {
int count = 0;
for(var pair : testData) {
boolean isPassed = pair.getValue();
if(isPassed == isPassedStatus)
count++;
}
return count;
}
public void printTests(ArrayList<AbstractMap.SimpleEntry<String, Boolean>> testData) {
for(var pair : testData) {
System.out.print(pair.getKey());
}
}
public String center(String content) {
return StringUtils.center(content, 80, '=');
}
public String summary(int passed, int failed) {
int all = passed + failed;
double passedPercent = (double) passed / (double) all * 100.0;
double failedPercent = (double) failed / (double) all * 100.0;
return String.format("Ran %d tests.\nPassed: %d (%.2f%%)\nFailed: %d (%.2f%%)\n", all, passed, passedPercent, failed, failedPercent);
}
}