@@ -14,6 +14,7 @@ import java.util.concurrent.atomic.AtomicInteger
14
14
import org.mockito.kotlin.any
15
15
import org.mockito.kotlin.inOrder
16
16
import org.mockito.kotlin.mock
17
+ import kotlin.text.Typography.ellipsis
17
18
18
19
@RunWith(JUnit4 ::class )
19
20
@ExperimentalCompilerApi
@@ -323,6 +324,40 @@ class KspTest {
323
324
assertThat(result.messages).contains(" This is a failure" )
324
325
}
325
326
327
+ @Test
328
+ fun messagesAreEncodedAndDecodedWithUtf8 () {
329
+ val annotation = SourceFile .kotlin(
330
+ " TestAnnotation.kt" , """
331
+ package foo.bar
332
+ annotation class TestAnnotation
333
+ """ .trimIndent()
334
+ )
335
+ val targetClass = SourceFile .kotlin(
336
+ " AppCode.kt" , """
337
+ package foo.bar
338
+ @TestAnnotation
339
+ class AppCode
340
+ """ .trimIndent()
341
+ )
342
+ val result = KotlinCompilation ().apply {
343
+ sources = listOf (annotation, targetClass)
344
+ symbolProcessorProviders = listOf (processorProviderOf { env ->
345
+ object : AbstractTestSymbolProcessor (env.codeGenerator) {
346
+ override fun process (resolver : Resolver ): List <KSAnnotated > {
347
+ env.logger.logging(" This is a log message with ellipsis $ellipsis " )
348
+ env.logger.info(" This is an info message with unicode \uD83D\uDCAB " )
349
+ env.logger.warn(" This is an warn message with emoji 🔥" )
350
+ return emptyList()
351
+ }
352
+ }
353
+ })
354
+ }.compile()
355
+ assertThat(result.exitCode).isEqualTo(ExitCode .OK )
356
+ assertThat(result.messages).contains(" This is a log message with ellipsis $ellipsis " )
357
+ assertThat(result.messages).contains(" This is an info message with unicode \uD83D\uDCAB " )
358
+ assertThat(result.messages).contains(" This is an warn message with emoji 🔥" )
359
+ }
360
+
326
361
companion object {
327
362
private val DUMMY_KOTLIN_SRC = SourceFile .kotlin(
328
363
" foo.bar.Dummy.kt" , """
0 commit comments