package Ġcom . trend y ol . bor u Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠMap Pipeline Step Tests Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġnot Ġbe Ġdead locked Ġwhen Ġthere Ġis Ġnot Ġalternative Ġbranch `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// given ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpipeline Ġ= ĠPipeline Builder < TestData Context >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ({ Ġit . intValue Ġ== Ġ 1 Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Pipeline Step ( Test Writer Step (" one ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Context Ġ= ĠTest DataContext (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . intValue Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Context Ġ= ĠTest DataContext (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . intValue Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// when ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline . execute ( first Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline . execute ( second Context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// then ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( first Context . intValue , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( first Context . text , Ġ" one ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( second Context . intValue , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( second Context . text , Ġ" null ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġpipeline Builder < TestData Context > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap ({ Ġfalse Ġ}) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġexecute Ġdifferent Ġpipelines Ġin Ġdifferent Ġbranches `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// given ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpipeline Ġ= ĠPipeline Builder < TestData Context >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ({ Ġcontext Ġ-> Ġcontext . intValue Ġ== Ġ 1 Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Pipeline Step ( Test Writer Step (" one ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. use Ġ{ Ġcontext : ĠTest DataContext , Ġnext : Ġsuspend Ġ() Ġ-> ĠUnit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . items [" Finished "] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Context Ġ= ĠTest DataContext (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . intValue Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Context Ġ= ĠTest DataContext (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . intValue Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// when ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline . execute ( first Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline . execute ( second Context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// then ĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( first Context . intValue , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( first Context . text , Ġ" one ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( first Context . items . contains (" Finished ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( second Context . intValue , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( second Context . text , Ġ" null ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( second Context . items . contains (" Finished ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġexecute Ġdifferent Ġchild Ġpipelines Ġby Ġpredicate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// given ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpipeline Ġ= ĠPipeline Builder < TestData Context >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ Ġcontext : ĠTest DataContext , Ġnext : Ġsuspend Ġ() Ġ-> ĠUnit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . items [" user "] Ġ= Ġ" bil al . k il ic " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ({ Ġcontext Ġ-> Ġcontext . intValue Ġ== Ġ 1 Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Pipeline Step ( Test Writer Step (" one ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ({ Ġcontext Ġ-> Ġcontext . intValue Ġ== Ġ 2 Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Pipeline Step ( Test Writer Step (" two ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Context Ġ= ĠTest DataContext (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . intValue Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Context Ġ= ĠTest DataContext (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . intValue Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// when ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline . execute ( first Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline . execute ( second Context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// then ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( first Context . intValue , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( first Context . text , Ġ" one ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( first Context . items [" user "], Ġ" bil al . k il ic ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( second Context . intValue , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( second Context . text , Ġ" two ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( second Context . items [" user "], Ġ" bil al . k il ic ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }