/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġkotlinx . coroutines . flow Ċ Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . channels .* Ċ import Ġkotlin . coroutines .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠFlow In variants Test Ġ: ĠTest Base () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest WithContext Contract () Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlinx . coroutines . with Context ( Non C ancellable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġone Ġcannot Ġbe Ġprevent ed Ġ:( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest With Dispatcher Contract Vi olated () Ġ= Ġrun Test ({ Ġit Ġis ĠIllegalStateException Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlinx . coroutines . with Context ( Named Dispatch ers (" foo ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest WithName Contract Vi olated () Ġ= Ġrun Test ({ Ġit Ġis ĠIllegalStateException Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlinx . coroutines . with Context ( Coroutine Name (" foo ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest WithContext DoesNot Change Execution () Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Named Dispatch ers . name ()) ĊĠĠĠĠĠĠĠ Ġ}. flow On ( Named Dispatch ers (" original ")) ĊĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ" unknown " ĊĠĠĠĠĠĠĠ Ġwith Context ( Named Dispatch ers (" misc ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( Named Dispatch ers (" upstream ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( this Ġ+ ĠNamed Dispatch ers (" consumer ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. join () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" original ", Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Scoped Job () Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġflow Ġ{ Ġemit ( 1 ) Ġ}. buffer ( Empty Coroutine Context ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfinish ( 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Scoped Job With Violation () Ġ= Ġrun Test ({ Ġit Ġis ĠIllegalStateException Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġflow Ġ{ Ġemit ( 1 ) Ġ}. buffer ( Dispatch ers . Un conf ined ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfinish ( 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFlow < Int >. buffer ( coroutine Context : ĠCor outine Context ): ĠFlow < Int > Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠChannel < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollect Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . send ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( coroutine Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġchannel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ