/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 - 2 0 1 9 ĠJetBrains Ġs . r . o Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġio . ktor . tests . server . features Ċ Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . http . content .* Ċ import Ġio . ktor . features .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . response .* Ċ import Ġio . ktor . routing .* Ċ import Ġio . ktor . server . testing .* Ċ import Ġorg . junit .* Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules .* Ċ import Ġorg . junit . runner .* Ċ import Ġorg . junit . runners .* Ċ import Ġjava . io .* Ċ import Ġjava . nio . file .* Ċ import Ġjava . text .* Ċ import Ġjava . time .* Ċ import Ġjava . util .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠE Tags Test Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġwith Conditional Application ( body : ĠTest Application Engine . () Ġ-> ĠUnit ) Ġ= Ġwith Test Application Ġ{ ĊĠĠĠĠĠĠĠ Ġapplication . install ( Conditional Headers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ{ ĠlistOf ( Entity Tag Version (" tag 1 ")) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapplication . routing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text (" response ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbody () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest No Conditions (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("\" tag 1 \"", Ġresult . response . headers [ HttpHeaders . ET ag ]) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Match Condition Accepted (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If Match , Ġ" tag 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("\" tag 1 \"", Ġresult . response . headers [ HttpHeaders . ET ag ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Match Condition Failed (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If Match , Ġ" tag 2 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Precondition Failed , Ġresult . response . status ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If None Match Condition Accepted (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If None Match , Ġ" tag 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Not Modified , Ġresult . response . status ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If None Match Weak Condition Accepted (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If None Match , Ġ" W / tag 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Not Modified , Ġresult . response . status ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If None Match Condition Failed (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If None Match , Ġ" tag 2 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("\" tag 1 \"", Ġresult . response . headers [ HttpHeaders . ET ag ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Match Star (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If Match , Ġ"* ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("\" tag 1 \"", Ġresult . response . headers [ HttpHeaders . ET ag ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If None Match Star (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If None Match , Ġ"* ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠ Ġ// Ġnote : Ġstar Ġfor Ġif - none - match Ġis Ġa Ġspecial Ġcase ĊĠĠĠĠĠĠĠ Ġ// Ġthat Ġshould Ġbe Ġhandled Ġseparately ĊĠĠĠĠĠĠĠ Ġ// Ġso Ġwe Ġalways Ġpass Ġit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If None Match List Condition Failed (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If None Match , Ġ" tag 0 , tag 1 , tag 3 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Not Modified , Ġresult . response . status ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If None Match List Condition Success (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If None Match , Ġ" tag 2 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("\" tag 1 \"", Ġresult . response . headers [ HttpHeaders . ET ag ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Match List Condition Accepted (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If Match , Ġ" tag 0 , tag 1 , tag 3 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("\" tag 1 \"", Ġresult . response . headers [ HttpHeaders . ET ag ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Match List Condition Failed (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġhandle Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . If Match , Ġ" tag 0 , tag 2 , tag 3 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . request Handled ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Precondition Failed , Ġresult . response . status ()) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ RunWith ( Parameterized :: class ) Ċ class ĠLast Modified Test (@ Suppress (" UNUSED _ PARAMETER ") Ġname : ĠString , Ġzone : ĠZone Id ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ( name Ġ= Ġ"{ 0 }") ĊĠĠĠĠĠĠĠ Ġfun Ġzones (): ĠList < Array < Any >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( array Of < Any >(" GMT ", ĠZone Id . of (" GMT ")), ĠarrayOf < Any >(" Some Local ", ĠZone Id . of (" GMT + 1 "))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdate Ġ= ĠZ onedDateTime . now ( zone ) !! ĊĊĠĠĠ Ġprivate Ġfun Ġwith Conditional Application ( body : ĠTest Application Engine . () Ġ-> ĠUnit ) Ġ= Ġwith Test Application Ġ{ ĊĠĠĠĠĠĠĠ Ġapplication . install ( Conditional Headers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ{ ĠlistOf ( LastModified Version ( date )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapplication . routing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text (" response ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbody () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest No Headers (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/ "). let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Modified Since Eq (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Not Modified , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( result . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Modified Since Eq Z oned () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Test Application Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . install ( Conditional Headers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ{ ĠlistOf ( LastModified Version ( date )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . routing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text (" response ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Not Modified , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( result . response . content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Modified Since Less (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . minus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Modified Since Gt (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Not Modified , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( result . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Un Modified Since Eq (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Un Modified Since Less (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . minus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Precondition Failed , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( result . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Un Modified Since Gt (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Un modified Since Illegal (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zz z " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zz z " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zz z " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zz z " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days (- 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Precondition Failed , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Un modified Since Multiple (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 2 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days (- 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 2 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Precondition Failed , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( result . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest If Modified Since Multiple (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days (- 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 2 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 2 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Not Modified , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( result . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Both (): ĠUnit Ġ= Ġwith Conditional Application Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days (- 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" response ", Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days (- 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days (- 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Precondition Failed , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Not Modified , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days ( 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Headers . If Un modified Since , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . plus Days (- 1 ). to Http DateString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboth Ġconditions Ġare Ġnot Ġmet Ġbut Ġactually Ġit Ġis Ġnot Ġclear Ġwhich Ġone Ġshould Ġwin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġwe Ġdeclare Ġthe Ġorder ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . Not Modified , Ġresult . response . status ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult . response . content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠLast Modified Version Test Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġtemporary Default Timezone ( time Zone : ĠTime Zone , Ġblock : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoriginal TimeZone : ĠTime Zone Ġ= ĠTime Zone . getDefault () ĊĠĠĠĠĠĠĠ ĠTime Zone . setDefault ( time Zone ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTime Zone . setDefault ( original TimeZone ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck LastModified Header IsIn dependent Of Local Timezone ( construct LastModified Version : Ġ( Date ) Ġ-> ĠLast Modified Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup : Ġany Ġnon - zero - offset - Timezone Ġwill Ġdo ĊĠĠĠĠĠĠĠ Ġtemporary Default Timezone ( TimeZone . getTime Zone (" GMT + 0 8 : 0 0 ")) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġguard : Ġlocal Ġdefault Ġtimezone Ġneeds Ġto Ġbe Ġdifferent Ġfrom ĠGMT Ġfor Ġthe Ġproblem Ġto Ġmanifest ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTime Zone . getDefault (). raw Offset Ġ!= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" invalid Ġtest Ġsetup Ġ- Ġlocal Ġtimezone Ġis ĠGMT : Ġ${ TimeZone . getDefault () }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsetup : Ġlast Ġmodified Ġfor Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected LastModified : ĠDate Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ĠHH : mm : ss Ġz "). parse (" 2 0 1 8 - 0 3 - 0 4 Ġ 1 5 : 1 2 : 2 3 ĠGMT ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsetup : Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Modified Version Ġ= Ġconstruct LastModified Version ( expected LastModified ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsetup ĠHeaders Builder Ġas Ġtest Ġspy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheaders Builder Ġ= ĠHeaders Builder () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexercise ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Modified Version . append Headers To ( headers Builder ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Sun , Ġ 0 4 ĠMar Ġ 2 0 1 8 Ġ 1 5 : 1 2 : 2 3 ĠGMT ", Ġheaders Builder [" Last - Modified "]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlast Modified Header From Date IsIn dependent Of Local Timezone () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck LastModified Header IsIn dependent Of Local Timezone Ġ{ Ġinput : ĠDate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLast Modified Version ( input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlast Modified Header From LocalDateTime IsIn dependent Of Local Timezone () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck LastModified Header IsIn dependent Of Local Timezone Ġ{ Ġinput : ĠDate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLast Modified Version ( Z onedDateTime . of Instant ( input . to Instant (), ĠZone Id . system Default ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġtemporary Folder : ĠTemporary Folder Ġ= ĠTemporary Folder () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlast Modified Header FromFile Time IsIn dependent Of Local Timezone () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck LastModified Header IsIn dependent Of Local Timezone Ġ{ Ġinput : ĠDate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsetup : Ġcreate Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile : ĠFile Ġ= Ġtemporary Folder . new File (" foo . txt "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset LastModified ( input . time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġguard : Ġfile Ġlast modified Ġis Ġactually Ġset Ġas Ġexpected ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( input . time , Ġfile . lastModified ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsetup : Ġobject Ġto Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLast Modified Version ( Files . getLast Modified Time ( file . to Path ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ