summaryrefslogtreecommitdiff
path: root/main/test/src/util/ScriptTestSuite.scala
diff options
context:
space:
mode:
Diffstat (limited to 'main/test/src/util/ScriptTestSuite.scala')
-rw-r--r--main/test/src/util/ScriptTestSuite.scala53
1 files changed, 53 insertions, 0 deletions
diff --git a/main/test/src/util/ScriptTestSuite.scala b/main/test/src/util/ScriptTestSuite.scala
new file mode 100644
index 00000000..f448aaaf
--- /dev/null
+++ b/main/test/src/util/ScriptTestSuite.scala
@@ -0,0 +1,53 @@
+package mill.util
+
+import java.io.{ByteArrayInputStream, ByteArrayOutputStream, PrintStream}
+
+import utest._
+
+abstract class ScriptTestSuite(fork: Boolean) extends TestSuite{
+ def workspaceSlug: String
+ def scriptSourcePath: os.Path
+ def buildPath: os.RelPath = "build.sc"
+
+ val workspacePath = os.pwd / 'target / 'workspace / workspaceSlug
+ val wd = workspacePath / buildPath / os.up
+ val stdOutErr = System.out // new PrintStream(new ByteArrayOutputStream())
+ val stdIn = new ByteArrayInputStream(Array())
+ val disableTicker = false
+ val debugLog = false
+ lazy val runner = new mill.main.MainRunner(
+ ammonite.main.Cli.Config(wd = wd), disableTicker,
+ stdOutErr, stdOutErr, stdIn, None, Map.empty,
+ b => (), debugLog
+ )
+ def eval(s: String*) = {
+ if (!fork) runner.runScript(workspacePath / buildPath , s.toList)
+ else{
+ try {
+ os.proc(os.home / "mill-release", "-i", s).call(
+ wd,
+ stdin = os.Inherit,
+ stdout = os.Inherit,
+ stderr = os.Inherit,
+ )
+ true
+ }catch{case e: Throwable => false}
+ }
+ }
+ def meta(s: String) = {
+ val (List(selector), args) = ParseArgs.apply(Seq(s), multiSelect = false).right.get
+
+ os.read(wd / "out" / selector._2.value.flatMap(_.pathSegments) / "meta.json")
+ }
+
+
+ def initWorkspace() = {
+ os.remove.all(workspacePath)
+ os.makeDir.all(workspacePath / os.up)
+ // The unzipped git repo snapshots we get from github come with a
+ // wrapper-folder inside the zip file, so copy the wrapper folder to the
+ // destination instead of the folder containing the wrapper.
+
+ os.copy(scriptSourcePath, workspacePath)
+ }
+}