@@ -440,4 +440,70 @@ class Tests_13_Scope {
440440 assertTrue(c.closed)
441441 }
442442
443+ @Test
444+ fun test_18_ScopedSetBindingSingleton () {
445+ val registries = mapOf (" a" to SingleItemScopeRegistry (), " b" to SingleItemScopeRegistry ())
446+ val myScope = object : Scope <String > {
447+ override fun getRegistry (context : String ) = registries[context]!!
448+ }
449+
450+ val di = DI {
451+ bindSet<IPerson > {
452+ add { scoped(myScope).singleton { Person (" Salomon" ) } }
453+ add { scoped(myScope).singleton { Person (" Laila" ) } }
454+ }
455+ }
456+
457+ val personsA: Set <IPerson > by di.on(context = " a" ).instance()
458+ val personsB: Set <IPerson > by di.on(context = " b" ).instance()
459+
460+ assertEquals(2 , personsA.size)
461+ assertEquals(2 , personsB.size)
462+
463+ val personsA2: Set <IPerson > by di.on(context = " a" ).instance()
464+ assertEquals(personsA, personsA2)
465+
466+ registries[" a" ]!! .clear()
467+ val personsA3: Set <IPerson > by di.on(context = " a" ).instance()
468+ assertTrue(personsA.none { a -> personsA3.any { b -> a == = b } })
469+ }
470+
471+ @Test
472+ fun test_19_NonScopedSetBindingConvenienceMethods () {
473+ val di = DI {
474+ bindSet<IPerson > {
475+ addSingleton { Person (" Salomon" ) }
476+ addProvider { Person (" Laila" ) }
477+ addInstance(Person (" Mary" ))
478+ }
479+ }
480+
481+ val persons: Set <IPerson > by di.instance()
482+ assertEquals(3 , persons.size)
483+ assertTrue(Person (" Salomon" ) in persons)
484+ assertTrue(Person (" Laila" ) in persons)
485+ assertTrue(Person (" Mary" ) in persons)
486+ }
487+
488+ @Test
489+ fun test_20_ScopedArgSetBindingMultiton () {
490+ val registries = mapOf (" a" to SingleItemScopeRegistry (), " b" to SingleItemScopeRegistry ())
491+ val myScope = object : Scope <String > {
492+ override fun getRegistry (context : String ) = registries[context]!!
493+ }
494+
495+ val di = DI {
496+ bindArgSet<String , IPerson > {
497+ add { scoped(myScope).multiton { name: String -> Person (name) } }
498+ }
499+ }
500+
501+ val personsA: Set <IPerson > by di.on(context = " a" ).instance(arg = " Salomon" )
502+ assertEquals(1 , personsA.size)
503+ assertTrue(Person (" Salomon" ) in personsA)
504+
505+ val personsA2: Set <IPerson > by di.on(context = " a" ).instance(arg = " Salomon" )
506+ assertEquals(personsA, personsA2)
507+ }
508+
443509}
0 commit comments