Skip to content

Commit a738b52

Browse files
committed
Add DependencyInstantiationException
1 parent ad534c2 commit a738b52

File tree

3 files changed

+37
-10
lines changed

3 files changed

+37
-10
lines changed

nodal/src/androidUnitTest/kotlin/dev/omkartenkale/nodal/NodeDependenciesTest.kt

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
package dev.omkartenkale.nodal
22

3+
import dev.omkartenkale.nodal.exceptions.DependencyInstantiationException
34
import dev.omkartenkale.nodal.exceptions.DependencyNotFoundException
4-
import dev.omkartenkale.nodal.exceptions.DependencyRedeclarationException
5-
import dev.omkartenkale.nodal.exceptions.NodeCreationException
6-
import dev.omkartenkale.nodal.plugin.NodalPlugins
75
import dev.omkartenkale.nodal.util.MainDispatcherRule
8-
import dev.omkartenkale.nodal.util.assertDoesNotThrowException
9-
import dev.omkartenkale.nodal.util.assertNestedException
10-
import kotlinx.coroutines.ExperimentalCoroutinesApi
11-
import kotlinx.coroutines.test.currentTime
126
import kotlinx.coroutines.test.runTest
13-
import kotlinx.coroutines.yield
14-
import org.junit.Before
157
import org.junit.Rule
168
import org.junit.Test
179
import kotlin.test.assertEquals
1810
import kotlin.test.assertFails
1911
import kotlin.test.assertFailsWith
20-
import kotlin.test.assertNotEquals
12+
import kotlin.test.assertNotNull
2113
import kotlin.test.fail
2214

2315
class NodeDependenciesTest {
@@ -120,5 +112,33 @@ class NodeDependenciesTest {
120112
}
121113
}
122114

115+
@Test
116+
fun `verify parameter dependency can be resolved`(){
117+
class Foo(val value: Int)
118+
class Bar(val foo: Foo)
119+
class RootNode : Node()
120+
121+
val rootNode = Node.createRootNode(klass = RootNode::class, onRequestRemove = { }) {
122+
provides { Foo(111) }
123+
provides { Bar(get()) }
124+
} as RootNode
125+
126+
assertEquals(rootNode.dependencies.get<Bar>().foo.value, 111)
127+
}
128+
129+
@Test
130+
fun `verify parameter dependency can be resolved if error`(){
131+
class Foo
132+
class Bar(val foo: Foo)
133+
class RootNode : Node()
134+
135+
val rootNode = Node.createRootNode(klass = RootNode::class, onRequestRemove = { }) {
136+
provides { Bar(get()) }
137+
} as RootNode
138+
139+
assertFailsWith<DependencyInstantiationException>(){
140+
rootNode.dependencies.get<Bar>().foo
141+
}
142+
}
123143

124144
}

nodal/src/commonMain/kotlin/dev.omkartenkale.nodal/Scope.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.omkartenkale.nodal
22

3+
import dev.omkartenkale.nodal.exceptions.DependencyInstantiationException
34
import dev.omkartenkale.nodal.exceptions.DependencyNotFoundException
45
import dev.omkartenkale.nodal.exceptions.DependencyRedeclarationException
56
import org.koin.core.KoinApplication
@@ -8,6 +9,7 @@ import org.koin.core.definition.BeanDefinition
89
import org.koin.core.definition.Kind
910
import org.koin.core.definition.indexKey
1011
import org.koin.core.error.DefinitionOverrideException
12+
import org.koin.core.error.InstanceCreationException
1113
import org.koin.core.error.NoDefinitionFoundException
1214
import org.koin.core.instance.ScopedInstanceFactory
1315
import org.koin.core.logger.Level
@@ -92,6 +94,8 @@ public class Scope(public val name: String, public val koinScope: KoinScope, pub
9294
}
9395
}
9496
throw e
97+
}catch (e: InstanceCreationException) {
98+
throw DependencyInstantiationException(e)
9599
}
96100
}
97101

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package dev.omkartenkale.nodal.exceptions
2+
3+
public class DependencyInstantiationException(t: Throwable) : NodalException("Failed to instantiate node's dependency", t)

0 commit comments

Comments
 (0)