@@ -13,7 +13,7 @@ object TestDefinition {
13
13
}
14
14
15
15
class TestFrameworkLoader (loader : ClassLoader ) {
16
- private val loadedJars = mutable.ArrayBuffer [Path ]()
16
+ private val loadedJarsByFramework = mutable.Map .empty[ String , mutable. ArrayBuffer [Path ]]
17
17
private def getClassJar (`class` : Class [? ]): Option [Path ] = for {
18
18
codeSource <- Option (`class`.getProtectionDomain().getCodeSource())
19
19
codeSourceUri = codeSource.getLocation().toURI()
@@ -25,22 +25,27 @@ class TestFrameworkLoader(loader: ClassLoader) {
25
25
}
26
26
} yield path
27
27
28
- def getLoadedJars (): Array [Path ] = loadedJars.toArray
28
+ def getLoadedJarsByFramework (): Map [String , Array [Path ]] =
29
+ loadedJarsByFramework.view.map { case (frameworkName, loadedJars) => frameworkName -> loadedJars.toArray }.toMap
30
+
29
31
def load (className : String ) = {
30
- val framework =
32
+ val ( framework, loadedJar) =
31
33
try {
32
34
val `class` = Class .forName(className, true , loader)
35
+ val loadedJar = getClassJar(`class`)
33
36
34
- getClassJar(`class`).foreach(loadedJars += _)
35
-
36
- Some (`class`.getDeclaredConstructor().newInstance())
37
+ (Some (`class`.getDeclaredConstructor().newInstance()), loadedJar)
37
38
} catch {
38
- case _ : ClassNotFoundException => None
39
+ case _ : ClassNotFoundException => ( None , None )
39
40
case NonFatal (e) => throw new Exception (s " Failed to load framework $className" , e)
40
41
}
41
42
framework.map {
42
- case framework : Framework => framework
43
- case _ => throw new Exception (s " $className does not implement ${classOf [Framework ].getName}" )
43
+ case framework : Framework =>
44
+ loadedJar.foreach(loadedJarsByFramework.getOrElseUpdate(className, mutable.ArrayBuffer .empty) += _)
45
+
46
+ framework
47
+
48
+ case _ => throw new Exception (s " $className does not implement ${classOf [Framework ].getName}" )
44
49
}
45
50
46
51
}
0 commit comments