package Ġio . ktor . tests . server . features Ċ Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . content .* Ċ import Ġio . ktor . features .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . pipeline .* Ċ import Ġio . ktor . request .* Ċ import Ġio . ktor . response .* Ċ import Ġio . ktor . routing .* Ċ import Ġio . ktor . server . testing .* Ċ import Ġorg . junit .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠContent Neg otiation Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcustom ContentType Ġ= ĠContentType . parse (" application / ktor ") ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Empty () Ġ= Ġwith Test Application Ġ{ ĊĠĠĠĠĠĠĠ Ġapplication . install ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġapplication . routing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond (" OK ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost ("/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġcall . receive < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond (" OK : Ġ$ text ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġcall Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġcall . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ContentType . Text . Plain , Ġcall . response . contentType (). without Parameters ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġcall . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Post , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġ" The ĠText " ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġcall Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġcall . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ContentType . Text . Plain , Ġcall . response . contentType (). without Parameters ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK : ĠThe ĠText ", Ġcall . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠWrapper ( val Ġvalue : ĠString ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Custom () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Test Application Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . install ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister ( custom ContentType , Ġobject Ġ: ĠContent Converter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend Ġoverride Ġfun Ġconvert For Send ( context : ĠPipeline Context < Any , ĠApplication Call >, Ġvalue : ĠAny ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ! is ĠWrapper ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠText Content ("[ ${ value . value } ]", Ġcustom ContentType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend Ġoverride Ġfun Ġconvert For Receive ( context : ĠPipeline Context < Application Receive Request , ĠApplication Call >): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġcontext . subject . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġincoming Ġ= Ġcontext . subject . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ!= ĠWrapper :: class Ġ|| Ġincoming Ġ! is ĠIncoming Content ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWrapper ( incoming . read Text (). remove Sur rounding ("[ ", Ġ"] ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . routing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( Wrapper (" OK ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost ("/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġcall . receive < Wrapper >(). value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( Wrapper (" OK : Ġ$ text ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAccept able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . Accept , Ġcustom ContentType . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġcall Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġcall . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( custom ContentType , Ġcall . response . contentType (). without Parameters ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ("[ OK ]", Ġcall . response . content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUn accept able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġcall Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Not Accept able , Ġcall . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( call . response . headers [ HttpHeaders . ContentType ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( call . response . content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPost ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Post , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . ContentType , Ġcustom ContentType . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . Accept , Ġcustom ContentType . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġ"[ The ĠText ]" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġcall Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġcall . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( custom ContentType , Ġcall . response . contentType (). without Parameters ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ("[ OK : ĠThe ĠText ]", Ġcall . response . content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPost Ġwith Ġcharset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Post , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . ContentType , Ġcustom ContentType . with Charset ( Charsets . UTF _ 8 ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . Accept , Ġcustom ContentType . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġ"[ The ĠText ]" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġcall Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġcall . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( custom ContentType , Ġcall . response . contentType (). without Parameters ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ("[ OK : ĠThe ĠText ]", Ġcall . response . content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }