diff --git a/.gitignore b/.gitignore index d094a8e..55af26b 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,6 @@ #occupational hazards /projects/ /repo/ -/buildSrc/ /out/ /src/generated-sources/ /logs/ @@ -31,3 +30,4 @@ /out.log gradle.properties /**/logs/ +/test_results.html diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle new file mode 100644 index 0000000..cf012a0 --- /dev/null +++ b/buildSrc/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'groovy' +} + +repositories { + mavenCentral() + maven { url 'https://jitpack.io' } +} + +java.toolchain.languageVersion = JavaLanguageVersion.of(17) + +dependencies { + implementation 'com.github.Steppschuh:Java-Markdown-Generator:1.3.2' +} diff --git a/buildSrc/src/main/groovy/AggregateTest.groovy b/buildSrc/src/main/groovy/AggregateTest.groovy new file mode 100644 index 0000000..d14f1a5 --- /dev/null +++ b/buildSrc/src/main/groovy/AggregateTest.groovy @@ -0,0 +1,140 @@ +import groovy.xml.DOMBuilder +import groovy.xml.dom.DOMCategory +import org.gradle.api.DefaultTask +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.tasks.InputDirectory +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction + +abstract class AggregateTest extends DefaultTask { + @InputDirectory + abstract DirectoryProperty getInput() + + @OutputFile + abstract RegularFileProperty getOutput() + + @TaskAction + void exec() throws IOException { + final javas = [:] as TreeMap + final results = [:] as TreeMap + + for (def java : input.asFile.get().listFiles()) { + for (def test : java.listFiles()) { + if (!test.name.startsWith('TEST-') || !test.name.endsWith('.xml')) + continue + + def dirName = test.parentFile.name + def (javaName, javaVersion) = dirName.split('-') + javas.computeIfAbsent(javaName, { [] as SortedSet }).add(javaVersion) + + def data = DOMBuilder.parse(new StringReader(test.text)).documentElement + use(DOMCategory) { + def suite = data['@name'] + suite = suite.substring(suite.lastIndexOf('.') + 1) + def byTest = results.computeIfAbsent(suite, { [:] }) + for (def testcase : data.testcase) { + def name = testcase['@name'] + if (name.startsWith('repetition ')) + continue + def byJava = byTest.computeIfAbsent(name, { [:] }) + def byVersion = byJava.computeIfAbsent(javaName, { [:] }) + byVersion.put(javaVersion, testcase.failure.isEmpty()) + } + } + test.delete() + } + if (java.listFiles().length == 0) + java.deleteDir() + } + + def buffer = new StringBuilder() + buffer.append(""" + + + +""") + results.forEach{ suite, byTest -> + buffer << "

${suite}

\n" + buffer << "\n" + buffer << " \n" + buffer << " \n" + javas.keySet().forEach{ javaName -> + buffer << " \n" + } + buffer << " \n" + buffer << " \n" + byTest.forEach{ testName, byJava -> + buffer << " \n" + buffer << " \n" + javas.forEach{ javaName, versions -> + buffer << " \n" + } + buffer << " \n" + } + buffer << " \n" + buffer << "
Test${javaName}
${testName}\n" + def byVersion = byJava.get(javaName) + versions.forEach { ver -> + if (byVersion.containsKey(ver) && byVersion.get(ver)) { + buffer << " O${javaName} v${ver}\n" + } else { + buffer << " X${javaName} v${ver}\n" + } + } + buffer << "
\n" + + } + buffer << "" + + output.asFile.get().text = buffer + } +} \ No newline at end of file