diff options
-rw-r--r-- | core/src/mill/define/Module.scala | 17 | ||||
-rw-r--r-- | core/test/src/mill/eval/ModuleTests.scala | 47 | ||||
-rw-r--r-- | core/test/src/mill/util/TestEvaluator.scala | 8 | ||||
-rw-r--r-- | core/test/src/mill/util/TestUtil.scala | 2 | ||||
-rw-r--r-- | scalajslib/src/mill/scalajslib/ScalaJSBridge.scala | 2 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/ScalaWorkerApi.scala | 2 |
6 files changed, 69 insertions, 9 deletions
diff --git a/core/src/mill/define/Module.scala b/core/src/mill/define/Module.scala index 09e8e974..11a98d95 100644 --- a/core/src/mill/define/Module.scala +++ b/core/src/mill/define/Module.scala @@ -95,10 +95,9 @@ object BaseModule{ class BaseModule(basePath0: Path) (implicit millModuleEnclosing0: sourcecode.Enclosing, millModuleLine0: sourcecode.Line, - millName0: sourcecode.Name, - overrides0: Overrides) + millName0: sourcecode.Name) extends Module()( - mill.define.Ctx.make(implicitly, implicitly, implicitly, BasePath(basePath0), Segments(), implicitly) + mill.define.Ctx.make(implicitly, implicitly, implicitly, BasePath(basePath0), Segments(), Overrides(0)) ){ // A BaseModule should provide an empty Segments list to it's children, since // it is the root of the module tree, and thus must not include it's own @@ -107,4 +106,16 @@ class BaseModule(basePath0: Path) override def basePath = millOuterCtx.basePath override implicit def millModuleBasePath: BasePath = BasePath(basePath) implicit def millImplicitBaseModule: BaseModule.Implicit = BaseModule.Implicit(this) +} + +class ExternalModule(implicit millModuleEnclosing0: sourcecode.Enclosing, + millModuleLine0: sourcecode.Line, + millName0: sourcecode.Name) extends BaseModule(ammonite.ops.pwd){ + assert( + !" #".exists(millModuleEnclosing0.value.contains(_)), + "External modules must be at a top-level static path, not " + millModuleEnclosing0.value + ) + override implicit def millModuleSegments = { + Segments(millModuleEnclosing0.value.split('.').map(Segment.Label):_*) + } }
\ No newline at end of file diff --git a/core/test/src/mill/eval/ModuleTests.scala b/core/test/src/mill/eval/ModuleTests.scala new file mode 100644 index 00000000..110e8c79 --- /dev/null +++ b/core/test/src/mill/eval/ModuleTests.scala @@ -0,0 +1,47 @@ +package mill.eval + +import ammonite.ops._ +import mill.util.{TestEvaluator, TestUtil} +import mill.T +import mill.util.TestEvaluator.implicitDisover +import utest._ + + +object ModuleTests extends TestSuite{ + object ExternalModule extends mill.define.ExternalModule { + def x = T{13} + object inner extends mill.Module{ + def y = T{17} + } + } + object Build extends TestUtil.BaseModule{ + def z = T{ ExternalModule.x() + ExternalModule.inner.y() } + } + val tests = Tests { + 'externalModuleTargetsAreNamespacedByModulePackagePath - { + val check = new TestEvaluator( + Build, + pwd / 'target / 'workspace / "module-tests" / "externalModule", + pwd + ) + + val Right((30, 1)) = check.apply(Build.z) + val base = check.evaluator.workspacePath + 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") + ) + } + 'externalModuleMustBeGlobalStatic - { + + + object Build extends mill.define.ExternalModule { + + def z = T{ ExternalModule.x() + ExternalModule.inner.y() } + } + + intercept[java.lang.AssertionError]{ Build } + } + } +} diff --git a/core/test/src/mill/util/TestEvaluator.scala b/core/test/src/mill/util/TestEvaluator.scala index 2301efe6..41830d48 100644 --- a/core/test/src/mill/util/TestEvaluator.scala +++ b/core/test/src/mill/util/TestEvaluator.scala @@ -9,10 +9,10 @@ import language.experimental.macros object TestEvaluator{ implicit def implicitDisover[T]: Discover[T] = macro applyImpl[T] } -class TestEvaluator[T <: TestUtil.BaseModule](module: T, - workspacePath: Path, - basePath: Path) - (implicit discover: Discover[T]){ +class TestEvaluator[T <: TestUtil.TestBuild](module: T, + workspacePath: Path, + basePath: Path) + (implicit discover: Discover[T]){ val evaluator = new Evaluator(workspacePath, basePath, module, discover, DummyLogger) // val evaluator = new Evaluator(workspacePath, basePath, module, discover, new PrintLogger(true, ammonite.util.Colors.Default, System.out, System.out, System.err)) def apply[T](t: Task[T]): Either[Result.Failing, (T, Int)] = { diff --git a/core/test/src/mill/util/TestUtil.scala b/core/test/src/mill/util/TestUtil.scala index 1af12a74..3a025a91 100644 --- a/core/test/src/mill/util/TestUtil.scala +++ b/core/test/src/mill/util/TestUtil.scala @@ -8,11 +8,13 @@ import mill.util.Strict.Agg import scala.collection.mutable object TestUtil { + trait TestBuild extends mill.define.Module class BaseModule(implicit millModuleEnclosing0: sourcecode.Enclosing, millModuleLine0: sourcecode.Line, millName0: sourcecode.Name, overrides: Overrides) extends mill.define.BaseModule(ammonite.ops.pwd / millModuleEnclosing0.value) + with TestBuild object test{ diff --git a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala index 10dd42d6..6b471164 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala @@ -66,7 +66,7 @@ trait ScalaJSBridge { } -object ScalaJSBridge extends mill.define.BaseModule(ammonite.ops.pwd) { +object ScalaJSBridge extends mill.define.ExternalModule { def scalaJSBridge = T.worker { new ScalaJSWorker() } } diff --git a/scalalib/src/mill/scalalib/ScalaWorkerApi.scala b/scalalib/src/mill/scalalib/ScalaWorkerApi.scala index 21ba45e1..7db48a41 100644 --- a/scalalib/src/mill/scalalib/ScalaWorkerApi.scala +++ b/scalalib/src/mill/scalalib/ScalaWorkerApi.scala @@ -14,7 +14,7 @@ import mill.eval.PathRef import mill.scalalib.Lib.resolveDependencies import mill.util.Loose import mill.util.JsonFormatters._ -object ScalaWorkerApi extends mill.define.BaseModule(ammonite.ops.pwd){ +object ScalaWorkerApi extends mill.define.ExternalModule { def scalaWorkerClasspath = T{ val scalaWorkerJar = sys.props("MILL_SCALA_WORKER") if (scalaWorkerJar != null) Loose.Agg.from(scalaWorkerJar.split(',').map(Path(_))) |