From 91be5d14f5fad2478f98a44067eaf81382e39d2c Mon Sep 17 00:00:00 2001 From: Piotr Krzeminski Date: Sun, 26 Jan 2025 00:00:13 +0100 Subject: [PATCH 1/2] Fix StringStreamDataWriter.toString to not consume buffer --- .../snakeyaml/engine/kmp/api/StringStreamDataWriter.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/commonMain/kotlin/it/krzeminski/snakeyaml/engine/kmp/api/StringStreamDataWriter.kt b/src/commonMain/kotlin/it/krzeminski/snakeyaml/engine/kmp/api/StringStreamDataWriter.kt index f87e76f32..72b11cc55 100644 --- a/src/commonMain/kotlin/it/krzeminski/snakeyaml/engine/kmp/api/StringStreamDataWriter.kt +++ b/src/commonMain/kotlin/it/krzeminski/snakeyaml/engine/kmp/api/StringStreamDataWriter.kt @@ -16,5 +16,8 @@ internal class StringStreamDataWriter( buffer.writeUtf8(string = str, beginIndex = off, endIndex = off + len) } - override fun toString(): String = buffer.readUtf8() + /** + * Returns the contents of the internal buffer, without altering the buffer's state. + */ + override fun toString(): String = buffer.peek().readUtf8() } From 88a561cda98642e3bc8aa8aadbce445d044b39d4 Mon Sep 17 00:00:00 2001 From: Piotr Krzeminski Date: Sun, 26 Jan 2025 09:42:59 +0100 Subject: [PATCH 2/2] Add test --- .../kmp/api/StringStreamDataWriterTest.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/commonTest/kotlin/it/krzeminski/snakeyaml/engine/kmp/api/StringStreamDataWriterTest.kt diff --git a/src/commonTest/kotlin/it/krzeminski/snakeyaml/engine/kmp/api/StringStreamDataWriterTest.kt b/src/commonTest/kotlin/it/krzeminski/snakeyaml/engine/kmp/api/StringStreamDataWriterTest.kt new file mode 100644 index 000000000..d95994030 --- /dev/null +++ b/src/commonTest/kotlin/it/krzeminski/snakeyaml/engine/kmp/api/StringStreamDataWriterTest.kt @@ -0,0 +1,19 @@ +package it.krzeminski.snakeyaml.engine.kmp.api + +import io.kotest.assertions.withClue +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.string.shouldContain + +class StringStreamDataWriterTest: FunSpec({ + test("toString() doesn't consume buffer") { + val writer = StringStreamDataWriter() + writer.write("foobar") + + // First read. + writer.toString() + + withClue("subsequent calls to toString() shouldn't change the buffer's state") { + writer.toString() shouldContain "foobar" + } + } +})