@@ -3,6 +3,7 @@ package com.tschuchort.compiletesting
33import okio.Buffer
44import org.assertj.core.api.Assertions.assertThat
55import com.tschuchort.compiletesting.KotlinCompilation.ExitCode
6+ import org.assertj.core.api.Assertions.fail
67import org.junit.Rule
78import org.junit.Test
89import org.junit.rules.TemporaryFolder
@@ -21,10 +22,11 @@ class KotlinCompilationTests {
2122 @Test
2223 fun `runs with only kotlin sources` () {
2324 val result = compilationPreset().copy(
24- sources = listOf (KotlinCompilation .SourceFile (" kSource.kt" , " " ))
25+ sources = listOf (KotlinCompilation .SourceFile (" kSource.kt" , " class KSource " ))
2526 ).compile_()
2627
2728 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
29+ assertClassLoadable(result, " KSource" )
2830 }
2931
3032 @Test
@@ -34,6 +36,7 @@ class KotlinCompilationTests {
3436 ).compile_()
3537
3638 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
39+ assertClassLoadable(result, " JSource" )
3740 }
3841
3942 @Test
@@ -62,6 +65,7 @@ class KotlinCompilationTests {
6265 ).compile_()
6366
6467 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
68+ assertClassLoadable(result, " KSourceKt" )
6569 }
6670
6771 @Test
@@ -85,17 +89,15 @@ class KotlinCompilationTests {
8589
8690 @Test
8791 fun `can compile Kotlin without JDK` () {
88- val source = KotlinCompilation .SourceFile (" kSource.kt" , """
89- |fun foo() {
90- |}
91- """ .trimMargin())
92+ val source = KotlinCompilation .SourceFile (" kSource.kt" , " class KClass" )
9293
9394 val result = compilationPreset().copy(
9495 sources = listOf (source),
9596 jdkHome = null
9697 ).compile_()
9798
9899 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
100+ assertClassLoadable(result, " KClass" )
99101 }
100102
101103 @Test
@@ -116,6 +118,7 @@ class KotlinCompilationTests {
116118 ).compile_()
117119
118120 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
121+ assertClassLoadable(result, " JSource" )
119122 }
120123
121124 @Test
@@ -141,10 +144,10 @@ class KotlinCompilationTests {
141144
142145 @Test
143146 fun `Java inherits classpath` () {
144- val source = KotlinCompilation .SourceFile (" Source .java" , """
147+ val source = KotlinCompilation .SourceFile (" JSource .java" , """
145148 package com.tschuchort.compiletesting;
146149
147- class Source {
150+ class JSource {
148151 void foo() {
149152 String s = KotlinCompilationTests.InheritedClass.class.getName();
150153 }
@@ -157,14 +160,15 @@ class KotlinCompilationTests {
157160 ).compile_()
158161
159162 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
163+ assertClassLoadable(result, " com.tschuchort.compiletesting.JSource" )
160164 }
161165
162166 @Test
163167 fun `Kotlin inherits classpath` () {
164- val source = KotlinCompilation .SourceFile (" Source .kt" , """
168+ val source = KotlinCompilation .SourceFile (" KSource .kt" , """
165169 package com.tschuchort.compiletesting
166170
167- class Source {
171+ class KSource {
168172 fun foo() {
169173 val s = KotlinCompilationTests.InheritedClass::class.java.name
170174 }
@@ -178,6 +182,7 @@ class KotlinCompilationTests {
178182 ).compile_()
179183
180184 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
185+ assertClassLoadable(result, " com.tschuchort.compiletesting.KSource" )
181186 }
182187
183188 @Test
@@ -263,6 +268,8 @@ class KotlinCompilationTests {
263268 ).compile_()
264269
265270 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
271+ assertClassLoadable(result, " com.tschuchort.compiletesting.KSource" )
272+ assertClassLoadable(result, " com.tschuchort.compiletesting.JSource" )
266273 }
267274
268275 @Test
@@ -290,6 +297,8 @@ class KotlinCompilationTests {
290297 ).compile_()
291298
292299 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
300+ assertClassLoadable(result, " com.tschuchort.compiletesting.KSource" )
301+ assertClassLoadable(result, " com.tschuchort.compiletesting.JSource" )
293302 }
294303
295304 @Test
@@ -310,9 +319,9 @@ class KotlinCompilationTests {
310319 ).compile_()
311320
312321 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
313- assertThat(result.systemOut ).contains(JavaTestProcessor .ON_INIT_MSG )
322+ assertThat(result.messages ).contains(JavaTestProcessor .ON_INIT_MSG )
314323
315- assertThat(ProcessedElemMessage .parseAllIn(result.systemOut )).anyMatch {
324+ assertThat(ProcessedElemMessage .parseAllIn(result.messages )).anyMatch {
316325 it.elementSimpleName == " KSource"
317326 }
318327 }
@@ -335,9 +344,9 @@ class KotlinCompilationTests {
335344 ).compile_()
336345
337346 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
338- assertThat(result.systemOut ).contains(JavaTestProcessor .ON_INIT_MSG )
347+ assertThat(result.messages ).contains(JavaTestProcessor .ON_INIT_MSG )
339348
340- assertThat(ProcessedElemMessage .parseAllIn(result.systemOut )).anyMatch {
349+ assertThat(ProcessedElemMessage .parseAllIn(result.messages )).anyMatch {
341350 it.elementSimpleName == " JSource"
342351 }
343352 }
@@ -361,9 +370,9 @@ class KotlinCompilationTests {
361370 ).compile_()
362371
363372 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
364- assertThat(result.systemOut ).contains(KotlinTestProcessor .ON_INIT_MSG )
373+ assertThat(result.messages ).contains(KotlinTestProcessor .ON_INIT_MSG )
365374
366- assertThat(ProcessedElemMessage .parseAllIn(result.systemOut )).anyMatch {
375+ assertThat(ProcessedElemMessage .parseAllIn(result.messages )).anyMatch {
367376 it.elementSimpleName == " KSource"
368377 }
369378 }
@@ -388,9 +397,9 @@ class KotlinCompilationTests {
388397 ).compile_()
389398
390399 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
391- assertThat(result.systemOut ).contains(KotlinTestProcessor .ON_INIT_MSG )
400+ assertThat(result.messages ).contains(KotlinTestProcessor .ON_INIT_MSG )
392401
393- assertThat(ProcessedElemMessage .parseAllIn(result.systemOut )).anyMatch {
402+ assertThat(ProcessedElemMessage .parseAllIn(result.messages )).anyMatch {
394403 it.elementSimpleName == " JSource"
395404 }
396405 }
@@ -414,7 +423,7 @@ class KotlinCompilationTests {
414423 ).compile_()
415424
416425 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
417- assertThat(result.systemOut ).contains(KotlinTestProcessor .ON_INIT_MSG )
426+ assertThat(result.messages ).contains(KotlinTestProcessor .ON_INIT_MSG )
418427
419428 val clazz = result.classLoader.loadClass(KotlinTestProcessor .GENERATED_PACKAGE +
420429 " ." + KotlinTestProcessor .GENERATED_KOTLIN_CLASS_NAME )
@@ -444,6 +453,8 @@ class KotlinCompilationTests {
444453 ).compile_()
445454
446455 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
456+ assertClassLoadable(result, " com.tschuchort.compiletesting.JSource" )
457+ assertClassLoadable(result, " ${KotlinTestProcessor .GENERATED_PACKAGE } .${KotlinTestProcessor .GENERATED_KOTLIN_CLASS_NAME } " )
447458 }
448459
449460 @Test
@@ -469,6 +480,8 @@ class KotlinCompilationTests {
469480 ).compile_()
470481
471482 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
483+ assertClassLoadable(result, " com.tschuchort.compiletesting.JSource" )
484+ assertClassLoadable(result, " ${KotlinTestProcessor .GENERATED_PACKAGE } .${KotlinTestProcessor .GENERATED_JAVA_CLASS_NAME } " )
472485 }
473486
474487 @Test
@@ -494,6 +507,8 @@ class KotlinCompilationTests {
494507 ).compile_()
495508
496509 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
510+ assertClassLoadable(result, " com.tschuchort.compiletesting.KSource" )
511+ assertClassLoadable(result, " ${KotlinTestProcessor .GENERATED_PACKAGE } .${KotlinTestProcessor .GENERATED_KOTLIN_CLASS_NAME } " )
497512 }
498513
499514 @Test
@@ -519,6 +534,8 @@ class KotlinCompilationTests {
519534 ).compile_()
520535
521536 assertThat(result.exitCode).isEqualTo(ExitCode .OK )
537+ assertClassLoadable(result, " com.tschuchort.compiletesting.KSource" )
538+ assertClassLoadable(result, " ${KotlinTestProcessor .GENERATED_PACKAGE } .${KotlinTestProcessor .GENERATED_JAVA_CLASS_NAME } " )
522539 }
523540
524541
@@ -541,18 +558,18 @@ class KotlinCompilationTests {
541558 )
542559 }
543560
544- private fun KotlinCompilation.compile_ () = run {
545- val systemOutBuffer = Buffer ()
546- val result = copy(systemOut = PrintStream (TeeOutputStream (System .out , systemOutBuffer.outputStream())))
547- .compile()
561+ private fun KotlinCompilation.compile_ () = copy(systemOut = System .out ).compile()
548562
549- return @run object {
550- val exitCode = result.exitCode
551- val classLoader = URLClassLoader (arrayOf(result.outputDirectory.toURI().toURL()),
552- this ::class .java.classLoader)
553- val systemOut = systemOutBuffer.readUtf8()
563+ private fun assertClassLoadable (compileResult : KotlinCompilation .Result , className : String ): Class <* > {
564+ try {
565+ val clazz = compileResult.classLoader.loadClass(className)
566+ assertThat(clazz).isNotNull
567+ return clazz
568+ }
569+ catch (e: ClassNotFoundException ) {
570+ return fail<Nothing >(" Class $className could not be loaded" )
554571 }
555572 }
556-
573+
557574 class InheritedClass {}
558575}
0 commit comments