package Ġdev . matrix . cor x Ċ Ċ import Ġkotlinx . coroutines . Cancellation Exception Ċ import Ġkotlinx . coroutines . Comp letable Deferred Ċ import Ġkotlinx . coroutines . Job Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . Assert .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* Ġ@ author ĠR ost ys lav . Les ov yi Ċ Ġ*/ Ċ class ĠCo 2 Rx Kt Test Ġ{ ĊĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĠĠĠ Ġ// ĠComp letable ĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Comp letable _ positive () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠJob () ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Comp letable (). test () ĊĊĠĠĠĠĠĠĠ Ġjob . complete () ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Comp letable _ error () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠJob () ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Comp letable (). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . complete Exception ally ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Error Ġ{ Ġit . message Ġ== Ġexception . message Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Comp letable _ cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠJob () ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Comp letable (). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠC ancellation Exception (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . cancel ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Error Ġ{ Ġit . message Ġ== Ġexception . message Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Comp letable _ cancel NoError () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠJob () ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Comp letable ( complete On Job Cancel Ġ= Ġtrue ). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠC ancellation Exception (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . cancel ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Comp letable _ dispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠJob () ĊĠĠĠĠĠĠĠ Ġjob . to Comp letable (). subscribe (). dispose () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( job . is Cancelled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Comp letable _ dispose No Cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠJob () ĊĠĠĠĠĠĠĠ Ġjob . to Comp letable ( cancel Job On Dispose Ġ= Ġfalse ). subscribe (). dispose () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( job . isActive ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĠĠĠ Ġ// ĠSingle ĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Single _ positive () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Single (). test () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ" YES !" ĊĊĠĠĠĠĠĠĠ Ġjob . complete ( result ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Value ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Single _ error () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Single (). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . complete Exception ally ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Error Ġ{ Ġit . message Ġ== Ġexception . message Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Single _ cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Single (). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠC ancellation Exception (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . cancel ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Error Ġ{ Ġit . message Ġ== Ġexception . message Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Single _ dispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġjob . to Single (). subscribe (). dispose () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( job . is Cancelled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Single _ dispose No Cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġjob . to Single ( cancel Job On Dispose Ġ= Ġfalse ). subscribe (). dispose () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( job . isActive ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĠĠĠ Ġ// ĠMaybe ĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Maybe _ positive () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Maybe (). test () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ" YES !" ĊĊĠĠĠĠĠĠĠ Ġjob . complete ( result ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Value ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Maybe _ error () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Maybe (). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . complete Exception ally ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Error Ġ{ Ġit . message Ġ== Ġexception . message Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Maybe _ cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Maybe (). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠC ancellation Exception (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . cancel ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Error Ġ{ Ġit . message Ġ== Ġexception . message Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Maybe _ cancel NoError () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Maybe ( complete On Job Cancel Ġ= Ġtrue ). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠC ancellation Exception (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . cancel ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Maybe _ dispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġjob . to Maybe (). subscribe (). dispose () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( job . is Cancelled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Maybe _ dispose No Cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġjob . to Maybe ( cancel Job On Dispose Ġ= Ġfalse ). subscribe (). dispose () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( job . isActive ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĠĠĠ Ġ// ĠObservable ĊĠĠĠ Ġ////////////////////////////////////////////////////////////////// //////////////////////// ////// ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Observable _ positive () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Observable (). test () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ" YES !" ĊĊĠĠĠĠĠĠĠ Ġjob . complete ( result ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Value ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Observable _ error () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Observable (). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . complete Exception ally ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Error Ġ{ Ġit . message Ġ== Ġexception . message Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Observable _ cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Observable (). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠC ancellation Exception (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . cancel ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Error Ġ{ Ġit . message Ġ== Ġexception . message Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Observable _ cancel NoError () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġjob . to Observable ( complete On Job Cancel Ġ= Ġtrue ). test () ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠC ancellation Exception (" YES !") ĊĊĠĠĠĠĠĠĠ Ġjob . cancel ( exception ) ĊĊĠĠĠĠĠĠĠ Ġobserver . await Terminal Event ( 1 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Observable _ dispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġjob . to Observable (). subscribe (). dispose () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( job . is Cancelled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto Observable _ dispose No Cancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= ĠComp letable Deferred < String >() ĊĠĠĠĠĠĠĠ Ġjob . to Observable ( cancel Job On Dispose Ġ= Ġfalse ). subscribe (). dispose () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( job . isActive ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ