mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 16:28:12 -07:00
JUnit: eliminate classes with no @Test annotations.
Otherwise, JUnit 4 throws :-(
This commit is contained in:
parent
f34a220ff4
commit
ddbe2e376e
2 changed files with 17 additions and 4 deletions
|
@ -25,7 +25,8 @@ abstract class GenericTestRunner : ITestRunnerContributor {
|
|||
if (project.testDependencies.any { it.id.contains(dependencyName)}) IAffinity.DEFAULT_POSITIVE_AFFINITY
|
||||
else 0
|
||||
|
||||
protected fun findTestClasses(project: Project, classpath: List<IClasspathDependency>): List<String> {
|
||||
protected fun findTestClasses(project: Project, classpath: List<IClasspathDependency>,
|
||||
classFilter : (Class<*>) -> Boolean = {true}): List<String> {
|
||||
val path = KFiles.joinDir(project.directory, project.buildDirectory, KFiles.TEST_CLASSES_DIR)
|
||||
val result = KFiles.findRecursively(File(path), arrayListOf(File(".")), {
|
||||
file -> file.endsWith(".class")
|
||||
|
@ -36,8 +37,11 @@ abstract class GenericTestRunner : ITestRunnerContributor {
|
|||
// Only keep classes with a parameterless constructor
|
||||
val urls = arrayOf(File(path).toURI().toURL()) +
|
||||
classpath.map { it.jarFile.get().toURI().toURL() }
|
||||
URLClassLoader(urls).loadClass(it).getConstructor()
|
||||
true
|
||||
val cl = URLClassLoader(urls).loadClass(it)
|
||||
val constructor = cl.getConstructor()
|
||||
// If we get past this, we have a default constructor
|
||||
|
||||
classFilter(cl)
|
||||
} catch(ex: Exception) {
|
||||
log(2, "Skipping non test class $it: ${ex.message}")
|
||||
false
|
||||
|
|
|
@ -9,6 +9,15 @@ open public class JUnitRunner() : GenericTestRunner() {
|
|||
|
||||
override val dependencyName = "junit"
|
||||
|
||||
override fun args(project: Project, classpath: List<IClasspathDependency>) = findTestClasses(project, classpath)
|
||||
override fun args(project: Project, classpath: List<IClasspathDependency>)
|
||||
= findTestClasses(project, classpath) {
|
||||
// Only return a class if it contains at least one @Test method, otherwise
|
||||
// JUnit 4 throws an exception :-(
|
||||
it.declaredMethods.flatMap {
|
||||
it.annotations.toList()
|
||||
}.filter {
|
||||
ann: Annotation -> ann.javaClass.name.contains("Test")
|
||||
}.size > 0
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue