BAEL-1402 code for the article: Try-with-resources in Kotlin
This commit is contained in:
parent
c174946f85
commit
a758fd9cef
|
@ -44,6 +44,11 @@
|
||||||
<artifactId>kotlin-stdlib</artifactId>
|
<artifactId>kotlin-stdlib</artifactId>
|
||||||
<version>${kotlin-stdlib.version}</version>
|
<version>${kotlin-stdlib.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
|
<artifactId>kotlin-stdlib-jre8</artifactId>
|
||||||
|
<version>${kotlin-stdlib.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jetbrains.kotlin</groupId>
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
<artifactId>kotlin-test-junit</artifactId>
|
<artifactId>kotlin-test-junit</artifactId>
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
package com.baeldung.kotlin
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import java.beans.ExceptionListener
|
||||||
|
import java.beans.XMLEncoder
|
||||||
|
import java.io.*
|
||||||
|
import java.lang.Exception
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
import kotlin.test.fail
|
||||||
|
|
||||||
|
class UseTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenCloseable_whenUseIsCalled_thenItIsClosed() {
|
||||||
|
val stringWriter = StringWriter()
|
||||||
|
val writer = BufferedWriter(stringWriter) //Using a BufferedWriter because after close() it throws.
|
||||||
|
writer.use {
|
||||||
|
assertEquals(writer, it)
|
||||||
|
|
||||||
|
it.write("something")
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
writer.write("something else")
|
||||||
|
|
||||||
|
fail("write() should have thrown an exception because the writer is closed.")
|
||||||
|
} catch (e: IOException) {
|
||||||
|
//Ok
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals("something", stringWriter.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAutoCloseable_whenUseIsCalled_thenItIsClosed() {
|
||||||
|
val baos = ByteArrayOutputStream()
|
||||||
|
val encoder = XMLEncoder(PrintStream(baos)) //XMLEncoder is AutoCloseable but not Closeable.
|
||||||
|
//Here, we use a PrintStream because after close() it throws.
|
||||||
|
encoder.exceptionListener = ThrowingExceptionListener()
|
||||||
|
encoder.use {
|
||||||
|
assertEquals(encoder, it)
|
||||||
|
|
||||||
|
it.writeObject("something")
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
encoder.writeObject("something else")
|
||||||
|
encoder.flush()
|
||||||
|
|
||||||
|
fail("write() should have thrown an exception because the encoder is closed.")
|
||||||
|
} catch (e: IOException) {
|
||||||
|
//Ok
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun whenSimpleFormIsUsed_thenItWorks() {
|
||||||
|
StringWriter().use { it.write("something") }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ThrowingExceptionListener : ExceptionListener {
|
||||||
|
override fun exceptionThrown(e: Exception?) {
|
||||||
|
if(e != null) {
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue