Mark old utf8 conversion with deprecation error (#4199)

This commit is contained in:
Abduqodiri Qurbonzoda
2020-05-31 16:32:45 +03:00
committed by GitHub
parent 3ac7a59b97
commit 7978f0ac8d
4 changed files with 43 additions and 40 deletions
+1 -1
View File
@@ -2288,7 +2288,7 @@ task utf8(type: KonanLocalTest) {
// Cannot be executed in the two-stage mode due to KT-33175.
// Uses exceptions so cannot run on wasm.
enabled = !twoStageEnabled && (project.testTarget != 'wasm32')
goldValue = "Hello\nПривет\n\uD800\uDC00\n\n\uFFFD\uFFFD\n\uFFFD12\n\uFFFD12\n12\uFFFD\n\uD83D\uDE25\n\uD83D\uDE25\n\uD83D\uDE25\n"
goldValue = "Hello\nПривет\n\uD800\uDC00\n\n\uFFFD\uFFFD\n\uFFFD12\n\uFFFD12\n12\uFFFD\n\uD83D\uDE25\n\uD83D\uDE25\n"
source = "runtime/text/utf8.kt"
}
+7 -24
View File
@@ -29,11 +29,9 @@ fun checkUtf16to8(string: String, expected: IntArray, conversion: String.() -> B
// Utils for checking successful UTF-16 to UTF-8 conversion.
fun checkUtf16to8Replacing(string: String, expected: IntArray) {
checkUtf16to8(string, expected) { toUtf8() }
checkUtf16to8(string, expected) { encodeToByteArray() }
}
fun checkUtf16to8Throwing(string: String, expected: IntArray) {
checkUtf16to8(string, expected) { toUtf8OrThrow() }
checkUtf16to8(string, expected) { encodeToByteArray(throwOnInvalidSequence = true) }
}
fun checkValidUtf16to8(string: String, expected: IntArray) {
@@ -42,11 +40,9 @@ fun checkValidUtf16to8(string: String, expected: IntArray) {
}
fun checkUtf16to8Replacing(string: String, expected: IntArray, start: Int, size: Int) {
checkUtf16to8(string, expected) { toUtf8(start, size) }
checkUtf16to8(string, expected) { encodeToByteArray(start, start + size) }
}
fun checkUtf16to8Throwing(string: String, expected: IntArray, start: Int, size: Int) {
checkUtf16to8(string, expected) { toUtf8OrThrow(start, size) }
checkUtf16to8(string, expected) { encodeToByteArray(start, start + size, true) }
}
fun checkValidUtf16to8(string: String, expected: IntArray, start: Int, size: Int) {
@@ -70,22 +66,20 @@ fun checkUtf8to16(expected: String, array: IntArray, conversion: ByteArray.() ->
}
fun checkZeroTerminatedUtf8to16Replacing(expected: String, array: IntArray) {
checkUtf8to16(expected, array) { stringFromUtf8() }
checkUtf8to16(expected, array) { toKString() }
checkUtf8to16(expected, array.copyOf(array.size + 1)) { toKString() }
}
fun checkUtf8to16Replacing(expected: String, array: IntArray) {
checkUtf8to16(expected, array) { stringFromUtf8() }
checkUtf8to16(expected, array) { decodeToString() }
checkZeroTerminatedUtf8to16Replacing(expected, array)
checkZeroTerminatedUtf8to16Replacing(expected, array.copyOf(array.size + 1))
}
fun checkZeroTerminatedUtf8to16Throwing(expected: String, array: IntArray) {
checkUtf8to16(expected, array) { stringFromUtf8OrThrow() }
checkUtf8to16(expected, array) { toKString(throwOnInvalidSequence = true) }
checkUtf8to16(expected, array.copyOf(array.size + 1)) { toKString(throwOnInvalidSequence = true) }
}
fun checkUtf8to16Throwing(expected: String, array: IntArray) {
checkUtf8to16(expected, array) { decodeToString(throwOnInvalidSequence = true) }
checkZeroTerminatedUtf8to16Throwing(expected, array)
checkZeroTerminatedUtf8to16Throwing(expected, array.copyOf(array.size + 1))
}
fun checkValidUtf8to16(expected: String, array: IntArray) {
checkUtf8to16Replacing(expected, array)
@@ -97,22 +91,20 @@ fun checkValidZeroTerminatedUtf8to16(expected: String, array: IntArray) {
}
fun checkZeroTerminatedUtf8to16Replacing(expected: String, array: IntArray, start: Int, size: Int) {
checkUtf8to16(expected, array) { stringFromUtf8(start, size) }
checkUtf8to16(expected, array) { toKString(start, start + size) }
checkUtf8to16(expected, array.copyOf(array.size + 1)) { toKString(start, start + size) }
}
fun checkUtf8to16Replacing(expected: String, array: IntArray, start: Int, size: Int) {
checkUtf8to16(expected, array) { decodeToString(start, start + size) }
checkZeroTerminatedUtf8to16Replacing(expected, array, start, size)
checkZeroTerminatedUtf8to16Replacing(expected, array.copyOf(array.size + 1), start, size)
}
fun checkZeroTerminatedUtf8to16Throwing(expected: String, array: IntArray, start: Int, size: Int) {
checkUtf8to16(expected, array) { stringFromUtf8OrThrow(start, size) }
checkUtf8to16(expected, array) { toKString(start, start + size, true) }
checkUtf8to16(expected, array.copyOf(array.size + 1)) { toKString(start, start + size, true) }
}
fun checkUtf8to16Throwing(expected: String, array: IntArray, start: Int, size: Int) {
checkUtf8to16(expected, array) { decodeToString(start, start + size, true) }
checkZeroTerminatedUtf8to16Throwing(expected, array, start, size)
checkZeroTerminatedUtf8to16Throwing(expected, array.copyOf(array.size + 1), start, size)
}
fun checkValidUtf8to16(expected: String, array: IntArray, start: Int, size: Int) {
checkUtf8to16Replacing(expected, array, start, size)
@@ -141,11 +133,9 @@ fun <T: Any> checkThrows(e: KClass<T>, string: String, action: () -> Unit) {
}
fun checkUtf16to8Throws(string: String) {
checkThrows(IllegalCharacterConversionException::class, string) { string.toUtf8OrThrow() }
checkThrows(CharacterCodingException::class, string) { string.encodeToByteArray(throwOnInvalidSequence = true) }
}
fun checkUtf16to8Throws(string: String, start: Int, size: Int) {
checkThrows(IllegalCharacterConversionException::class, string) { string.toUtf8OrThrow(start, size) }
checkThrows(CharacterCodingException::class, string) { string.encodeToByteArray(start, start + size, true) }
}
@@ -161,22 +151,20 @@ fun <T: Any> checkUtf8to16Throws(e: KClass<T>, string: String, array: IntArray,
}
fun checkZeroTerminatedUtf8to16Throws(string: String, array: IntArray) {
checkUtf8to16Throws(IllegalCharacterConversionException::class, string, array) { stringFromUtf8OrThrow() }
checkUtf8to16Throws(CharacterCodingException::class, string, array) { toKString(throwOnInvalidSequence = true) }
checkUtf8to16Throws(CharacterCodingException::class, string, array.copyOf(array.size + 1)) { toKString(throwOnInvalidSequence = true) }
}
fun checkUtf8to16Throws(string: String, array: IntArray) {
checkUtf8to16Throws(CharacterCodingException::class, string, array) { decodeToString(throwOnInvalidSequence = true) }
checkZeroTerminatedUtf8to16Throws(string, array)
checkZeroTerminatedUtf8to16Throws(string, array.copyOf(array.size + 1))
}
fun checkZeroTerminatedUtf8to16Throws(string: String, array: IntArray, start: Int, size: Int) {
checkUtf8to16Throws(IllegalCharacterConversionException::class, string, array) { stringFromUtf8OrThrow(start, size) }
checkUtf8to16Throws(CharacterCodingException::class, string, array) { toKString(start, start + size, true) }
checkUtf8to16Throws(CharacterCodingException::class, string, array.copyOf(array.size + 1)) { toKString(start, start + size, true) }
}
fun checkUtf8to16Throws(string: String, array: IntArray, start: Int, size: Int) {
checkUtf8to16Throws(CharacterCodingException::class, string, array) { decodeToString(start, start + size, true) }
checkZeroTerminatedUtf8to16Throws(string, array, start, size)
checkZeroTerminatedUtf8to16Throws(string, array.copyOf(array.size + 1), start, size)
}
@@ -192,11 +180,9 @@ fun checkFloatConversionThrows(string: String) = checkThrows(NumberFormatExcepti
// Utils for checking invalid-bounds-exception thrown by UTF-16 to UTF-8 conversion.
fun <T: Any> checkOutOfBoundsUtf16to8Replacing(e: KClass<T>, string: String, start: Int, size: Int) {
checkThrows(e, string) { string.toUtf8(start, size) }
checkThrows(e, string) { string.encodeToByteArray(start, start + size) }
}
fun <T: Any> checkOutOfBoundsUtf16to8Throwing(e: KClass<T>, string: String, start: Int, size: Int) {
checkThrows(e, string) { string.toUtf8OrThrow(start, size) }
checkThrows(e, string) { string.encodeToByteArray(start, start + size, true) }
}
fun <T: Any> checkOutOfBoundsUtf16to8(e: KClass<T>, string: String, start: Int, size: Int) {
@@ -207,7 +193,6 @@ fun <T: Any> checkOutOfBoundsUtf16to8(e: KClass<T>, string: String, start: Int,
// Utils for checking invalid-bounds-exception thrown by UTF-8 to UTF-16 conversion.
fun <T: Any> checkOutOfBoundsZeroTerminatedUtf8to16Replacing(e: KClass<T>, string: String, byteArray: ByteArray, start: Int, size: Int) {
checkThrows(e, string) { byteArray.stringFromUtf8(start, size) }
checkThrows(e, string) { byteArray.toKString(start, start + size) }
}
fun <T: Any> checkOutOfBoundsUtf8to16Replacing(e: KClass<T>, string: String, byteArray: ByteArray, start: Int, size: Int) {
@@ -215,7 +200,6 @@ fun <T: Any> checkOutOfBoundsUtf8to16Replacing(e: KClass<T>, string: String, byt
checkOutOfBoundsZeroTerminatedUtf8to16Replacing(e, string, byteArray, start, size)
}
fun <T: Any> checkOutOfBoundsZeroTerminatedUtf8to16Throwing(e: KClass<T>, string: String, byteArray: ByteArray, start: Int, size: Int) {
checkThrows(e, string) { byteArray.stringFromUtf8OrThrow(start, size) }
checkThrows(e, string) { byteArray.toKString(start, start + size, true) }
}
fun <T: Any> checkOutOfBoundsUtf8to16Throwing(e: KClass<T>, string: String, byteArray: ByteArray, start: Int, size: Int) {
@@ -234,7 +218,6 @@ fun <T: Any> checkOutOfBoundsZeroTerminatedUtf8to16(e: KClass<T>, string: String
// Util for performing action on result of UTF-8 to UTF-16 conversion.
fun convertUtf8to16(byteArray: ByteArray, action: (String) -> Unit) {
byteArray.stringFromUtf8().let { action(it) }
byteArray.decodeToString().let { action(it) }
byteArray.toKString().let { action(it) }
}
+1 -1
View File
@@ -166,7 +166,7 @@ public actual open class NumberFormatException : IllegalArgumentException {
actual constructor(message: String?) : super(message)
}
@Deprecated("Use CharacterCodingException instead", ReplaceWith("CharacterCodingException"))
@Deprecated("Use CharacterCodingException instead", ReplaceWith("CharacterCodingException"), DeprecationLevel.ERROR)
public open class IllegalCharacterConversionException : IllegalArgumentException {
constructor(): super()
+34 -14
View File
@@ -12,10 +12,11 @@ import kotlinx.cinterop.toKString
*/
@Deprecated(
"Use toKString or decodeToString instead",
ReplaceWith("toKString()", "kotlinx.cinterop.toKString")
ReplaceWith("toKString()", "kotlinx.cinterop.toKString"),
DeprecationLevel.ERROR
)
public fun ByteArray.stringFromUtf8() : String {
@Suppress("DEPRECATION")
@Suppress("DEPRECATION_ERROR")
return this.stringFromUtf8(0, this.size)
}
@@ -24,7 +25,8 @@ public fun ByteArray.stringFromUtf8() : String {
*/
@Deprecated(
"Use toKString or decodeToString instead",
ReplaceWith("toKString(start, start + size)", "kotlinx.cinterop.toKString")
ReplaceWith("toKString(start, start + size)", "kotlinx.cinterop.toKString"),
DeprecationLevel.ERROR
)
public fun ByteArray.stringFromUtf8(start: Int = 0, size: Int = this.size) : String {
return toKString(start, start + size)
@@ -36,10 +38,11 @@ public fun ByteArray.stringFromUtf8(start: Int = 0, size: Int = this.size) : Str
*/
@Deprecated(
"Use toKString or decodeToString instead",
ReplaceWith("toKString(throwOnInvalidSequence = true)", "kotlinx.cinterop.toKString")
ReplaceWith("toKString(throwOnInvalidSequence = true)", "kotlinx.cinterop.toKString"),
DeprecationLevel.ERROR
)
public fun ByteArray.stringFromUtf8OrThrow() : String {
@Suppress("DEPRECATION")
@Suppress("DEPRECATION_ERROR")
return this.stringFromUtf8OrThrow(0, this.size)
}
@@ -49,13 +52,14 @@ public fun ByteArray.stringFromUtf8OrThrow() : String {
*/
@Deprecated(
"Use toKString or decodeToString instead",
ReplaceWith("toKString(start, start + size, throwOnInvalidSequence = true)", "kotlinx.cinterop.toKString")
ReplaceWith("toKString(start, start + size, throwOnInvalidSequence = true)", "kotlinx.cinterop.toKString"),
DeprecationLevel.ERROR
)
public fun ByteArray.stringFromUtf8OrThrow(start: Int = 0, size: Int = this.size) : String {
try {
return toKString(start, start + size, throwOnInvalidSequence = true)
} catch (e: CharacterCodingException) {
@Suppress("DEPRECATION")
@Suppress("DEPRECATION_ERROR")
throw IllegalCharacterConversionException()
}
}
@@ -63,16 +67,24 @@ public fun ByteArray.stringFromUtf8OrThrow(start: Int = 0, size: Int = this.size
/**
* Converts a [String] into an UTF-8 array. Replaces invalid input sequences with a default character.
*/
@Deprecated("Use encodeToByteArray instead", ReplaceWith("encodeToByteArray()"))
@Deprecated(
"Use encodeToByteArray instead",
ReplaceWith("encodeToByteArray()"),
DeprecationLevel.ERROR
)
public fun String.toUtf8() : ByteArray {
@Suppress("DEPRECATION")
@Suppress("DEPRECATION_ERROR")
return this.toUtf8(0, this.length)
}
/**
* Converts a [String] into an UTF-8 array. Replaces invalid input sequences with a default character.
*/
@Deprecated("Use encodeToByteArray instead", ReplaceWith("encodeToByteArray(start, start + size)"))
@Deprecated(
"Use encodeToByteArray instead",
ReplaceWith("encodeToByteArray(start, start + size)"),
DeprecationLevel.ERROR
)
public fun String.toUtf8(start: Int = 0, size: Int = this.length) : ByteArray {
checkBoundsIndexes(start, start + size, this.length)
return unsafeStringToUtf8(start, size)
@@ -82,9 +94,13 @@ public fun String.toUtf8(start: Int = 0, size: Int = this.length) : ByteArray {
* Converts a [String] into an UTF-8 array.
* @throws [IllegalCharacterConversionException] if the input is invalid.
*/
@Deprecated("Use encodeToByteArray instead", ReplaceWith("encodeToByteArray(throwOnInvalidSequence = true)"))
@Deprecated(
"Use encodeToByteArray instead",
ReplaceWith("encodeToByteArray(throwOnInvalidSequence = true)"),
DeprecationLevel.ERROR
)
public fun String.toUtf8OrThrow() : ByteArray {
@Suppress("DEPRECATION")
@Suppress("DEPRECATION_ERROR")
return this.toUtf8OrThrow(0, this.length)
}
@@ -92,13 +108,17 @@ public fun String.toUtf8OrThrow() : ByteArray {
* Converts a [String] into an UTF-8 array.
* @throws [IllegalCharacterConversionException] if the input is invalid.
*/
@Deprecated("Use encodeToByteArray instead", ReplaceWith("encodeToByteArray(start, start + size, throwOnInvalidSequence = true)"))
@Deprecated(
"Use encodeToByteArray instead",
ReplaceWith("encodeToByteArray(start, start + size, throwOnInvalidSequence = true)"),
DeprecationLevel.ERROR
)
public fun String.toUtf8OrThrow(start: Int = 0, size: Int = this.length) : ByteArray {
checkBoundsIndexes(start, start + size, this.length)
try {
return unsafeStringToUtf8OrThrow(start, size)
} catch (e: CharacterCodingException) {
@Suppress("DEPRECATION")
@Suppress("DEPRECATION_ERROR")
throw IllegalCharacterConversionException()
}
}