mirror of
https://github.com/lightbend/config.git
synced 2025-03-23 07:40:25 +08:00
add tests for resolving mutually-referring objects
This commit is contained in:
parent
7ed9eee67e
commit
d32ba9aee8
@ -485,6 +485,63 @@ class ConfigSubstitutionTest extends TestUtils {
|
||||
assertTrue(e.getMessage.contains("item1.b"))
|
||||
}
|
||||
|
||||
// objects that mutually refer to each other
|
||||
private val delayedMergeObjectEmbrace = {
|
||||
parseObject("""
|
||||
defaults {
|
||||
a = 1
|
||||
b = 2
|
||||
}
|
||||
|
||||
item1 = ${defaults}
|
||||
// item1.c refers to a field in item2 that refers to item1
|
||||
item1.c = ${item2.d}
|
||||
// item1.x refers to a field in item2 that doesn't go back to item1
|
||||
item1.x = ${item2.y}
|
||||
|
||||
item2 = ${defaults}
|
||||
// item2.d refers to a field in item1
|
||||
item2.d = ${item1.a}
|
||||
item2.y = 15
|
||||
""")
|
||||
}
|
||||
|
||||
@Test
|
||||
def resolveDelayedMergeObjectEmbrace() {
|
||||
assertTrue(delayedMergeObjectEmbrace.attemptPeekWithPartialResolve("item1").isInstanceOf[ConfigDelayedMergeObject])
|
||||
assertTrue(delayedMergeObjectEmbrace.attemptPeekWithPartialResolve("item2").isInstanceOf[ConfigDelayedMergeObject])
|
||||
|
||||
val resolved = delayedMergeObjectEmbrace.toConfig.resolve()
|
||||
assertEquals(1, resolved.getInt("item1.c"))
|
||||
assertEquals(1, resolved.getInt("item2.d"))
|
||||
assertEquals(15, resolved.getInt("item1.x"))
|
||||
}
|
||||
|
||||
// objects that mutually refer to each other
|
||||
private val plainObjectEmbrace = {
|
||||
parseObject("""
|
||||
item1.a = 10
|
||||
item1.b = ${item2.d}
|
||||
item2.c = 12
|
||||
item2.d = 14
|
||||
item2.e = ${item1.a}
|
||||
item2.f = ${item1.b} // item1.b goes back to item2
|
||||
item2.g = ${item2.f} // goes back to ourselves
|
||||
""")
|
||||
}
|
||||
|
||||
@Test
|
||||
def resolvePlainObjectEmbrace() {
|
||||
assertTrue(plainObjectEmbrace.attemptPeekWithPartialResolve("item1").isInstanceOf[SimpleConfigObject])
|
||||
assertTrue(plainObjectEmbrace.attemptPeekWithPartialResolve("item2").isInstanceOf[SimpleConfigObject])
|
||||
|
||||
val resolved = plainObjectEmbrace.toConfig.resolve()
|
||||
assertEquals(14, resolved.getInt("item1.b"))
|
||||
assertEquals(10, resolved.getInt("item2.e"))
|
||||
assertEquals(14, resolved.getInt("item2.f"))
|
||||
assertEquals(14, resolved.getInt("item2.g"))
|
||||
}
|
||||
|
||||
@Test
|
||||
def useRelativeToSameFileWhenRelativized() {
|
||||
val child = parseObject("""foo=in child,bar=${foo}""")
|
||||
|
Loading…
Reference in New Issue
Block a user