/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* Ġ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 . gradle . gradle build . test . integration tests Ċ Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . tasks . Cache able Task Ċ import Ġorg . gradle . api . tasks . Input Directory Ċ import Ġorg . gradle . api . tasks . Path Sensitive Ċ import Ġorg . gradle . api . tasks . Path Sensitivity Ċ import Ġorg . gradle . gradle build . Build Environment Ċ import Ġjava . util . Timer Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . concurrent . timer Task ĊĊ Ċ /** Ċ Ġ* ĠVerifies Ġthe Ġcorrect Ġbehavior Ġof Ġa Ġfeature , Ġas Ġopposed Ġto Ġjust Ġa Ġsmall Ġunit Ġof Ġcode . Ċ Ġ* ĠUsually Ġreferred Ġto Ġas Ġ' functional Ġtests ' Ġin Ġliter ature , Ġbut Ġour Ġcode Ġbase Ġhas Ġh istor ically Ċ Ġ* Ġbeen Ġusing Ġthe Ġterm Ġ' integration Ġtest '. Ċ Ġ*/ Ċ @ Cache able Task Ċ abstract Ġclass ĠIntegration Test Ġ: ĠDistribution Test () Ġ{ ĊĊĠĠĠ Ġ@ Input Directory ĊĠĠĠ Ġ@ Path Sensitive ( Path Sensitivity . REL ATIVE ) ĊĠĠĠ Ġval Ġsamples Dir Ġ= Ġgradle Installation For Test . gradle Snippets Dir ĊĊĠĠĠ Ġoverride Ġfun Ġexecute Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġprint Stack traces After Timeout Ġ{ Ġsuper . execute Tests () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġprint Stack traces After Timeout ( work : Ġ() Ġ-> ĠUnit ) Ġ= Ġif Ġ( Build Environment . is Ci Server ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtimer Ġ= ĠTimer ( true ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschedule ( timer Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . java exec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclasspath Ġ= Ġthis @ IntegrationTest . classpath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Ġ= Ġ" org . gradle . inte g tests . fixtures . timeout . Java Process Stack Tr aces Monitor " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġdetermine Timeout Millis ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġwork () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġdetermine Timeout Millis () Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( system Properties [" org . gradle . inte gtest . exec uter "]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" embedded " Ġ-> ĠTimeUnit . MIN UTES . to Millis ( 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTimeUnit . MIN UTES . to Millis ( 1 6 5 ) Ġ// Ġ 2 h 4 5 m ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Classpath ( classpath : ĠFile Collection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġ' kotlin - daemon - client . jar ' Ġre packages Ġ' native - platform ' Ġwith Ġall Ġits Ġbinaries . ĊĠĠĠĠĠĠĠĠ Ġ* ĠHere Ġwe Ġmake Ġsure Ġit Ġis Ġplaced Ġat Ġthe Ġend Ġof Ġthe Ġtest Ġclasspath Ġso Ġthat Ġwe Ġdo Ġnot Ġaccidentally ĊĠĠĠĠĠĠĠĠ Ġ* Ġpick Ġparts Ġof Ġ' native - platform ' Ġfrom Ġthe Ġ' kotlin - daemon - client . jar ' Ġwhen Ġinstanti ating ĊĠĠĠĠĠĠĠĠ Ġ* Ġa ĠGradle Ġrunner . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġreordered Classpath Ġ= Ġclasspath . filter Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! file . name . startsWith (" kotlin - daemon - client ") ĊĠĠĠĠĠĠĠ Ġ}. plus ( classpath . filter Ġ{ Ġit . name . startsWith (" kotlin - daemon - client ") Ġ}) ĊĠĠĠĠĠĠĠ Ġsuper . set Classpath ( reordered Classpath ) ĊĠĠĠ Ġ} Ċ } Ċ