summaryrefslogblamecommitdiff
path: root/test-suite/src/test/scala/scala/scalajs/testsuite/javalib/MockByteArrayOutputStream.scala
blob: 3356a854ce8da5b783b26c436e8caa7dd1f2a429 (plain) (tree)














































                                                                               
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))

}