Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[core] Add integration tests #142

Merged
merged 2 commits into from
Mar 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,22 @@ package com.moriatsushi.koject.integrationtest.app

import android.app.Application
import androidx.test.core.app.ApplicationProvider
import com.moriatsushi.koject.ExperimentalKojectApi
import com.moriatsushi.koject.Koject
import com.moriatsushi.koject.android.application
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtraClass1
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtraSingleton1
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtras
import org.mockito.kotlin.mock

private val mockApplication: Application by lazy { mock() }

@OptIn(ExperimentalKojectApi::class)
actual fun Koject.setExtras() {
application(mockApplication)
addExtras(GlobalExtras(GlobalExtraClass1(), GlobalExtraSingleton1()))
addCommonExtras()
}

@OptIn(ExperimentalKojectApi::class)
fun Koject.runAndroidTest(block: () -> Unit) {
runTest(
preparation = {
application(ApplicationProvider.getApplicationContext())
addExtras(GlobalExtras(GlobalExtraClass1(), GlobalExtraSingleton1()))
addCommonExtras()
},
block = block,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,24 @@ annotation class WithNamedComponent

@ComponentExtras(WithNamedComponent::class)
class WithNamedComponentExtras(
@Named("constructor")
val constructorValue: String = "named-constructor",
@Named("component-constructor")
val constructorValue: String = "component-named-constructor",
) {
@Named("property")
val propertyValue: String = "named-property"
@Named("component-property")
val propertyValue: String = "component-named-property"

@Named("getter")
@Named("component-getter")
val getterValue: String
get() = "named-getter"
get() = "component-named-getter"
}

@WithNamedComponent
@Provides
class WithNamedComponentClass(
@Named("constructor")
@Named("component-constructor")
val constructorValue: String,
@Named("property")
@Named("component-property")
val propertyValue: String,
@Named("getter")
@Named("component-getter")
val getterValue: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ annotation class GetterQualifier
@ComponentExtras(WithQualifierComponent::class)
class WithQualifierComponentExtras(
@ConstructorQualifier
val constructorValue: String = "constructor",
val constructorValue: String = "component-constructor",
) {
@PropertyQualifier
val propertyValue: String = "property"
val propertyValue: String = "component-property"

@GetterQualifier
val getterValue: String
get() = "getter"
get() = "component-getter"
}

@WithQualifierComponent
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
@file:OptIn(ExperimentalKojectApi::class)

package com.moriatsushi.koject.integrationtest.app.extras

import com.moriatsushi.koject.ExperimentalKojectApi
import com.moriatsushi.koject.Named
import com.moriatsushi.koject.Provides
import com.moriatsushi.koject.extras.KojectExtras

@KojectExtras
class WithNamedExtras(
@Named("constructor")
val constructorValue: String = "named-constructor",
) {
@Named("property")
val propertyValue: String = "named-property"

@Named("getter")
val getterValue: String
get() = "named-getter"
}

@Provides
class WithNamedComponentExtrasHolder(
@Named("constructor")
val constructorValue: String,
@Named("property")
val propertyValue: String,
@Named("getter")
val getterValue: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
@file:OptIn(ExperimentalKojectApi::class)

package com.moriatsushi.koject.integrationtest.app.extras

import com.moriatsushi.koject.ExperimentalKojectApi
import com.moriatsushi.koject.Provides
import com.moriatsushi.koject.Qualifier
import com.moriatsushi.koject.extras.KojectExtras

@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class ConstructorQualifier

@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class PropertyQualifier

@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class GetterQualifier

@KojectExtras
class WithQualifierExtras(
@ConstructorQualifier
val constructorValue: String = "constructor",
) {
@PropertyQualifier
val propertyValue: String = "property"

@GetterQualifier
val getterValue: String
get() = "getter"
}

@Provides
class WithQualifierExtrasHolder(
@ConstructorQualifier
val constructorValue: String,
@PropertyQualifier
val propertyValue: String,
@GetterQualifier
val getterValue: String,
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
package com.moriatsushi.koject.integrationtest.app

import com.moriatsushi.koject.ExperimentalKojectApi
import com.moriatsushi.koject.Koject
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtraClass1
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtraSingleton1
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtras
import com.moriatsushi.koject.integrationtest.app.extras.WithNamedExtras
import com.moriatsushi.koject.integrationtest.app.extras.WithQualifierExtras
import com.moriatsushi.koject.start

fun Koject.runTest(
Expand All @@ -13,4 +19,11 @@ fun Koject.runTest(
stop()
}

@OptIn(ExperimentalKojectApi::class)
fun Koject.addCommonExtras() {
addExtras(GlobalExtras(GlobalExtraClass1(), GlobalExtraSingleton1()))
addExtras(WithQualifierExtras())
addExtras(WithNamedExtras())
}

expect fun Koject.setExtras()
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ class ComponentExtrasWithNamedTest {
val value = inject<WithNamedComponentClass>(
componentExtras = extras,
)
assertEquals("named-constructor", value.constructorValue)
assertEquals("named-property", value.propertyValue)
assertEquals("named-getter", value.getterValue)
assertEquals("component-named-constructor", value.constructorValue)
assertEquals("component-named-property", value.propertyValue)
assertEquals("component-named-getter", value.getterValue)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ class ComponentExtrasWithQualifierTest {
val value = inject<WithQualifierComponentClass>(
componentExtras = extras,
)
assertEquals("constructor", value.constructorValue)
assertEquals("property", value.propertyValue)
assertEquals("getter", value.getterValue)
assertEquals("component-constructor", value.constructorValue)
assertEquals("component-property", value.propertyValue)
assertEquals("component-getter", value.getterValue)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
@file:OptIn(ExperimentalKojectApi::class)

package com.moriatsushi.koject.integrationtest.app.extras

import com.moriatsushi.koject.ExperimentalKojectApi
import com.moriatsushi.koject.Koject
import com.moriatsushi.koject.inject
import com.moriatsushi.koject.integrationtest.app.runTest
import kotlin.test.Test
import kotlin.test.assertEquals

class KojectExtrasWithNamedTest {
@Test
fun successInject() = Koject.runTest {
val holder = inject<WithNamedComponentExtrasHolder>()
assertEquals("named-constructor", holder.constructorValue)
assertEquals("named-property", holder.propertyValue)
assertEquals("named-getter", holder.getterValue)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
@file:OptIn(ExperimentalKojectApi::class)

package com.moriatsushi.koject.integrationtest.app.extras

import com.moriatsushi.koject.ExperimentalKojectApi
import com.moriatsushi.koject.Koject
import com.moriatsushi.koject.inject
import com.moriatsushi.koject.integrationtest.app.runTest
import kotlin.test.Test
import kotlin.test.assertEquals

class KojectExtrasWithQualifierTest {
@Test
fun successInject() = Koject.runTest {
val holder = inject<WithQualifierExtrasHolder>()
assertEquals("constructor", holder.constructorValue)
assertEquals("property", holder.propertyValue)
assertEquals("getter", holder.getterValue)
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
package com.moriatsushi.koject.integrationtest.app

import com.moriatsushi.koject.ExperimentalKojectApi
import com.moriatsushi.koject.Koject
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtraClass1
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtraSingleton1
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtras

@OptIn(ExperimentalKojectApi::class)
actual fun Koject.setExtras() {
addExtras(GlobalExtras(GlobalExtraClass1(), GlobalExtraSingleton1()))
addCommonExtras()
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
package com.moriatsushi.koject.integrationtest.app

import com.moriatsushi.koject.ExperimentalKojectApi
import com.moriatsushi.koject.Koject
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtraClass1
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtraSingleton1
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtras

@OptIn(ExperimentalKojectApi::class)
actual fun Koject.setExtras() {
addExtras(GlobalExtras(GlobalExtraClass1(), GlobalExtraSingleton1()))
addCommonExtras()
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
package com.moriatsushi.koject.integrationtest.app

import com.moriatsushi.koject.ExperimentalKojectApi
import com.moriatsushi.koject.Koject
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtraClass1
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtraSingleton1
import com.moriatsushi.koject.integrationtest.app.extras.GlobalExtras

@OptIn(ExperimentalKojectApi::class)
actual fun Koject.setExtras() {
addExtras(GlobalExtras(GlobalExtraClass1(), GlobalExtraSingleton1()))
addCommonExtras()
}