summaryrefslogtreecommitdiff
path: root/crashboxd/src/test/scala/io/crashbox/ci/IOUtil.scala
blob: 034c6a3ce18a4859473f41c3cb8f1ae2f742f6bc (plain) (blame)
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
package io.crashbox.ci

import java.io.{ ByteArrayOutputStream, File }
import java.nio.file.Files

object IOUtil {

  def withTempDir[A](action: File => A): A = {
    def rm(parent: File): Unit = if (parent.isDirectory) {
      parent.listFiles.foreach{ child =>
        rm(child)
      }
    }
    val dir = Files.createTempDirectory("crashbox-test").toFile
    try action(dir)
    finally rm(dir)
  }

  def withTempStream[A](action: ByteArrayOutputStream => A, size: Int = 1024): A = {
    val out = new ByteArrayOutputStream(size)
    try action(out)
    finally out.close()
  }

  def withTemp[A](action: (File, ByteArrayOutputStream) => A, size: Int = 1024): A = {
    withTempDir { d =>
      withTempStream { s =>
        action(d, s)
      }
    }
  }

}