/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . test . client server Ċ Ċ import Ġjava . io . File Ċ import Ġjava . io . Object InputStream Ċ import Ġjava . io . Object OutputStream Ċ import Ġjava . net . Socket Ċ import Ġjava . net . URL Ċ import Ġkotlin . test . fail Ċ Ċ class ĠTest Proxy ( val Ġserver Port : ĠInt , Ġval Ġtest Class : ĠString , Ġval Ġclass Path : ĠList < URL >) Ġ{ ĊĊĠĠĠ Ġfun Ġrun Test (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSocket (" localhost ", Ġserver Port ). use Ġ{ Ġclient Socket Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠObject OutputStream ( client Socket . get OutputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠObject InputStream ( client Socket . getInputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write Object ( Message Header . NEW _ TEST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write Object ( test Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write Object (" box ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write Object ( Message Header . CLASS _ PATH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// filter Ġout Ġj dk Ġlibs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write Object ( filter Out J dk J ars ( class Path ). to Typed Array ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġinput . read Object () Ġas ĠMessage Header ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message Ġ== ĠMessage Header . RESULT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . read Object () Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( message Ġ== ĠMessage Header . ERROR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġinput . read Object () Ġas ĠThrowable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Unknown Ġmessage : Ġ$ message ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfilter Out J dk J ars ( class Path : ĠList < URL >): ĠList < URL > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjava Home Ġ= ĠSystem . getProperty (" java . home ") ĊĠĠĠĠĠĠĠ Ġval Ġjava Folder Ġ= ĠFile ( java Home ) ĊĠĠĠĠĠĠĠ Ġreturn Ġclass Path . filter Not Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( it . file ). startsWith ( java Folder ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }