summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-11-11 19:13:51 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2017-11-11 19:13:51 -0800
commit21325c4dd9e52d6ae6f6b1a8ce606962922100b1 (patch)
treed38f9de27b9d5acfb5f867369cc8a0fc0fa0fdea
parentf1b6f08958a3fc57d9c99c4eb49fe19261fc5643 (diff)
downloadmill-21325c4dd9e52d6ae6f6b1a8ce606962922100b1.tar.gz
mill-21325c4dd9e52d6ae6f6b1a8ce606962922100b1.tar.bz2
mill-21325c4dd9e52d6ae6f6b1a8ce606962922100b1.zip
First set of unit tests running through Mill
-rw-r--r--build.sc21
-rw-r--r--scalaplugin/src/main/scala/mill/scalaplugin/Subproject.scala3
-rw-r--r--scalaplugin/src/main/scala/mill/scalaplugin/TestRunner.scala27
3 files changed, 31 insertions, 20 deletions
diff --git a/build.sc b/build.sc
index f31fb69f..0ce695c7 100644
--- a/build.sc
+++ b/build.sc
@@ -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)
}
}
}