summaryrefslogtreecommitdiff
path: root/test-suite/src/test/scala/scala/scalajs/testsuite/javalib/MockByteArrayOutputStream.scala
blob: 3356a854ce8da5b783b26c436e8caa7dd1f2a429 (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package scala.scalajs.testsuite.javalib

import java.io._

/** A ByteArrayOutputStream that exposes various hooks for testing purposes. */
class MockByteArrayOutputStream extends ByteArrayOutputStream {
  private var _flushed: Boolean = true
  private var _closed: Boolean = false

  var throwing: Boolean = false

  def flushed: Boolean = _flushed
  def closed: Boolean = _closed

  private def maybeThrow(): Unit = {
    if (throwing)
      throw new IOException("MockByteArrayOutputStream throws")
  }

  private def writeOp[A](op: => A): A = {
    maybeThrow()
    _flushed = false
    op
  }

  override def flush(): Unit = {
    maybeThrow()
    super.flush()
    _flushed = true
  }

  override def close(): Unit = {
    maybeThrow()
    super.close()
    _closed = true
  }

  override def write(c: Int): Unit =
    writeOp(super.write(c))

  override def write(b: Array[Byte]): Unit =
    writeOp(super.write(b))

  override def write(b: Array[Byte], off: Int, len: Int): Unit =
    writeOp(super.write(b, off, len))

}