90 lines
3.5 KiB
Java
90 lines
3.5 KiB
Java
/*
|
|
* Decompiled with CFR 0.152.
|
|
*
|
|
* Could not load the following classes:
|
|
* com.google.common.base.Stopwatch
|
|
*/
|
|
package net.minecraft.gametest.framework;
|
|
|
|
import com.google.common.base.Stopwatch;
|
|
import java.io.File;
|
|
import java.time.Instant;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.concurrent.TimeUnit;
|
|
import javax.xml.parsers.DocumentBuilderFactory;
|
|
import javax.xml.parsers.ParserConfigurationException;
|
|
import javax.xml.transform.Transformer;
|
|
import javax.xml.transform.TransformerException;
|
|
import javax.xml.transform.TransformerFactory;
|
|
import javax.xml.transform.dom.DOMSource;
|
|
import javax.xml.transform.stream.StreamResult;
|
|
import net.minecraft.gametest.framework.GameTestInfo;
|
|
import net.minecraft.gametest.framework.TestReporter;
|
|
import org.w3c.dom.Document;
|
|
import org.w3c.dom.Element;
|
|
|
|
public class JUnitLikeTestReporter
|
|
implements TestReporter {
|
|
private final Document document;
|
|
private final Element testSuite;
|
|
private final Stopwatch stopwatch;
|
|
private final File destination;
|
|
|
|
public JUnitLikeTestReporter(File destination) throws ParserConfigurationException {
|
|
this.destination = destination;
|
|
this.document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
|
|
this.testSuite = this.document.createElement("testsuite");
|
|
Element testSuites = this.document.createElement("testsuite");
|
|
testSuites.appendChild(this.testSuite);
|
|
this.document.appendChild(testSuites);
|
|
this.testSuite.setAttribute("timestamp", DateTimeFormatter.ISO_INSTANT.format(Instant.now()));
|
|
this.stopwatch = Stopwatch.createStarted();
|
|
}
|
|
|
|
private Element createTestCase(GameTestInfo testInfo, String name) {
|
|
Element testCase = this.document.createElement("testcase");
|
|
testCase.setAttribute("name", name);
|
|
testCase.setAttribute("classname", testInfo.getStructure().toString());
|
|
testCase.setAttribute("time", String.valueOf((double)testInfo.getRunTime() / 1000.0));
|
|
this.testSuite.appendChild(testCase);
|
|
return testCase;
|
|
}
|
|
|
|
@Override
|
|
public void onTestFailed(GameTestInfo testInfo) {
|
|
String name = testInfo.id().toString();
|
|
String message = testInfo.getError().getMessage();
|
|
Element result = this.document.createElement(testInfo.isRequired() ? "failure" : "skipped");
|
|
result.setAttribute("message", "(" + testInfo.getTestBlockPos().toShortString() + ") " + message);
|
|
Element testCase = this.createTestCase(testInfo, name);
|
|
testCase.appendChild(result);
|
|
}
|
|
|
|
@Override
|
|
public void onTestSuccess(GameTestInfo testInfo) {
|
|
String name = testInfo.id().toString();
|
|
this.createTestCase(testInfo, name);
|
|
}
|
|
|
|
@Override
|
|
public void finish() {
|
|
this.stopwatch.stop();
|
|
this.testSuite.setAttribute("time", String.valueOf((double)this.stopwatch.elapsed(TimeUnit.MILLISECONDS) / 1000.0));
|
|
try {
|
|
this.save(this.destination);
|
|
}
|
|
catch (TransformerException exception) {
|
|
throw new Error("Couldn't save test report", exception);
|
|
}
|
|
}
|
|
|
|
public void save(File file) throws TransformerException {
|
|
TransformerFactory transformerFactory = TransformerFactory.newInstance();
|
|
Transformer transformer = transformerFactory.newTransformer();
|
|
DOMSource source = new DOMSource(this.document);
|
|
StreamResult result = new StreamResult(file);
|
|
transformer.transform(source, result);
|
|
}
|
|
}
|
|
|