diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2017-11-11 19:13:51 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2017-11-11 19:13:51 -0800 |
commit | 21325c4dd9e52d6ae6f6b1a8ce606962922100b1 (patch) | |
tree | d38f9de27b9d5acfb5f867369cc8a0fc0fa0fdea | |
parent | f1b6f08958a3fc57d9c99c4eb49fe19261fc5643 (diff) | |
download | mill-21325c4dd9e52d6ae6f6b1a8ce606962922100b1.tar.gz mill-21325c4dd9e52d6ae6f6b1a8ce606962922100b1.tar.bz2 mill-21325c4dd9e52d6ae6f6b1a8ce606962922100b1.zip |
First set of unit tests running through Mill
-rw-r--r-- | build.sc | 21 | ||||
-rw-r--r-- | scalaplugin/src/main/scala/mill/scalaplugin/Subproject.scala | 3 | ||||
-rw-r--r-- | scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala | 27 |
3 files changed, 31 insertions, 20 deletions
@@ -5,8 +5,8 @@ import mill.discover.Discovered import mill.eval.{Evaluator, PathRef} import mill.scalaplugin.Subproject.ScalaDep import mill.util.OSet -import mill._ -import mill.scalaplugin._ +import mill.{T, _} +import mill.scalaplugin.{TestRunner, _} object Build{ trait MillSubproject extends Subproject{ @@ -16,13 +16,13 @@ object Build{ object Core extends MillSubproject { override def compileIvyDeps = T{ - super.compileIvyDeps() ++ Seq[ScalaDep]( + Seq[ScalaDep]( Dep(Mod("org.scala-lang", "scala-reflect"), scalaVersion(), configuration = "provided") ) } override def ivyDeps = T{ - super.ivyDeps() ++ Seq[ScalaDep]( + Seq[ScalaDep]( ScalaDep(Dep(Mod("com.lihaoyi", "sourcecode"), "0.1.4")), ScalaDep(Dep(Mod("com.lihaoyi", "pprint"), "0.5.3")), ScalaDep.Point(Dep(Mod("com.lihaoyi", "ammonite"), "1.0.3")), @@ -39,6 +39,19 @@ object Build{ override def projectDeps = Seq(Core) def basePath = T{ pwd / 'scalaplugin } override def sources = T{ pwd/'core/'src/'test/'scala } + override def ivyDeps = T{ + Seq[ScalaDep]( + ScalaDep(Dep(Mod("com.lihaoyi", "utest"), "0.6.0")) + ) + } + def test() = T.command{ + pprint.log(runDepClasspath().map(_.path.toString), height=999) + TestRunner.apply( + "mill.UTestFramework", + runDepClasspath().map(_.path) :+ compiled().path, + Seq(compiled().path) + ) + } } object ScalaPlugin extends MillSubproject { diff --git a/scalaplugin/src/main/scala/mill/scalaplugin/Subproject.scala b/scalaplugin/src/main/scala/mill/scalaplugin/Subproject.scala index 1cf38840..0408833a 100644 --- a/scalaplugin/src/main/scala/mill/scalaplugin/Subproject.scala +++ b/scalaplugin/src/main/scala/mill/scalaplugin/Subproject.scala @@ -242,7 +242,4 @@ trait Subproject extends Cacher{ "-usejavacp" ) } - def test() = T.command{ - TestRunner.apply("mill.UTestFramework", Seq(pwd/'core/'target/"scala-2.12"/"test-classes")) - } } diff --git a/scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala b/scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala index fb6ff772..1fc4e32e 100644 --- a/scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala +++ b/scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala @@ -2,6 +2,7 @@ package mill.scalaplugin import java.io.FileInputStream import java.lang.annotation.Annotation +import java.net.URLClassLoader import java.util.zip.ZipInputStream import ammonite.ops.{Path, ls, pwd} @@ -15,39 +16,38 @@ object TestRunner { Iterator.continually(zip.getNextEntry).takeWhile(_ != null).map(_.getName).filter(_.endsWith(".class")) } } - def runTests(framework: Framework, classpath: Seq[Path]) = { + def runTests(cl: ClassLoader, framework: Framework, classpath: Seq[Path]) = { val fingerprints = framework.fingerprints() val testClasses = classpath.flatMap { base => listClassFiles(base).flatMap { path => - val cls = Class.forName(path.stripSuffix(".class").replace('/', '.')) + val cls = cl.loadClass(path.stripSuffix(".class").replace('/', '.')) fingerprints.find { case f: SubclassFingerprint => - Class.forName(f.superclassName()).isAssignableFrom(cls) + cl.loadClass(f.superclassName()).isAssignableFrom(cls) case f: AnnotatedFingerprint => cls.isAnnotationPresent( - Class.forName(f.annotationName()).asInstanceOf[Class[Annotation]] + cl.loadClass(f.annotationName()).asInstanceOf[Class[Annotation]] ) }.map { f => (cls, f) } } } testClasses } - // "mill.UTestFramework" - // Seq(pwd/'core/'target/"scala-2.12"/"test-classes") - def apply(frameworkName: String, testClassfilePath: Seq[Path]): Unit = { - val framework = Class.forName(frameworkName) + def apply(frameworkName: String, + entireClasspath: Seq[Path], + testClassfilePath: Seq[Path]): Unit = { + val cl = new URLClassLoader(entireClasspath.map(_.toIO.toURI.toURL).toArray, getClass.getClassLoader) + + val framework = cl.loadClass(frameworkName) .newInstance() .asInstanceOf[sbt.testing.Framework] - val testClasses = runTests(framework, testClassfilePath) - - pprint.log(testClasses) + val testClasses = runTests(cl, framework, testClassfilePath) - val runner = framework.runner(Array(), Array(), getClass.getClassLoader) - println(runner) + val runner = framework.runner(Array(), Array(), cl) val tasks = runner.tasks( for((cls, fingerprint) <- testClasses.toArray) @@ -79,6 +79,7 @@ object TestRunner { val doneMsg = runner.done() if (doneMsg.trim.nonEmpty){ println(doneMsg) + println(doneMsg) } } } |