Bael 756 (#1513)
* BAEL-756 code for kotlin null-safety article * BAEL-756 fix typo * BAEL-756 increment version of Kotlin * BAEL-756 remove duplicate form pom
This commit is contained in:
parent
361df07694
commit
1a7ccb8248
|
@ -90,10 +90,9 @@
|
|||
|
||||
<properties>
|
||||
<junit.version>4.12</junit.version>
|
||||
<kotlin-maven-plugin.version>1.0.6</kotlin-maven-plugin.version>
|
||||
<kotlin-test-junit.version>1.0.6</kotlin-test-junit.version>
|
||||
<kotlin-stdlib.version>1.0.6</kotlin-stdlib.version>
|
||||
<kotlin-maven-plugin.version>1.0.6</kotlin-maven-plugin.version>
|
||||
<kotlin-maven-plugin.version>1.1.1</kotlin-maven-plugin.version>
|
||||
<kotlin-test-junit.version>1.1.1</kotlin-test-junit.version>
|
||||
<kotlin-stdlib.version>1.1.1</kotlin-stdlib.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,140 @@
|
|||
package com.baeldung.kotlin
|
||||
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFailsWith
|
||||
import kotlin.test.assertNull
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
|
||||
class NullSafetyTest {
|
||||
@Test
|
||||
fun givenNonNullableField_whenAssignValueToIt_thenNotNeedToCheckAgainstNull() {
|
||||
//given
|
||||
var a: String = "value"
|
||||
//a = null compilation error
|
||||
|
||||
//then
|
||||
assertEquals(a.length, 5)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenNullableField_whenReadValue_thenNeedToCheckAgainstNull() {
|
||||
//given
|
||||
var b: String? = "value"
|
||||
b = null
|
||||
|
||||
//when
|
||||
if (b != null) {
|
||||
|
||||
} else {
|
||||
assertNull(b)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenComplexObject_whenUseSafeCall_thenShouldChainCallsResultingWithValue() {
|
||||
//given
|
||||
val p: Person? = Person(Country("ENG"))
|
||||
|
||||
//when
|
||||
val res = p?.country?.code
|
||||
|
||||
//then
|
||||
assertEquals(res, "ENG")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenComplexObject_whenUseSafeCall_thenShouldChainCallsResultingWithNull() {
|
||||
//given
|
||||
val p: Person? = Person(Country(null))
|
||||
|
||||
//when
|
||||
val res = p?.country?.code
|
||||
|
||||
//then
|
||||
assertNull(res)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenCollectionOfObjects_whenUseLetOperator_thenShouldApplyActionOnlyOnNonNullValue() {
|
||||
//given
|
||||
val firstName = "Tom"
|
||||
val secondName = "Michael"
|
||||
val names: List<String?> = listOf(firstName, null, secondName)
|
||||
|
||||
//when
|
||||
var res = listOf<String?>()
|
||||
for (item in names) {
|
||||
item?.let { res = res.plus(it) }
|
||||
}
|
||||
|
||||
//then
|
||||
assertEquals(2, res.size)
|
||||
assertTrue { res.contains(firstName) }
|
||||
assertTrue { res.contains(secondName) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenNullableReference_whenUseElvisOperator_thenShouldReturnValueIfReferenceIsNotNull() {
|
||||
//given
|
||||
val value: String? = "name"
|
||||
|
||||
//when
|
||||
val res = value?.length ?: -1
|
||||
|
||||
//then
|
||||
assertEquals(res, 4)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenNullableReference_whenUseElvisOperator_thenShouldReturnDefaultValueIfReferenceIsNull() {
|
||||
//given
|
||||
val value: String? = null
|
||||
|
||||
//when
|
||||
val res = value?.length ?: -1
|
||||
|
||||
//then
|
||||
assertEquals(res, -1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenNullableField_whenUsingDoubleExclamationMarkOperatorOnNull_thenThrowNPE() {
|
||||
//given
|
||||
var b: String? = "value"
|
||||
b = null
|
||||
|
||||
//when
|
||||
assertFailsWith<NullPointerException> {
|
||||
b!!.length
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenNullableField_whenUsingDoubleExclamationMarkOperatorOnNotNull_thenReturnValue() {
|
||||
//given
|
||||
val b: String? = "value"
|
||||
|
||||
//then
|
||||
assertEquals(b!!.length, 5)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenNullableList_whenUseFilterNotNullMethod_thenRemoveALlNullValues() {
|
||||
//given
|
||||
val list: List<String?> = listOf("a", null, "b")
|
||||
|
||||
//when
|
||||
val res = list.filterNotNull()
|
||||
|
||||
//then
|
||||
assertEquals(res.size, 2)
|
||||
assertTrue { res.contains("a") }
|
||||
assertTrue { res.contains("b") }
|
||||
}
|
||||
}
|
||||
|
||||
data class Person(val country: Country?)
|
||||
|
||||
data class Country(val code: String?)
|
Loading…
Reference in New Issue