summaryrefslogblamecommitdiff
path: root/main/test/src/util/ScriptTestSuite.scala
blob: b15541f374c491ebe229041153b9be1a12c462db (plain) (tree)
1
2
3
4
5
6
7
8
9
10



                                                                         

              
                                                                
                           

                                        
 

                                                                   
                                                                            
                                               
                           
                      
                       
                                              
                                             










                                               
   
                          
                                                                     

           





                                                        



                                        
                         
                                                                                       
 
                                                                                 



                         

                                         



                                                                            
                                            

   
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
  val keepGoing = false
  val systemProperties = Map[String, String]()
  lazy val runner = new mill.main.MainRunner(
    config = ammonite.main.Cli.Config(wd = wd),
    disableTicker = disableTicker,
    outprintStream = stdOutErr,
    errPrintStream = stdOutErr,
    stdIn = stdIn,
    stateCache0 = None,
    env = Map.empty,
    setIdle = b => (),
    debugLog = debugLog,
    keepGoing = keepGoing,
    systemProperties = systemProperties
  )
  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)
  }
}