Throw IOOB on invalid index in JS StringBuilder.get to adhere contract
This commit is contained in:
@@ -24,7 +24,8 @@ public actual class StringBuilder(content: String = "") : Appendable, CharSequen
|
|||||||
actual override val length: Int
|
actual override val length: Int
|
||||||
get() = string.asDynamic().length
|
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)
|
actual override fun subSequence(startIndex: Int, endIndex: Int): CharSequence = string.substring(startIndex, endIndex)
|
||||||
|
|
||||||
|
|||||||
@@ -75,4 +75,16 @@ class StringBuilderTest {
|
|||||||
assertTrue(sb.isEmpty())
|
assertTrue(sb.isEmpty())
|
||||||
assertEquals("test", s)
|
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<IndexOutOfBoundsException> { assertEquals('t', sb[-1]) }
|
||||||
|
assertFailsWith<IndexOutOfBoundsException> { assertEquals('t', sb[4]) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user