aboutsummaryrefslogtreecommitdiff
path: root/okio/src/jvmTest/kotlin/okio/FixedLengthSourceTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'okio/src/jvmTest/kotlin/okio/FixedLengthSourceTest.kt')
-rw-r--r--okio/src/jvmTest/kotlin/okio/FixedLengthSourceTest.kt165
1 files changed, 165 insertions, 0 deletions
diff --git a/okio/src/jvmTest/kotlin/okio/FixedLengthSourceTest.kt b/okio/src/jvmTest/kotlin/okio/FixedLengthSourceTest.kt
new file mode 100644
index 00000000..79184177
--- /dev/null
+++ b/okio/src/jvmTest/kotlin/okio/FixedLengthSourceTest.kt
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2021 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.fail
+import okio.internal.FixedLengthSource
+import org.assertj.core.api.Assertions.assertThat
+import org.junit.Test
+
+internal class FixedLengthSourceTest {
+ @Test
+ fun happyPathWithTruncate() {
+ val delegate = Buffer().writeUtf8("abcdefghijklmnop")
+ val fixedLengthSource = FixedLengthSource(delegate, 16, truncate = true)
+ val buffer = Buffer()
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(10L)
+ assertThat(buffer.readUtf8()).isEqualTo("abcdefghij")
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(6L)
+ assertThat(buffer.readUtf8()).isEqualTo("klmnop")
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(-1L)
+ assertThat(buffer.readUtf8()).isEqualTo("")
+ }
+
+ @Test
+ fun happyPathNoTruncate() {
+ val delegate = Buffer().writeUtf8("abcdefghijklmnop")
+ val fixedLengthSource = FixedLengthSource(delegate, 16, truncate = false)
+ val buffer = Buffer()
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(10L)
+ assertThat(buffer.readUtf8()).isEqualTo("abcdefghij")
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(6L)
+ assertThat(buffer.readUtf8()).isEqualTo("klmnop")
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(-1L)
+ assertThat(buffer.readUtf8()).isEqualTo("")
+ }
+
+ @Test
+ fun delegateTooLongWithTruncate() {
+ val delegate = Buffer().writeUtf8("abcdefghijklmnopqr")
+ val fixedLengthSource = FixedLengthSource(delegate, 16, truncate = true)
+ val buffer = Buffer()
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(10L)
+ assertThat(buffer.readUtf8()).isEqualTo("abcdefghij")
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(6L)
+ assertThat(buffer.readUtf8()).isEqualTo("klmnop")
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(-1L)
+ assertThat(buffer.readUtf8()).isEqualTo("")
+ }
+
+ @Test
+ fun delegateTooLongWithTruncateFencepost() {
+ val delegate = Buffer().writeUtf8("abcdefghijklmnop")
+ val fixedLengthSource = FixedLengthSource(delegate, 10, truncate = true)
+ val buffer = Buffer()
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(10L)
+ assertThat(buffer.readUtf8()).isEqualTo("abcdefghij")
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(-1L)
+ assertThat(buffer.readUtf8()).isEmpty()
+ }
+
+ @Test
+ fun delegateTooLongNoTruncate() {
+ val delegate = Buffer().writeUtf8("abcdefghijklmnopqr")
+ val fixedLengthSource = FixedLengthSource(delegate, 16, truncate = false)
+ val buffer = Buffer()
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(10L)
+ assertThat(buffer.readUtf8()).isEqualTo("abcdefghij")
+ try {
+ fixedLengthSource.read(buffer, 10L)
+ fail()
+ } catch (e: IOException) {
+ assertThat(e).hasMessage("expected 16 bytes but got 18")
+ assertThat(buffer.readUtf8()).isEqualTo("klmnop") // Doesn't produce too many bytes!
+ }
+ try {
+ fixedLengthSource.read(buffer, 10L)
+ fail()
+ } catch (e: IOException) {
+ assertThat(e).hasMessage("expected 16 bytes but got 18")
+ assertThat(buffer.readUtf8()).isEmpty() // Doesn't produce any bytes!
+ }
+ }
+
+ @Test
+ fun delegateTooLongNoTruncateFencepost() {
+ val delegate = Buffer().writeUtf8("abcdefghijklmnop")
+ val fixedLengthSource = FixedLengthSource(delegate, 10, truncate = false)
+ val buffer = Buffer()
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(10L)
+ assertThat(buffer.readUtf8()).isEqualTo("abcdefghij")
+ try {
+ fixedLengthSource.read(buffer, 10L)
+ fail()
+ } catch (e: IOException) {
+ assertThat(e).hasMessage("expected 10 bytes but got 16")
+ assertThat(buffer.readUtf8()).isEmpty() // Doesn't produce too many bytes!
+ }
+ try {
+ fixedLengthSource.read(buffer, 10L)
+ fail()
+ } catch (e: IOException) {
+ assertThat(e).hasMessage("expected 10 bytes but got 16")
+ assertThat(buffer.readUtf8()).isEmpty() // Doesn't produce any bytes!
+ }
+ }
+
+ @Test
+ fun delegateTooShortWithTruncate() {
+ val delegate = Buffer().writeUtf8("abcdefghijklmn")
+ val fixedLengthSource = FixedLengthSource(delegate, 16, truncate = true)
+ val buffer = Buffer()
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(10L)
+ assertThat(buffer.readUtf8()).isEqualTo("abcdefghij")
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(4L)
+ assertThat(buffer.readUtf8()).isEqualTo("klmn")
+ try {
+ fixedLengthSource.read(buffer, 10L)
+ fail()
+ } catch (e: IOException) {
+ assertThat(e).hasMessage("expected 16 bytes but got 14")
+ }
+ try {
+ fixedLengthSource.read(buffer, 10L)
+ fail()
+ } catch (e: IOException) {
+ assertThat(e).hasMessage("expected 16 bytes but got 14")
+ }
+ }
+
+ @Test
+ fun delegateTooShortNoTruncate() {
+ val delegate = Buffer().writeUtf8("abcdefghijklmn")
+ val fixedLengthSource = FixedLengthSource(delegate, 16, truncate = false)
+ val buffer = Buffer()
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(10L)
+ assertThat(buffer.readUtf8()).isEqualTo("abcdefghij")
+ assertThat(fixedLengthSource.read(buffer, 10L)).isEqualTo(4L)
+ assertThat(buffer.readUtf8()).isEqualTo("klmn")
+ try {
+ fixedLengthSource.read(buffer, 10L)
+ fail()
+ } catch (e: IOException) {
+ assertThat(e).hasMessage("expected 16 bytes but got 14")
+ }
+ try {
+ fixedLengthSource.read(buffer, 10L)
+ fail()
+ } catch (e: IOException) {
+ assertThat(e).hasMessage("expected 16 bytes but got 14")
+ }
+ }
+}