Avoid hitting max argument limit in String(chars)
Rewrite CharArray to String conversions to appending chars one by one. Refine parameter checking in String(chars, offset, length) to adhere to the common exception contract and document it. #KT-29003
This commit is contained in:
@@ -53,11 +53,21 @@ class StringTest {
|
||||
@Test fun stringFromCharArraySlice() {
|
||||
val chars: CharArray = charArrayOf('K', 'o', 't', 'l', 'i', 'n', ' ', 'r', 'u', 'l', 'e', 's')
|
||||
assertEquals("rule", String(chars, 7, 4))
|
||||
|
||||
val longChars = CharArray(200_000) { 'k' }
|
||||
val longString = String(longChars, 1000, 190_000)
|
||||
assertEquals(190_000, longString.length)
|
||||
assertTrue(longString.all { it == 'k' })
|
||||
}
|
||||
|
||||
@Test fun stringFromCharArray() {
|
||||
val chars: CharArray = charArrayOf('K', 'o', 't', 'l', 'i', 'n')
|
||||
assertEquals("Kotlin", String(chars))
|
||||
|
||||
val longChars = CharArray(200_000) { 'k' }
|
||||
val longString = String(longChars)
|
||||
assertEquals(200_000, longString.length)
|
||||
assertTrue(longString.all { it == 'k' })
|
||||
}
|
||||
|
||||
@Test fun stringFromCharArrayUnicodeSurrogatePairs() {
|
||||
@@ -67,6 +77,16 @@ class StringTest {
|
||||
assertEquals("Ŭᎍ🀺", String(chars, 3, 4))
|
||||
}
|
||||
|
||||
@Test fun stringFromCharArrayOutOfBounds() {
|
||||
fun test(chars: CharArray) {
|
||||
assertFailsWith<IndexOutOfBoundsException> { String(chars, -1, 1) }
|
||||
assertFailsWith<IndexOutOfBoundsException> { String(chars, 1, -1) }
|
||||
assertFailsWith<IndexOutOfBoundsException> { String(chars, chars.size - 1, 2) }
|
||||
}
|
||||
test(CharArray(16) { 'k' })
|
||||
test(CharArray(160_000) { 'k' })
|
||||
}
|
||||
|
||||
@Test fun isEmptyAndBlank() = withOneCharSequenceArg { arg1 ->
|
||||
class Case(val value: String?, val isNull: Boolean = false, val isEmpty: Boolean = false, val isBlank: Boolean = false)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user