Skip to content

Commit

Permalink
Add a test case for asserting current behavior with type argument nul…
Browse files Browse the repository at this point in the history
…lability.

RELNOTES=n/a
PiperOrigin-RevId: 628130557
  • Loading branch information
wanyingd1996 authored and Dagger Team committed Apr 25, 2024
1 parent efa34f2 commit d9c0357
Showing 1 changed file with 40 additions and 5 deletions.
45 changes: 40 additions & 5 deletions javatests/dagger/functional/kotlinsrc/nullables/NullabilityTest.kt
Expand Up @@ -21,9 +21,11 @@ import dagger.Component
import dagger.Module
import dagger.Provides
import dagger.Reusable
import dagger.multibindings.IntoSet
import java.lang.NullPointerException
import javax.inject.Inject
import javax.inject.Provider
import javax.inject.Singleton
import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
Expand All @@ -34,26 +36,48 @@ class NullabilityTest {
@Component(dependencies = [NullComponent::class])
internal interface NullComponentWithDependency {
fun string(): String?

fun number(): Number

fun stringProvider(): Provider<String>

fun numberProvider(): Provider<Number>
}

interface Bar<T> {}

class BarNoNull : Bar<String>

class BarWithNull : Bar<String?>

@Component(modules = [NullModule::class])
internal interface NullComponent {
fun string(): String?

fun integer(): Int?

fun nullFoo(): NullFoo

fun number(): Number

fun stringProvider(): Provider<String>

fun numberProvider(): Provider<Number>

fun setOfBar(): Set<Bar<String>>

fun setOfBarWithNullableArg(): Set<Bar<String?>>
}

@Module
internal class NullModule {
var numberValue: Number? = null
var integerCallCount = 0

@IntoSet @Provides fun providesNullableStringInToSet(): Bar<String?> = BarWithNull()

@IntoSet @Provides fun providesNonNullStringIntoSet(): Bar<String> = BarNoNull()

@Provides fun provideNullableString(): String? = null

@Provides fun provideNumber(): Number = numberValue!!
Expand All @@ -73,7 +97,7 @@ class NullabilityTest {
val string: String?,
val number: Number,
val stringProvider: Provider<String>,
val numberProvider: Provider<Number>
val numberProvider: Provider<Number>,
) {
var methodInjectedString: String? = null
lateinit var methodInjectedNumber: Number
Expand All @@ -85,7 +109,7 @@ class NullabilityTest {
string: String?,
number: Number,
stringProvider: Provider<String>,
numberProvider: Provider<Number>
numberProvider: Provider<Number>,
) {
methodInjectedString = string
methodInjectedNumber = number
Expand Down Expand Up @@ -126,12 +150,12 @@ class NullabilityTest {
validate(
nullFoo.methodInjectedString,
nullFoo.methodInjectedStringProvider,
nullFoo.methodInjectedNumberProvider
nullFoo.methodInjectedNumberProvider,
)
validate(
nullFoo.fieldInjectedString,
nullFoo.fieldInjectedStringProvider,
nullFoo.fieldInjectedNumberProvider
nullFoo.fieldInjectedNumberProvider,
)
}

Expand All @@ -146,18 +170,29 @@ class NullabilityTest {
assertThat(module.integerCallCount).isEqualTo(1)
assertThat(component.integer()).isNull()
assertThat(module.integerCallCount).isEqualTo(1)
assertThat(component.setOfBar().size).isEqualTo(2)
assertThat(component.setOfBarWithNullableArg().size).isEqualTo(2)
}

@Test
fun testNullability_components() {
val nullComponent: NullComponent =
object : NullComponent {
override fun string(): String? = null

override fun integer(): Int? = null

override fun stringProvider(): Provider<String> = Provider { null!! }

override fun numberProvider(): Provider<Number> = Provider { null!! }

override fun number(): Number = null!!

override fun nullFoo(): NullFoo = null!!

override fun setOfBar(): Set<Bar<String>> = emptySet()

override fun setOfBarWithNullableArg(): Set<Bar<String?>> = emptySet()
}
val component =
DaggerNullabilityTest_NullComponentWithDependency.builder()
Expand All @@ -181,7 +216,7 @@ class NullabilityTest {
private fun validate(
string: String?,
stringProvider: Provider<String>,
numberProvider: Provider<Number>
numberProvider: Provider<Number>,
) {
assertThat(string).isNull()
assertThat(numberProvider).isNotNull()
Expand Down

0 comments on commit d9c0357

Please sign in to comment.