1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package mill.scalajslib
import mill._
import mill.define.Discover
import mill.eval.Evaluator
import mill.scalalib.{CrossScalaModule, DepSyntax}
import mill.util.{TestEvaluator, TestUtil}
import utest._
import mill.scalajslib.api._
object NodeJSConfigTests extends TestSuite {
val workspacePath = TestUtil.getOutPathStatic() / "hello-js-world"
val scalaVersion = "2.12.4"
val scalaJSVersion = "0.6.22"
val utestVersion = "0.6.3"
val nodeArgsEmpty = List()
val nodeArgs2G = List("--max-old-space-size=2048")
val nodeArgs4G = List("--max-old-space-size=4096")
trait HelloJSWorldModule extends CrossScalaModule with ScalaJSModule {
override def millSourcePath = workspacePath
def publishVersion = "0.0.1-SNAPSHOT"
override def mainClass = Some("Main")
}
object HelloJSWorld extends TestUtil.BaseModule {
val matrix = for {
scala <- Seq(scalaVersion)
nodeArgs <- Seq(nodeArgsEmpty, nodeArgs2G)
} yield (scala, nodeArgs)
object helloJsWorld extends Cross[BuildModule](matrix:_*)
class BuildModule(val crossScalaVersion: String, nodeArgs: List[String]) extends HelloJSWorldModule {
override def artifactName = "hello-js-world"
def scalaJSVersion = NodeJSConfigTests.scalaJSVersion
override def nodeJSConfig = T { NodeJSConfig(args = nodeArgs) }
}
object buildUTest extends Cross[BuildModuleUtest](matrix:_*)
class BuildModuleUtest(crossScalaVersion: String, nodeArgs: List[String])
extends BuildModule(crossScalaVersion, nodeArgs) {
object test extends super.Tests {
override def sources = T.sources{ millSourcePath / 'src / 'utest }
def testFrameworks = Seq("utest.runner.Framework")
override def ivyDeps = Agg(
ivy"com.lihaoyi::utest::$utestVersion"
)
override def nodeJSConfig = T { NodeJSConfig(args = nodeArgs) }
}
}
override lazy val millDiscover = Discover[this.type]
}
val millSourcePath = os.pwd / 'scalajslib / 'test / 'resources / "hello-js-world"
val helloWorldEvaluator = TestEvaluator.static(HelloJSWorld)
val mainObject = helloWorldEvaluator.outPath / 'src / "Main.scala"
def tests: Tests = Tests {
prepareWorkspace()
def checkLog(command: define.Command[_], nodeArgs: List[String], notNodeArgs: List[String]) = {
helloWorldEvaluator(command)
val paths = Evaluator.resolveDestPaths(
helloWorldEvaluator.outPath,
command.ctx.segments
)
val log = os.read(paths.log)
assert(
nodeArgs.forall(log.contains),
notNodeArgs.forall(!log.contains(_))
)
}
'test - {
def checkUtest(nodeArgs: List[String], notNodeArgs: List[String]) = {
checkLog(HelloJSWorld.buildUTest(scalaVersion, nodeArgs).test.test(), nodeArgs, notNodeArgs)
}
'test - checkUtest(nodeArgsEmpty, nodeArgs2G)
'test2G - checkUtest(nodeArgs2G, nodeArgs4G)
}
def checkRun(nodeArgs: List[String], notNodeArgs: List[String]): Unit = {
checkLog(HelloJSWorld.helloJsWorld(scalaVersion, nodeArgs).run(), nodeArgs, notNodeArgs)
}
'run - {
'run - checkRun(nodeArgsEmpty, nodeArgs2G)
'run2G - checkRun(nodeArgs2G, nodeArgs4G)
}
}
def prepareWorkspace(): Unit = {
os.remove.all(workspacePath)
os.makeDir.all(workspacePath / os.up)
os.copy(millSourcePath, workspacePath)
}
}
|