summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild.sc2
-rw-r--r--core/test/src/mill/define/CacherTests.scala3
-rw-r--r--core/test/src/mill/eval/CrossTests.scala20
-rw-r--r--core/test/src/mill/eval/EvaluationTests.scala12
-rw-r--r--core/test/src/mill/eval/FailureTests.scala13
-rw-r--r--core/test/src/mill/eval/JavaCompileJarTests.scala15
-rw-r--r--core/test/src/mill/eval/ModuleTests.scala12
-rw-r--r--core/test/src/mill/eval/TaskTests.scala15
-rw-r--r--core/test/src/mill/util/TestEvaluator.scala26
-rw-r--r--scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala15
-rw-r--r--scalalib/test/src/mill/scalalib/GenIdeaTests.scala5
-rw-r--r--scalalib/test/src/mill/scalalib/HelloWorldTests.scala30
12 files changed, 65 insertions, 103 deletions
diff --git a/build.sc b/build.sc
index c594930c..c0a2a55a 100755
--- a/build.sc
+++ b/build.sc
@@ -180,7 +180,7 @@ val assemblyProjects = Seq(scalalib, scalajslib)
def assemblyClasspath = mill.define.Task.traverse(assemblyProjects)(_.runClasspath)
def assemblyBase(classpath: Agg[Path], extraArgs: String)
- (implicit ctx: mill.util.Ctx.DestCtx) = {
+ (implicit ctx: mill.util.Ctx.Dest) = {
createAssembly(
classpath,
prependShellScript =
diff --git a/core/test/src/mill/define/CacherTests.scala b/core/test/src/mill/define/CacherTests.scala
index a14f2f34..ce97202b 100644
--- a/core/test/src/mill/define/CacherTests.scala
+++ b/core/test/src/mill/define/CacherTests.scala
@@ -28,8 +28,7 @@ object CacherTests extends TestSuite{
val tests = Tests{
def eval[T <: TestUtil.TestBuild, V](mapping: T, v: Task[V])
(implicit discover: Discover[T], tp: TestPath) = {
- val workspace = ammonite.ops.pwd / 'target / 'workspace / tp.value
- val evaluator = new TestEvaluator(mapping, workspace)
+ val evaluator = new TestEvaluator(mapping)
evaluator(v).right.get._1
}
diff --git a/core/test/src/mill/eval/CrossTests.scala b/core/test/src/mill/eval/CrossTests.scala
index af13474b..c9f7cb70 100644
--- a/core/test/src/mill/eval/CrossTests.scala
+++ b/core/test/src/mill/eval/CrossTests.scala
@@ -11,10 +11,7 @@ import utest._
object CrossTests extends TestSuite{
val tests = Tests{
'singleCross - {
- val check = new TestEvaluator(
- singleCross,
- pwd / 'target / 'workspace / "cross-tests" / "inputs"
- )
+ val check = new TestEvaluator(singleCross)
val Right(("210", 1)) = check.apply(singleCross.cross("210").suffix)
val Right(("211", 1)) = check.apply(singleCross.cross("211").suffix)
@@ -22,10 +19,7 @@ object CrossTests extends TestSuite{
}
'crossResolved - {
- val check = new TestEvaluator(
- crossResolved,
- pwd / 'target / 'workspace / "cross-tests" / "crossResolved"
- )
+ val check = new TestEvaluator(crossResolved)
val Right(("2.10", 1)) = check.apply(crossResolved.foo("2.10").suffix)
val Right(("2.11", 1)) = check.apply(crossResolved.foo("2.11").suffix)
@@ -38,10 +32,7 @@ object CrossTests extends TestSuite{
'doubleCross - {
- val check = new TestEvaluator(
- doubleCross,
- pwd / 'target / 'workspace / "cross-tests" / "doubleCross"
- )
+ val check = new TestEvaluator(doubleCross)
val Right(("210_jvm", 1)) = check.apply(doubleCross.cross("210", "jvm").suffix)
val Right(("210_js", 1)) = check.apply(doubleCross.cross("210", "js").suffix)
@@ -53,10 +44,7 @@ object CrossTests extends TestSuite{
}
'nestedCrosses - {
- val check = new TestEvaluator(
- nestedCrosses,
- pwd / 'target / 'workspace / "cross-tests" / "nestedCrosses"
- )
+ val check = new TestEvaluator(nestedCrosses)
val Right(("210_jvm", 1)) = check.apply(nestedCrosses.cross("210").cross2("jvm").suffix)
val Right(("210_js", 1)) = check.apply(nestedCrosses.cross("210").cross2("js").suffix)
diff --git a/core/test/src/mill/eval/EvaluationTests.scala b/core/test/src/mill/eval/EvaluationTests.scala
index 9fabe623..5b9936cb 100644
--- a/core/test/src/mill/eval/EvaluationTests.scala
+++ b/core/test/src/mill/eval/EvaluationTests.scala
@@ -13,11 +13,9 @@ import ammonite.ops._
object EvaluationTests extends TestSuite{
class Checker[T <: TestUtil.TestBuild](module: T)
(implicit tp: TestPath, discover: Discover[T]) {
- val workspace = pwd / 'target / 'workspace / tp.value
- rm(Path(workspace, pwd))
// Make sure data is persisted even if we re-create the evaluator each time
- def evaluator = new TestEvaluator(module, workspace).evaluator
+ def evaluator = new TestEvaluator(module).evaluator
def apply(target: Task[_], expValue: Any,
expEvaled: Agg[Task[_]],
@@ -209,9 +207,9 @@ object EvaluationTests extends TestSuite{
checker(foo, Seq("base", "object"), Agg(foo), extraEvaled = -1)
- val public = ammonite.ops.read(checker.workspace / 'foo / "meta.json")
+ val public = ammonite.ops.read(checker.evaluator.outPath / 'foo / "meta.json")
val overriden = ammonite.ops.read(
- checker.workspace / 'foo /
+ checker.evaluator.outPath / 'foo /
'overriden / "mill.util.TestGraphs.BaseModule#foo" / "meta.json"
)
assert(
@@ -237,9 +235,9 @@ object EvaluationTests extends TestSuite{
secondRunNoOp = false
)
- val public = ammonite.ops.read(checker.workspace / 'cmd / "meta.json")
+ val public = ammonite.ops.read(checker.evaluator.outPath / 'cmd / "meta.json")
val overriden = ammonite.ops.read(
- checker.workspace / 'cmd /
+ checker.evaluator.outPath / 'cmd /
'overriden / "mill.util.TestGraphs.BaseModule#cmd" / "meta.json"
)
assert(
diff --git a/core/test/src/mill/eval/FailureTests.scala b/core/test/src/mill/eval/FailureTests.scala
index e7c231ee..48209b4e 100644
--- a/core/test/src/mill/eval/FailureTests.scala
+++ b/core/test/src/mill/eval/FailureTests.scala
@@ -7,18 +7,12 @@ import utest.framework.TestPath
import mill.util.TestEvaluator.implicitDisover
object FailureTests extends TestSuite{
- def workspace(implicit tp: TestPath) = {
- ammonite.ops.pwd / 'target / 'workspace / 'failure / implicitly[TestPath].value
- }
-
-
val tests = Tests{
val graphs = new mill.util.TestGraphs()
import graphs._
'evaluateSingle - {
- ammonite.ops.rm(ammonite.ops.Path(workspace, ammonite.ops.pwd))
- val check = new TestEvaluator(singleton, workspace)
+ val check = new TestEvaluator(singleton)
check.fail(
target = singleton.single,
expectedFailCount = 0,
@@ -53,8 +47,7 @@ object FailureTests extends TestSuite{
)
}
'evaluatePair - {
- val check = new TestEvaluator(pair, workspace)
- rm(Path(workspace, pwd))
+ val check = new TestEvaluator(pair)
check.fail(
pair.down,
expectedFailCount = 0,
@@ -95,7 +88,7 @@ object FailureTests extends TestSuite{
def right = T{ task() + left() + T.ctx().dest.toString().length }
}
- val check = new TestEvaluator(build, workspace)
+ val check = new TestEvaluator(build)
val Right(_) = check(build.left)
val Left(Result.Exception(e, _)) = check(build.right)
assert(e.getMessage.contains("`dest` can only be used in one place"))
diff --git a/core/test/src/mill/eval/JavaCompileJarTests.scala b/core/test/src/mill/eval/JavaCompileJarTests.scala
index ba80cc3c..9d1134b8 100644
--- a/core/test/src/mill/eval/JavaCompileJarTests.scala
+++ b/core/test/src/mill/eval/JavaCompileJarTests.scala
@@ -21,11 +21,10 @@ object JavaCompileJarTests extends TestSuite{
val tests = Tests{
'javac {
- val workspacePath = pwd / 'target / 'workspace / 'javac
val javacSrcPath = pwd / 'core / 'test / 'resources / 'examples / 'javac
- val javacDestPath = workspacePath / 'src
+ val javacDestPath = TestEvaluator.getOutPath() / 'src
- mkdir(pwd / 'target / 'workspace / 'javac)
+ mkdir(javacDestPath / up)
cp(javacSrcPath, javacDestPath)
object Build extends TestUtil.BaseModule{
@@ -49,12 +48,11 @@ object JavaCompileJarTests extends TestSuite{
import Build._
+ var evaluator = new TestEvaluator(Build)
def eval[T](t: Task[T]) = {
- val evaluator = new TestEvaluator(Build, workspacePath)
evaluator.apply(t)
}
def check(targets: Agg[Task[_]], expected: Agg[Task[_]]) = {
- val evaluator = new TestEvaluator(Build, workspacePath)
evaluator.check(targets, expected)
}
@@ -90,6 +88,9 @@ object JavaCompileJarTests extends TestSuite{
append(resourceRootPath / "hello.txt", " ")
check(targets = Agg(jar), expected = Agg(jar))
+ // You can swap evaluators halfway without any ill effects
+ evaluator = new TestEvaluator(Build)
+
// Asking for an intermediate target forces things to be build up to that
// target only; these are re-used for any downstream targets requested
append(sourceRootPath / "Bar.java", "\nclass BarTwo{}")
@@ -104,7 +105,7 @@ object JavaCompileJarTests extends TestSuite{
check(targets = Agg(allSources), expected = Agg(allSources))
check(targets = Agg(jar), expected = Agg(classFiles, jar))
- val jarContents = %%('jar, "-tf", workspacePath/'jar/'dest/"out.jar")(workspacePath).out.string
+ val jarContents = %%('jar, "-tf", evaluator.outPath/'jar/'dest/"out.jar")(evaluator.outPath).out.string
val expectedJarContents =
"""META-INF/MANIFEST.MF
|hello.txt
@@ -116,7 +117,7 @@ object JavaCompileJarTests extends TestSuite{
|""".stripMargin
assert(jarContents == expectedJarContents)
- val executed = %%('java, "-cp", workspacePath/'jar/'dest/"out.jar", "test.Foo")(workspacePath).out.string
+ val executed = %%('java, "-cp", evaluator.outPath/'jar/'dest/"out.jar", "test.Foo")(evaluator.outPath).out.string
assert(executed == (31337 + 271828) + "\n")
for(i <- 0 until 3){
diff --git a/core/test/src/mill/eval/ModuleTests.scala b/core/test/src/mill/eval/ModuleTests.scala
index c7e85169..b452a854 100644
--- a/core/test/src/mill/eval/ModuleTests.scala
+++ b/core/test/src/mill/eval/ModuleTests.scala
@@ -20,17 +20,13 @@ object ModuleTests extends TestSuite{
val tests = Tests {
rm(TestEvaluator.externalOutPath)
'externalModuleTargetsAreNamespacedByModulePackagePath - {
- val check = new TestEvaluator(
- Build,
- pwd / 'target / 'external
- )
+ val check = new TestEvaluator(Build)
val Right((30, 1)) = check.apply(Build.z)
- val base = check.evaluator.outPath
assert(
- read(base / 'z / "meta.json").contains("30"),
- read(base / 'mill / 'eval / 'ModuleTests / 'ExternalModule / 'x / "meta.json").contains("13"),
- read(base / 'mill / 'eval / 'ModuleTests / 'ExternalModule / 'inner / 'y / "meta.json").contains("17")
+ read(check.evaluator.outPath / 'z / "meta.json").contains("30"),
+ read(TestEvaluator.externalOutPath / 'mill / 'eval / 'ModuleTests / 'ExternalModule / 'x / "meta.json").contains("13"),
+ read(TestEvaluator.externalOutPath / 'mill / 'eval / 'ModuleTests / 'ExternalModule / 'inner / 'y / "meta.json").contains("17")
)
}
'externalModuleMustBeGlobalStatic - {
diff --git a/core/test/src/mill/eval/TaskTests.scala b/core/test/src/mill/eval/TaskTests.scala
index af2e19a9..114a2910 100644
--- a/core/test/src/mill/eval/TaskTests.scala
+++ b/core/test/src/mill/eval/TaskTests.scala
@@ -56,10 +56,7 @@ object TaskTests extends TestSuite{
'inputs - {
// Inputs always re-evaluate, including forcing downstream cached Targets
// to re-evaluate, but normal Tasks behind a Target run once then are cached
- val check = new TestEvaluator(
- build,
- pwd / 'target / 'workspace / "task-tests" / "inputs"
- )
+ val check = new TestEvaluator(build)
val Right((1, 1)) = check.apply(build.taskInput)
val Right((2, 1)) = check.apply(build.taskInput)
@@ -72,10 +69,7 @@ object TaskTests extends TestSuite{
'persistent - {
// Persistent tasks keep the working dir around between runs
- val check = new TestEvaluator(
- build,
- pwd / 'target / 'workspace / "task-tests" / "persistent"
- )
+ val check = new TestEvaluator(build)
val Right((1, 1)) = check.apply(build.persistent)
val Right((2, 1)) = check.apply(build.persistent)
val Right((3, 1)) = check.apply(build.persistent)
@@ -87,10 +81,7 @@ object TaskTests extends TestSuite{
'worker - {
// Persistent task
- def check = new TestEvaluator(
- build,
- pwd / 'target / 'workspace / "task-tests" / "worker"
- )
+ def check = new TestEvaluator(build)
val Right((2, 1)) = check.apply(build.noisyWorkerDownstream)
val Right((3, 1)) = check.apply(build.noisyWorkerDownstream)
diff --git a/core/test/src/mill/util/TestEvaluator.scala b/core/test/src/mill/util/TestEvaluator.scala
index dd113b55..5684b4fd 100644
--- a/core/test/src/mill/util/TestEvaluator.scala
+++ b/core/test/src/mill/util/TestEvaluator.scala
@@ -6,17 +6,37 @@ import mill.define.{Discover, Input, Target, Task}
import mill.eval.{Evaluator, Result}
import mill.util.Strict.Agg
import utest.assert
+import utest.framework.TestPath
import language.experimental.macros
object TestEvaluator{
implicit def implicitDisover[T]: Discover[T] = macro applyImpl[T]
val externalOutPath = pwd / 'target / 'external
+
+ def getOutPath()(implicit fullName: sourcecode.FullName,
+ tp: TestPath) = {
+ pwd / 'target / 'workspace / (fullName.value.split('.') ++ tp.value)
+ }
+ def getOutPathStatic()(implicit fullName: sourcecode.FullName) = {
+ pwd / 'target / 'workspace / fullName.value.split('.')
+ }
+
+ def static[T <: TestUtil.TestBuild](module: T)
+ (implicit discover: Discover[T],
+ fullName: sourcecode.FullName) = {
+ new TestEvaluator[T](module)(discover, fullName, TestPath(Nil))
+ }
}
-class TestEvaluator[T <: TestUtil.TestBuild](module: T, workspacePath: Path)
- (implicit discover: Discover[T]){
+
+class TestEvaluator[T <: TestUtil.TestBuild](module: T)
+ (implicit discover: Discover[T],
+ fullName: sourcecode.FullName,
+ tp: TestPath){
+ val outPath = TestEvaluator.getOutPath()
+
// val logger = DummyLogger
val logger = new PrintLogger(true, ammonite.util.Colors.Default, System.out, System.out, System.err)
- val evaluator = new Evaluator(workspacePath, TestEvaluator.externalOutPath, module, discover, logger)
+ val evaluator = new Evaluator(outPath, TestEvaluator.externalOutPath, module, discover, logger)
def apply[T](t: Task[T]): Either[Result.Failing, (T, Int)] = {
val evaluated = evaluator.evaluate(Agg(t))
diff --git a/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala b/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala
index 89191ad2..18fbc269 100644
--- a/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala
+++ b/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala
@@ -17,10 +17,10 @@ import scala.collection.JavaConverters._
object HelloJSWorldTests extends TestSuite {
-
+ val workspacePath = TestEvaluator.getOutPathStatic()
trait HelloJSWorldModule extends ScalaJSModule with PublishModule {
- override def millSourcePath = HelloJSWorldTests.workspacePath
+ override def millSourcePath = workspacePath
override def mainClass = Some("Main")
}
@@ -77,14 +77,11 @@ object HelloJSWorldTests extends TestSuite {
}
val millSourcePath = pwd / 'scalajslib / 'test / 'resources / "hello-js-world"
- val workspacePath = pwd / 'target / 'workspace / "hello-js-world"
- val outputPath = workspacePath / 'out
- val mainObject = workspacePath / 'src / "Main.scala"
- val helloWorldEvaluator = new TestEvaluator(
- HelloJSWorld,
- workspacePath,
- )
+ val helloWorldEvaluator = TestEvaluator.static(HelloJSWorld)
+
+
+ val mainObject = helloWorldEvaluator.outPath / 'src / "Main.scala"
class Console {
val out = new StringWriter()
diff --git a/scalalib/test/src/mill/scalalib/GenIdeaTests.scala b/scalalib/test/src/mill/scalalib/GenIdeaTests.scala
index ea8cfc82..13c988bc 100644
--- a/scalalib/test/src/mill/scalalib/GenIdeaTests.scala
+++ b/scalalib/test/src/mill/scalalib/GenIdeaTests.scala
@@ -19,10 +19,7 @@ object GenIdeaTests extends TestSuite {
object HelloWorld extends TestUtil.BaseModule with HelloWorldModule
- val helloWorldEvaluator = new TestEvaluator(
- HelloWorld,
- outPath
- )
+ val helloWorldEvaluator = TestEvaluator.static(HelloWorld)
def tests: Tests = Tests {
'genIdeaTests - {
diff --git a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala b/scalalib/test/src/mill/scalalib/HelloWorldTests.scala
index 14012809..a56bc66e 100644
--- a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala
+++ b/scalalib/test/src/mill/scalalib/HelloWorldTests.scala
@@ -82,30 +82,12 @@ object HelloWorldTests extends TestSuite {
- val helloWorldEvaluator = new TestEvaluator(
- HelloWorld,
- outPath
- )
- val helloWorldWithMainEvaluator = new TestEvaluator(
- HelloWorldWithMain,
- outPath
- )
- val helloWorldWithMainAssemblyEvaluator = new TestEvaluator(
- HelloWorldWithMainAssembly,
- outPath
- )
- val helloWorldFatalEvaluator = new TestEvaluator(
- HelloWorldFatalWarnings,
- outPath
- )
- val helloWorldOverrideEvaluator = new TestEvaluator(
- HelloWorldScalaOverride,
- outPath
- )
- val helloWorldCrossEvaluator = new TestEvaluator(
- CrossHelloWorld,
- outPath
- )
+ val helloWorldEvaluator = TestEvaluator.static(HelloWorld)
+ val helloWorldWithMainEvaluator = TestEvaluator.static(HelloWorldWithMain)
+ val helloWorldWithMainAssemblyEvaluator = TestEvaluator.static(HelloWorldWithMainAssembly)
+ val helloWorldFatalEvaluator = TestEvaluator.static(HelloWorldFatalWarnings)
+ val helloWorldOverrideEvaluator = TestEvaluator.static(HelloWorldScalaOverride)
+ val helloWorldCrossEvaluator = TestEvaluator.static(CrossHelloWorld)
def tests: Tests = Tests {