package Ġorg . cos y box . commons . io . compression Ċ Ċ import Ġorg . cos y box . commons . io . Resource Ċ import Ġorg . cos y box . commons . io . Resources Environment Ċ import Ġorg . cos y box . commons . io . exceptions . Resource Exception Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġjava . nio . file . Files . exists Ċ Ċ class ĠZip Extractor Spec Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġenvironment Ġ= ĠResources Environment () ĊĠĠĠ Ġprivate Ġval Ġcompress or Ġ= ĠZip Compressor ( Compression Parameters . Creator (). create ()) ĊĠĠĠ Ġprivate Ġval Ġextractor Ġ= ĠZip Extractor () ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġsetup () Ġ= Ġenvironment . setup () ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġcleanup () Ġ= Ġenvironment . cleanup () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġarchive , Ġthat Ġdoes Ġnot Ġexists , Ġproduces ĠResource Exception Ġin Ġcase Ġtried Ġto Ġextract Ġit `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThrows < Resource Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextractor . extract ( Resource ( environment . join To Path ( Resources Environment . ROOT _ DIRECTORY , Ġ" ARCH IVE . zip "))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġarchive , Ġit Ġis Ġextracted Ġinto Ġprovided Ġdirectory `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresources Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment . create Resource (" FILE _ A . txt "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment . create Directory (" DIRECTORY _ A ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġenvironment . create Resource (" DIRECTORY _ A ", Ġ" FILE _ B . txt ") ĊĠĠĠĠĠĠĠ Ġval Ġarchive Ġ= Ġcompress or . compress ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource ( environment . join To Path ( Resources Environment . ROOT _ DIRECTORY , Ġ" ARCH IVE . zip ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġextracted Ġ= Ġextractor . extract ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarchive , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource ( environment . join To Path ( Resources Environment . ROOT _ DIRECTORY , Ġ" DIRECTORY _ B ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġextracted . size ) ĊĠĠĠĠĠĠĠ Ġextracted . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( exists ( it . path )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġarchive , Ġit Ġis Ġextracted Ġinto Ġarchive 's Ġparent Ġdirectory `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresources Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment . create Resource (" FILE _ A . txt "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment . create Directory (" DIRECTORY _ A ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġenvironment . create Resource (" DIRECTORY _ A ", Ġ" FILE _ B . txt ") ĊĠĠĠĠĠĠĠ Ġval Ġarchive Ġ= Ġcompress or . compress ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource ( environment . join To Path ( Resources Environment . ROOT _ DIRECTORY , Ġ" ARCH IVE . zip ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġresources . forEach Ġ{ Ġenvironment . remove Resource ( it . path ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġextracted Ġ= Ġextractor . extract ( archive ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġextracted . size ) ĊĠĠĠĠĠĠĠ Ġextracted . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( exists ( it . path )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }