blob: fb913b19b674ef48ba5680ed00d69eebbef9c089 [file] [log] [blame]
Roman Elizarov1f74a2d2018-06-29 19:19:45 +03001/*
2 * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3 */
4
Sergey Mashkov569b5422017-07-25 12:17:11 +03005package kotlinx.coroutines.experimental.io
6
Roman Elizarovc45f5fa2018-01-11 13:48:19 +03007import kotlinx.coroutines.experimental.*
Roman Elizarov469cad32017-08-15 15:54:56 +03008import org.junit.Test
Sergey Mashkov569b5422017-07-25 12:17:11 +03009import java.util.*
Roman Elizarov469cad32017-08-15 15:54:56 +030010import kotlin.test.assertEquals
11import kotlin.test.assertFalse
12import kotlin.test.assertTrue
Sergey Mashkov569b5422017-07-25 12:17:11 +030013
Roman Elizarovc45f5fa2018-01-11 13:48:19 +030014class ContentByteBufferTest : TestBase() {
Sergey Mashkov569b5422017-07-25 12:17:11 +030015 @Test
16 fun testEmptyContent() = runBlocking {
Roman Elizarov469cad32017-08-15 15:54:56 +030017 val ch = ByteReadChannel(ByteArray(0))
18 assertEquals(0, ch.availableForRead)
19 assertEquals(-1, ch.readAvailable(ByteBuffer.allocate(100)))
20 assertTrue { ch.isClosedForRead }
Sergey Mashkov569b5422017-07-25 12:17:11 +030021 }
22
23 @Test
24 fun testSingleByteContent() = runBlocking {
Roman Elizarov469cad32017-08-15 15:54:56 +030025 val ch = ByteReadChannel(byteArrayOf(1))
26 assertEquals(1, ch.availableForRead)
27 assertFalse { ch.isClosedForRead }
28 assertEquals(1, ch.readAvailable(ByteBuffer.allocate(100)))
29 assertEquals(0, ch.availableForRead)
30 assertTrue { ch.isClosedForRead }
Sergey Mashkov569b5422017-07-25 12:17:11 +030031 }
32
33 @Test
34 fun testSingleByteContent2() = runBlocking {
Roman Elizarov469cad32017-08-15 15:54:56 +030035 val ch = ByteReadChannel(byteArrayOf(0x34))
36 assertEquals(1, ch.availableForRead)
37 assertFalse { ch.isClosedForRead }
Sergey Mashkov569b5422017-07-25 12:17:11 +030038 assertEquals(0x34, ch.readByte())
Roman Elizarov469cad32017-08-15 15:54:56 +030039 assertEquals(0, ch.availableForRead)
40 assertTrue { ch.isClosedForRead }
Sergey Mashkov569b5422017-07-25 12:17:11 +030041 }
42
43 @Test
44 fun testMultipleByteContent2() = runBlocking {
45 val arr = ByteArray(16)
46 Random().nextBytes(arr)
Roman Elizarov469cad32017-08-15 15:54:56 +030047 val ch = ByteReadChannel(arr)
48 assertEquals(16, ch.availableForRead)
49 assertFalse { ch.isClosedForRead }
Sergey Mashkov569b5422017-07-25 12:17:11 +030050 ch.readByte()
51 ch.readShort()
52 ch.readInt()
53 ch.readLong()
54 ch.readByte()
Roman Elizarov469cad32017-08-15 15:54:56 +030055 assertTrue { ch.isClosedForRead }
Sergey Mashkov569b5422017-07-25 12:17:11 +030056 }
57}