package Ġde . r ki . cor on aw arn app . ui . calendar Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . content . res . Resources Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . mock k . Mock K Annotations Ċ import Ġio . mock k . clear All Mocks Ċ import Ġio . mock k . every Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . joda . time . format . DateTime Format Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġtest helpers . Base Test Ċ import Ġjava . util . Locale Ċ Ċ class ĠCalendar Calculation Test Ġ: ĠBaseTest () Ġ{ ĊĊĠĠĠ Ġ@ Mock K Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠ Ġ@ Mock K Ġlateinit Ġvar Ġresources : ĠResources ĊĠĠĠ Ġ@ Mock K Ġlateinit Ġvar Ġconfiguration : ĠConfiguration ĊĊĠĠĠ Ġprivate Ġvar Ġpattern Ġ= Ġ" dd . MM . yyyy " ĊĠĠĠ Ġprivate Ġval Ġformatter Ġ= ĠDateTime Format . for Pattern ( pattern ) ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontext . resources Ġ} Ġreturns Ġresources ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġresources . configuration Ġ} Ġreturns ĠConfiguration (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Ġ= ĠLocale . EN GL ISH ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġteardown () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear All Mocks () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Instance () Ġ= ĠCalendar Calculation ( context ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Same Year Same Month () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġ" 2 7 . 0 8 . 2 0 2 0 " ĊĠĠĠĠĠĠĠ Ġval ĠdateTime Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime . parse ( input , ĠDateTime Format . for Pattern ( pattern )) ĊĠĠĠĠĠĠĠ Ġval Ġdates Ġ= Ġcreate Instance (). get Dates ( dateTime ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġday Ġ- Ġ 3 Ġof ĠAugust ĊĠĠĠĠĠĠĠ Ġdates . first (). date . day OfMonth ĠshouldBe Ġ 3 ĊĠĠĠĠĠĠĠ Ġdates . first (). date . month OfYear ĠshouldBe Ġ 8 ĊĊĠĠĠĠĠĠĠ Ġ// ĠLast Ġday Ġ- Ġ 3 0 Ġof ĠAugust ĊĠĠĠĠĠĠĠ Ġdates . last (). date . day OfMonth ĠshouldBe Ġ 3 0 ĊĠĠĠĠĠĠĠ Ġdates . last (). date . month OfYear ĠshouldBe Ġ 8 ĊĊĠĠĠĠĠĠĠ Ġcreate Instance (). getMonth Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdates . first (). date , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdates . last (). date ĊĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġ" Aug ust Ġ 2 0 2 0 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Same Year Different Month () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġ" 1 5 . 0 9 . 2 0 2 0 " ĊĠĠĠĠĠĠĠ Ġval ĠdateTime Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime . parse ( input , ĠDateTime Format . for Pattern ( pattern )) ĊĠĠĠĠĠĠĠ Ġval Ġdates Ġ= Ġcreate Instance (). get Dates ( dateTime ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġday Ġ- Ġ 2 4 Ġof ĠAugust ĊĠĠĠĠĠĠĠ Ġdates . first (). date . day OfMonth ĠshouldBe Ġ 2 4 ĊĠĠĠĠĠĠĠ Ġdates . first (). date . month OfYear ĠshouldBe Ġ 8 ĊĊĠĠĠĠĠĠĠ Ġ// ĠLast Ġday Ġ- Ġ 2 0 Ġof ĠSeptember ĊĠĠĠĠĠĠĠ Ġdates . last (). date . day OfMonth ĠshouldBe Ġ 2 0 ĊĠĠĠĠĠĠĠ Ġdates . last (). date . month OfYear ĠshouldBe Ġ 9 ĊĊĠĠĠĠĠĠĠ Ġcreate Instance (). getMonth Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdates . first (). date , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdates . last (). date ĊĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġ" Aug ust Ġ- ĠSeptember Ġ 2 0 2 0 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Different Year Different Month () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġ" 1 2 . 0 1 . 2 0 2 1 " ĊĠĠĠĠĠĠĠ Ġval ĠdateTime Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime . parse ( input , ĠDateTime Format . for Pattern ( pattern )) ĊĠĠĠĠĠĠĠ Ġval Ġdates Ġ= Ġcreate Instance (). get Dates ( dateTime ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġday Ġ- Ġ 2 1 Ġof ĠDecember Ġ 2 0 2 0 ĊĠĠĠĠĠĠĠ Ġdates . first (). date . day OfMonth ĠshouldBe Ġ 2 1 ĊĠĠĠĠĠĠĠ Ġdates . first (). date . month OfYear ĠshouldBe Ġ 1 2 ĊĠĠĠĠĠĠĠ Ġdates . first (). date . year ĠshouldBe Ġ 2 0 2 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠLast Ġday Ġ- Ġ 1 7 Ġof ĠJanuary Ġ 2 0 2 1 ĊĠĠĠĠĠĠĠ Ġdates . last (). date . day OfMonth ĠshouldBe Ġ 1 7 ĊĠĠĠĠĠĠĠ Ġdates . last (). date . month OfYear ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠ Ġdates . last (). date . year ĠshouldBe Ġ 2 0 2 1 ĊĊĠĠĠĠĠĠĠ Ġcreate Instance (). getMonth Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdates . first (). date , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdates . last (). date ĊĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġ" De cember Ġ 2 0 2 0 Ġ- ĠJanuary Ġ 2 0 2 1 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Edge Cases () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġnew Ġyear ĊĠĠĠĠĠĠĠ Ġcreate Instance (). get Dates ( DateTime . parse (" 2 7 . 1 2 . 2 0 2 1 ", Ġformatter )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFirst Ġday Ġ- Ġ 6 Ġof ĠDecember Ġ 2 0 2 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst (). date . day OfMonth ĠshouldBe Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst (). date . month OfYear ĠshouldBe Ġ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst (). date . year ĠshouldBe Ġ 2 0 2 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLast Ġday Ġ- Ġ 2 Ġof ĠJanuary Ġ 2 0 2 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast (). date . day OfMonth ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast (). date . month OfYear ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast (). date . year ĠshouldBe Ġ 2 0 2 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Instance (). getMonth Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst (). date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast (). date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġ" De cember Ġ 2 0 2 1 Ġ- ĠJanuary Ġ 2 0 2 2 " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġle ap Ġyear ĊĠĠĠĠĠĠĠ Ġcreate Instance (). get Dates ( DateTime . parse (" 2 9 . 0 2 . 2 0 2 4 ", Ġformatter )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFirst Ġday Ġ- Ġ 5 Ġof ĠFebruary Ġ 2 0 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst (). date . day OfMonth ĠshouldBe Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst (). date . month OfYear ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst (). date . year ĠshouldBe Ġ 2 0 2 4 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLast Ġday Ġ- Ġ 2 Ġof ĠMarch Ġ 2 0 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast (). date . day OfMonth ĠshouldBe Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast (). date . month OfYear ĠshouldBe Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast (). date . year ĠshouldBe Ġ 2 0 2 4 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Instance (). getMonth Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst (). date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast (). date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠshouldBe Ġ" Fe bruary Ġ- ĠMarch Ġ 2 0 2 4 " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ