diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/GenericRunner.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/GenericRunner.kt index 27419c02..fb2b0927 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/GenericRunner.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/GenericRunner.kt @@ -30,7 +30,7 @@ abstract class GenericTestRunner: ITestRunnerContributor { open val extraClasspath: List = emptyList() - open fun filterTestClasses(classes: List) : List = classes + open fun filterTestClasses(project: Project, context: KobaltContext, classes: List) : List = classes override fun run(project: Project, context: KobaltContext, configName: String, classpath: List) : TaskResult { @@ -69,7 +69,7 @@ abstract class GenericTestRunner: ITestRunnerContributor { // } context.logger.log(project.name, 2, "Found ${result.size} test classes") - return filterTestClasses(result.map { it.second }) + return filterTestClasses(project, context, result.map { it.second }) } /** diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JUnitRunner.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JUnitRunner.kt index bfe6d800..c5b36997 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JUnitRunner.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JUnitRunner.kt @@ -4,6 +4,10 @@ import com.beust.kobalt.TestConfig import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project +import com.beust.kobalt.maven.DependencyManager +import com.google.inject.Inject +import java.lang.reflect.Modifier +import java.net.URLClassLoader open class JUnitRunner() : GenericTestRunner() { @@ -14,5 +18,15 @@ open class JUnitRunner() : GenericTestRunner() { override fun args(project: Project, context: KobaltContext, classpath: List, testConfig: TestConfig) = findTestClasses(project, context, testConfig) + + @Inject + lateinit var dependencyManager: DependencyManager + + override fun filterTestClasses(project: Project, context: KobaltContext, classes: List) : List { + val deps = dependencyManager.testDependencies(project, context) + val cl = URLClassLoader(deps.map { it.jarFile.get().toURI().toURL() }.toTypedArray()) + return classes.filter { !Modifier.isAbstract(cl.loadClass(it).modifiers) } + } + } diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KotlinTestRunner.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KotlinTestRunner.kt index b78da1db..24e643d5 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KotlinTestRunner.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KotlinTestRunner.kt @@ -1,5 +1,8 @@ package com.beust.kobalt.internal +import com.beust.kobalt.api.KobaltContext +import com.beust.kobalt.api.Project + /** * KotlinTestRunner triggers if it finds a dependency on io.kotlintest but other than that, it just * uses the regular JUnitRunner. @@ -12,6 +15,7 @@ class KotlinTestRunner : JUnitRunner() { * KotlinTestRunner runs tests in the init{} initializer, so ignore all the extra * classes generated by the Kotlin compiler. */ - override fun filterTestClasses(classes: List) = classes.filter { ! it.contains("$") } + override fun filterTestClasses(projet: Project, context: KobaltContext, classes: List) + = classes.filter { !it.contains("$") } }