aboutsummaryrefslogtreecommitdiff
path: root/okio/src/commonTest/kotlin/okio/MockSink.kt
diff options
context:
space:
mode:
Diffstat (limited to 'okio/src/commonTest/kotlin/okio/MockSink.kt')
-rw-r--r--okio/src/commonTest/kotlin/okio/MockSink.kt63
1 files changed, 63 insertions, 0 deletions
diff --git a/okio/src/commonTest/kotlin/okio/MockSink.kt b/okio/src/commonTest/kotlin/okio/MockSink.kt
new file mode 100644
index 00000000..7e099f42
--- /dev/null
+++ b/okio/src/commonTest/kotlin/okio/MockSink.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2014 Square, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package okio
+
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
+
+/** A scriptable sink. Like Mockito, but worse and requiring less configuration. */
+class MockSink : Sink {
+ private val log = mutableListOf<String>()
+ private val callThrows = mutableMapOf<Int, IOException>()
+
+ fun assertLog(vararg messages: String) {
+ assertEquals(messages.toList(), log)
+ }
+
+ fun assertLogContains(message: String) {
+ assertTrue(message in log)
+ }
+
+ fun scheduleThrow(call: Int, e: IOException) {
+ callThrows[call] = e
+ }
+
+ private fun throwIfScheduled() {
+ val exception = callThrows[log.size - 1]
+ if (exception != null) throw exception
+ }
+
+ override fun write(source: Buffer, byteCount: Long) {
+ log.add("write($source, $byteCount)")
+ source.skip(byteCount)
+ throwIfScheduled()
+ }
+
+ override fun flush() {
+ log.add("flush()")
+ throwIfScheduled()
+ }
+
+ override fun timeout(): Timeout {
+ log.add("timeout()")
+ return Timeout.NONE
+ }
+
+ override fun close() {
+ log.add("close()")
+ throwIfScheduled()
+ }
+}