@@ -13,7 +13,7 @@ object TestDefinition {
1313}
1414
1515class TestFrameworkLoader (loader : ClassLoader ) {
16- private val loadedJars = mutable.ArrayBuffer [Path ]()
16+ private val loadedJarsByFramework = mutable.Map .empty[ String , mutable. ArrayBuffer [Path ]]
1717 private def getClassJar (`class` : Class [? ]): Option [Path ] = for {
1818 codeSource <- Option (`class`.getProtectionDomain().getCodeSource())
1919 codeSourceUri = codeSource.getLocation().toURI()
@@ -25,22 +25,27 @@ class TestFrameworkLoader(loader: ClassLoader) {
2525 }
2626 } yield path
2727
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+
2931 def load (className : String ) = {
30- val framework =
32+ val ( framework, loadedJar) =
3133 try {
3234 val `class` = Class .forName(className, true , loader)
35+ val loadedJar = getClassJar(`class`)
3336
34- getClassJar(`class`).foreach(loadedJars += _)
35-
36- Some (`class`.getDeclaredConstructor().newInstance())
37+ (Some (`class`.getDeclaredConstructor().newInstance()), loadedJar)
3738 } catch {
38- case _ : ClassNotFoundException => None
39+ case _ : ClassNotFoundException => ( None , None )
3940 case NonFatal (e) => throw new Exception (s " Failed to load framework $className" , e)
4041 }
4142 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}" )
4449 }
4550
4651 }
0 commit comments