diff --git a/libraries/stdlib/js/src/kotlin/text.kt b/libraries/stdlib/js/src/kotlin/text.kt index 856f2d721f2..acbfd87e56a 100644 --- a/libraries/stdlib/js/src/kotlin/text.kt +++ b/libraries/stdlib/js/src/kotlin/text.kt @@ -24,7 +24,8 @@ public actual class StringBuilder(content: String = "") : Appendable, CharSequen actual override val length: Int get() = string.asDynamic().length - actual override fun get(index: Int): Char = string[index] + actual override fun get(index: Int): Char = + string.getOrElse(index) { throw IndexOutOfBoundsException("index: $index, length: $length}") } actual override fun subSequence(startIndex: Int, endIndex: Int): CharSequence = string.substring(startIndex, endIndex) diff --git a/libraries/stdlib/test/text/StringBuilderTest.kt b/libraries/stdlib/test/text/StringBuilderTest.kt index 67ee8016336..e6b75f0abbb 100644 --- a/libraries/stdlib/test/text/StringBuilderTest.kt +++ b/libraries/stdlib/test/text/StringBuilderTest.kt @@ -75,4 +75,16 @@ class StringBuilderTest { assertTrue(sb.isEmpty()) assertEquals("test", s) } + + @Test fun get() { + val sb = StringBuilder() + sb.append("test") + assertEquals('t', sb[0]) + assertEquals('e', sb[1]) + assertEquals('s', sb[2]) + assertEquals('t', sb[3]) + + assertFailsWith { assertEquals('t', sb[-1]) } + assertFailsWith { assertEquals('t', sb[4]) } + } }