package Ġorg . k oin . test . core Ċ Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Assert . fail Ċ import Ġorg . junit . Test Ċ import Ġorg . k oin . dsl . path . Path Ċ import Ġorg . k oin . dsl . module . module Ċ import Ġorg . k oin . error . Bad Path Exception Ċ import Ġorg . k oin . log . Print Logger Ċ import Ġorg . k oin . standalone . Stand Al one Context . start K oin Ċ import Ġorg . k oin . standalone . get Ċ import Ġorg . k oin . standalone . release Ċ import Ġorg . k oin . test . Auto Close K oin Test Ċ import Ġorg . k oin . test . ext . junit .* Ċ Ċ class ĠSingle Release Test Ġ: ĠAuto Close K oin Test () Ġ{ ĊĊĠĠĠ Ġval ĠH ierarchy Contexts Module Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠĠĠ Ġmodule ( path Ġ= Ġ" A ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Ġ{ ĠComponent A () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule ( path Ġ= Ġ" B ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Ġ{ ĠComponent B () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule ( path Ġ= Ġ" C ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Ġ{ ĠComponent C () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠComponent A ĊĠĠĠ Ġclass ĠComponent B ĊĠĠĠ Ġclass ĠComponent C ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġrelease Ġcontext Ġ- Ġfrom ĠB `() Ġ{ ĊĠĠĠĠĠĠĠ Ġstart K oin ( listOf ( Hierarchy Contexts Module ), Ġlogger Ġ= ĠPrint Logger ( show Debug Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġassert Contexts ( 4 ) ĊĠĠĠĠĠĠĠ Ġassert Definitions ( 3 ) ĊĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component A :: class , Ġ" A ") ĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component B :: class , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component C :: class , Ġ" C ") ĊĊĠĠĠĠĠĠĠ Ġassert Path (" B ", Ġ" A ") ĊĠĠĠĠĠĠĠ Ġassert Path (" C ", Ġ" B ") ĊĊĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= Ġget < Component A >() ĊĠĠĠĠĠĠĠ Ġval Ġb 1 Ġ= Ġget < Component B >() ĊĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġget < Component C >() ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġrelease (" B ") ĊĊĠĠĠĠĠĠĠ Ġassert Definitions ( 3 ) ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġa 2 Ġ= Ġget < Component A >() ĊĠĠĠĠĠĠĠ Ġval Ġb 2 Ġ= Ġget < Component B >() ĊĠĠĠĠĠĠĠ Ġval Ġc 2 Ġ= Ġget < Component C >() ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 1 ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( a 1 , Ġa 2 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( b 1 , Ġb 2 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( c 1 , Ġc 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġrelease Ġcontext Ġ- Ġfrom ĠA `() Ġ{ ĊĠĠĠĠĠĠĠ Ġstart K oin ( listOf ( Hierarchy Contexts Module )) ĊĊĠĠĠĠĠĠĠ Ġassert Contexts ( 4 ) ĊĠĠĠĠĠĠĠ Ġassert Definitions ( 3 ) ĊĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component A :: class , Ġ" A ") ĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component B :: class , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component C :: class , Ġ" C ") ĊĊĠĠĠĠĠĠĠ Ġassert Path (" B ", Ġ" A ") ĊĠĠĠĠĠĠĠ Ġassert Path (" C ", Ġ" B ") ĊĊĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= Ġget < Component A >() ĊĠĠĠĠĠĠĠ Ġval Ġb 1 Ġ= Ġget < Component B >() ĊĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġget < Component C >() ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġrelease (" A ") ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 0 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġa 2 Ġ= Ġget < Component A >() ĊĠĠĠĠĠĠĠ Ġval Ġb 2 Ġ= Ġget < Component B >() ĊĠĠĠĠĠĠĠ Ġval Ġc 2 Ġ= Ġget < Component C >() ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 1 ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( a 1 , Ġa 2 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( b 1 , Ġb 2 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( c 1 , Ġc 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġrelease Ġcontext Ġ- Ġfrom ĠROOT `() Ġ{ ĊĠĠĠĠĠĠĠ Ġstart K oin ( listOf ( Hierarchy Contexts Module )) ĊĊĠĠĠĠĠĠĠ Ġassert Contexts ( 4 ) ĊĠĠĠĠĠĠĠ Ġassert Definitions ( 3 ) ĊĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component A :: class , Ġ" A ") ĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component B :: class , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component C :: class , Ġ" C ") ĊĊĠĠĠĠĠĠĠ Ġassert Path (" B ", Ġ" A ") ĊĠĠĠĠĠĠĠ Ġassert Path (" C ", Ġ" B ") ĊĊĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= Ġget < Component A >() ĊĠĠĠĠĠĠĠ Ġval Ġb 1 Ġ= Ġget < Component B >() ĊĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġget < Component C >() ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġrelease ( Path . ROOT ) ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 0 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġa 2 Ġ= Ġget < Component A >() ĊĠĠĠĠĠĠĠ Ġval Ġb 2 Ġ= Ġget < Component B >() ĊĠĠĠĠĠĠĠ Ġval Ġc 2 Ġ= Ġget < Component C >() ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 1 ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( a 1 , Ġa 2 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( b 1 , Ġb 2 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( c 1 , Ġc 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġrelease Ġcontext Ġ- Ġfrom ĠC `() Ġ{ ĊĠĠĠĠĠĠĠ Ġstart K oin ( listOf ( Hierarchy Contexts Module )) ĊĊĠĠĠĠĠĠĠ Ġassert Contexts ( 4 ) ĊĠĠĠĠĠĠĠ Ġassert Definitions ( 3 ) ĊĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component A :: class , Ġ" A ") ĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component B :: class , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component C :: class , Ġ" C ") ĊĊĠĠĠĠĠĠĠ Ġassert Path (" B ", Ġ" A ") ĊĠĠĠĠĠĠĠ Ġassert Path (" C ", Ġ" B ") ĊĊĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= Ġget < Component A >() ĊĠĠĠĠĠĠĠ Ġval Ġb 1 Ġ= Ġget < Component B >() ĊĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġget < Component C >() ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġrelease (" C ") ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 2 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġa 2 Ġ= Ġget < Component A >() ĊĠĠĠĠĠĠĠ Ġval Ġb 2 Ġ= Ġget < Component B >() ĊĠĠĠĠĠĠĠ Ġval Ġc 2 Ġ= Ġget < Component C >() ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 1 ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( a 1 , Ġa 2 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( b 1 , Ġb 2 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( c 1 , Ġc 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġnot Ġrelease Ġcontext Ġ- Ġunknown Ġcontext `() Ġ{ ĊĠĠĠĠĠĠĠ Ġstart K oin ( listOf ( Hierarchy Contexts Module )) ĊĊĠĠĠĠĠĠĠ Ġassert Contexts ( 4 ) ĊĠĠĠĠĠĠĠ Ġassert Definitions ( 3 ) ĊĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component A :: class , Ġ" A ") ĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component B :: class , Ġ" B ") ĊĠĠĠĠĠĠĠ Ġassert IsIn Module Path ( Component C :: class , Ġ" C ") ĊĊĠĠĠĠĠĠĠ Ġassert Path (" B ", Ġ" A ") ĊĠĠĠĠĠĠĠ Ġassert Path (" C ", Ġ" B ") ĊĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( get < Component A >()) ĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( get < Component B >()) ĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( get < Component C >()) ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease (" D ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠBad Path Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert Remaining Instance Hold ers ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" A ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" B ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert Context Instances (" C ", Ġ 1 ) ĊĠĠĠ Ġ} Ċ }