From c2594bc9e48ee3d4c4c72335d57ec1cd861f15be Mon Sep 17 00:00:00 2001 From: Andrei Pozolotin Date: Sat, 8 Nov 2014 15:00:14 -0600 Subject: [PATCH 1/2] provide isolated child classloader to address issue: aspectj tests are not runnable due to wrong classloader setup #42 --- .gitignore | 6 ++++++ .../scalatest/launching/ScalaTestLauncher.scala | 12 +++++------- 2 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa51771 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ + +.project +.settings/ +.classpath +bin/ + diff --git a/org.scala-ide.sdt.scalatest/src/scala/tools/eclipse/scalatest/launching/ScalaTestLauncher.scala b/org.scala-ide.sdt.scalatest/src/scala/tools/eclipse/scalatest/launching/ScalaTestLauncher.scala index 6595b35..a108fe6 100644 --- a/org.scala-ide.sdt.scalatest/src/scala/tools/eclipse/scalatest/launching/ScalaTestLauncher.scala +++ b/org.scala-ide.sdt.scalatest/src/scala/tools/eclipse/scalatest/launching/ScalaTestLauncher.scala @@ -46,13 +46,11 @@ object ScalaTestLauncher { try { val cpFilePath = args(0) val classpath = Source.fromFile(args(0)).getLines() - - val loader = ClassLoader.getSystemClassLoader - val method= classOf[URLClassLoader].getDeclaredMethod("addURL", classOf[URL]); //$NON-NLS-1$ - method.setAccessible(true); - classpath.foreach(cp => method.invoke(loader, new File(cp.toString).toURI.toURL)) - - val runnerClass = Class.forName("org.scalatest.tools.Runner") + + val urls = classpath.map { cp => new File(cp.toString).toURI.toURL }.toArray + val loader = new URLClassLoader(urls, ClassLoader.getSystemClassLoader) + + val runnerClass = loader.loadClass("org.scalatest.tools.Runner") val mainMethod = runnerClass.getMethod("main", args.getClass()) //$NON-NLS-1$ mainMethod.setAccessible(true) mainMethod.invoke(null, Source.fromFile(args(1)).getLines().toArray) From 7410d7771dd2895b7a061ea53dd9358f45929000 Mon Sep 17 00:00:00 2001 From: Andrei Pozolotin Date: Sat, 8 Nov 2014 18:35:33 -0600 Subject: [PATCH 2/2] override TCCL for test invocation --- .../tools/eclipse/scalatest/launching/ScalaTestLauncher.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/org.scala-ide.sdt.scalatest/src/scala/tools/eclipse/scalatest/launching/ScalaTestLauncher.scala b/org.scala-ide.sdt.scalatest/src/scala/tools/eclipse/scalatest/launching/ScalaTestLauncher.scala index a108fe6..f5fdb91 100644 --- a/org.scala-ide.sdt.scalatest/src/scala/tools/eclipse/scalatest/launching/ScalaTestLauncher.scala +++ b/org.scala-ide.sdt.scalatest/src/scala/tools/eclipse/scalatest/launching/ScalaTestLauncher.scala @@ -50,6 +50,8 @@ object ScalaTestLauncher { val urls = classpath.map { cp => new File(cp.toString).toURI.toURL }.toArray val loader = new URLClassLoader(urls, ClassLoader.getSystemClassLoader) + Thread.currentThread().setContextClassLoader(loader) + val runnerClass = loader.loadClass("org.scalatest.tools.Runner") val mainMethod = runnerClass.getMethod("main", args.getClass()) //$NON-NLS-1$ mainMethod.setAccessible(true)