package testutils

import scala.sys.process.{Process, ProcessIO}

object CocotbRunner {
  def apply(path: String): Boolean = {

    doCmd(Seq(s"cd $path", "rm -f results.xml", "make"))
    getCocotbPass(path)
  }

  def doCmd(cmds: Seq[String]): Unit = {
    var out, err: String = null
    val io = new ProcessIO(
      stdin => {
        for (cmd <- cmds)
          stdin.write((cmd + "\n").getBytes)
        stdin.close()
      },
      stdout => {
        out = scala.io.Source
          .fromInputStream(stdout)
          .getLines
          .foldLeft("")(_ + "\n" + _)
        stdout.close()
      },
      stderr => {
        err = scala.io.Source
          .fromInputStream(stderr)
          .getLines
          .foldLeft("")(_ + "\n" + _)
        stderr.close()
      }
    )
    val proc = Process("sh").run(io)
    proc.exitValue()
    println(out)
    println(err)
  }

  def getCocotbPass(path: String): Boolean = {
    import scala.io.Source
    for (line <- Source.fromFile(path + "/results.xml").getLines()) {
      if (line.contains("failure") || line.contains("skipped")) {
        return false
      }
    }
    return true
  }
}
