/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 5 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . squareup . wire . schema Ċ Ċ import Ġcom . google . common . j im fs . Configuration Ċ import Ġcom . google . common . j im fs . Jim fs Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . Assert . fail Ċ import Ġorg . junit . Test Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . charset . StandardCharsets . UTF _ 8 Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip OutputStream Ċ Ċ class ĠSchema Loader Test Ġ{ ĊĠ Ġprivate Ġvar Ġfile System Ġ= ĠJim fs . new FileSystem ( Configuration . unix ()) ĊĊĠ Ġ@ Test ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġfun Ġload All Files When None Specified () Ġ{ ĊĠĠĠ ĠFiles . create Directories ( file System . getPath ("/ source ")) ĊĊĠĠĠ Ġfile System . getPath ("/ source / message 1 . proto "). write Text (" message ĠMessage 1 Ġ{} ") ĊĠĠĠ Ġfile System . getPath ("/ source / message 2 . proto "). write Text (" message ĠMessage 2 Ġ{} ") ĊĠĠĠ Ġfile System . getPath ("/ source / readme . txt "). write Text (" Here Ġbe Ġprotos !") ĊĊĠĠĠ Ġval Ġschema Ġ= ĠSchema Loader () ĊĠĠĠĠĠĠĠ Ġ. add Source ( file System . getPath ("/ source ")) ĊĠĠĠĠĠĠĠ Ġ. load () ĊĊĠĠĠ Ġval Ġmessage 1 Ġ= Ġschema . getType (" Message 1 ") !! ĊĠĠĠ ĠassertThat ( message 1 ). isNotNull ĊĠĠĠ ĠassertThat ( message 1 . location . base ). isEqualTo ("/ source ") ĊĠĠĠ ĠassertThat ( message 1 . location . path ). isEqualTo (" message 1 . proto ") ĊĊĠĠĠ Ġval Ġmessage 2 Ġ= Ġschema . getType (" Message 2 ") !! ĊĠĠĠ ĠassertThat ( message 2 ). isNotNull ĊĠĠĠ ĠassertThat ( message 2 . location . base ). isEqualTo ("/ source ") ĊĠĠĠ ĠassertThat ( message 2 . location . path ). isEqualTo (" message 2 . proto ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġfun Ġlocate In Multiple Paths () Ġ{ ĊĠĠĠ ĠFiles . create Directories ( file System . getPath ("/ source 1 ")) ĊĠĠĠ ĠFiles . create Directories ( file System . getPath ("/ source 2 ")) ĊĠĠĠ ĠFiles . create File ( file System . getPath ("/ source 1 / file 1 . proto ")) ĊĠĠĠ ĠFiles . create File ( file System . getPath ("/ source 2 / file 2 . proto ")) ĊĊĠĠĠ ĠSchema Loader () ĊĠĠĠĠĠĠĠ Ġ. add Source ( file System . getPath ("/ source 1 ")) ĊĠĠĠĠĠĠĠ Ġ. add Source ( file System . getPath ("/ source 2 ")) ĊĠĠĠĠĠĠĠ Ġ. add Proto (" file 1 . proto ") ĊĠĠĠĠĠĠĠ Ġ. add Proto (" file 2 . proto ") ĊĠĠĠĠĠĠĠ Ġ. load () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġfun Ġfail Loc ate () Ġ{ ĊĠĠĠ ĠFiles . create Directories ( file System . getPath ("/ source 1 ")) ĊĠĠĠ ĠFiles . create Directories ( file System . getPath ("/ source 2 ")) ĊĠĠĠ ĠFiles . create File ( file System . getPath ("/ source 2 / file 2 . proto ")) ĊĊĠĠĠ Ġval Ġloader Ġ= ĠSchema Loader () ĊĠĠĠĠĠĠĠ Ġ. add Source ( file System . getPath ("/ source 1 ")) ĊĠĠĠĠĠĠĠ Ġ. add Proto (" file 2 . proto ") ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġloader . load () ĊĠĠĠĠĠ Ġfail () ĊĠĠĠ Ġ} Ġcatch Ġ( expected : ĠFileNotFoundException ) Ġ{ ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġfun Ġlocate In Zip File () Ġ{ ĊĠĠĠ ĠFiles . create Directories ( file System . getPath ("/ source ")) ĊĠĠĠ Ġval Ġzip Ġ= Ġfile System . getPath ("/ source / protos . zip ") ĊĠĠĠ Ġval Ġzip OutputStream Ġ= ĠZip OutputStream ( Files . new OutputStream ( zip )) ĊĠĠĠ Ġzip OutputStream . put Next Entry ( Zip Entry (" a / b / message . proto ")) ĊĠĠĠ Ġzip OutputStream . write (" message ĠMessage Ġ{}". toByteArray ( UTF _ 8 )) ĊĠĠĠ Ġzip OutputStream . close () ĊĊĠĠĠ Ġval Ġschema Ġ= ĠSchema Loader () ĊĠĠĠĠĠĠĠ Ġ. add Source ( zip ) ĊĠĠĠĠĠĠĠ Ġ. add Proto (" a / b / message . proto ") ĊĠĠĠĠĠĠĠ Ġ. load () ĊĊĠĠĠ Ġval Ġmessage Ġ= Ġschema . getType (" Message ") !! ĊĠĠĠ ĠassertThat ( message ). isNotNull ĊĠĠĠ ĠassertThat ( message . location . base ). isEqualTo ("/ source / protos . zip ") ĊĠĠĠ ĠassertThat ( message . location . path ). isEqualTo (" a / b / message . proto ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġfun Ġfail Loc ate In Zip File () Ġ{ ĊĠĠĠ ĠFiles . create Directories ( file System . getPath ("/ source ")) ĊĠĠĠ Ġval Ġzip Ġ= Ġfile System . getPath ("/ source / protos . zip ") ĊĠĠĠ Ġval Ġzip OutputStream Ġ= ĠZip OutputStream ( Files . new OutputStream ( zip )) ĊĠĠĠ Ġzip OutputStream . put Next Entry ( Zip Entry (" a / b / t rix . proto ")) ĊĠĠĠ Ġzip OutputStream . write (" message ĠT rix Ġ{}". toByteArray ( UTF _ 8 )) ĊĠĠĠ Ġzip OutputStream . close () ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠSchema Loader () ĊĠĠĠĠĠĠĠĠĠ Ġ. add Source ( zip ) ĊĠĠĠĠĠĠĠĠĠ Ġ. add Proto (" a / b / message . proto ") ĊĠĠĠĠĠĠĠĠĠ Ġ. load () ĊĠĠĠĠĠ Ġfail () ĊĠĠĠ Ġ} Ġcatch Ġ( expected : ĠFileNotFoundException ) Ġ{ ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġfun Ġearlier Sources Take Pre cedence Over Later Sources () Ġ{ ĊĠĠĠ ĠFiles . create Directories ( file System . getPath ("/ source 1 ")) ĊĠĠĠ ĠFiles . create Directories ( file System . getPath ("/ source 2 ")) ĊĊĠĠĠ Ġfile System . getPath ("/ source 1 / message . proto ") ĊĠĠĠĠĠĠĠ Ġ. write Text (""" ĊĠĠĠĠĠĠĠ Ġ| message ĠMessage Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġstring Ġa Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĊĠĠĠ Ġfile System . getPath ("/ source 2 / message . proto ") ĊĠĠĠĠĠĠĠ Ġ. write Text (""" ĊĠĠĠĠĠĠĠ Ġ| message ĠMessage Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġstring Ġb Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĊĠĠĠ Ġval Ġschema Ġ= ĠSchema Loader () ĊĠĠĠĠĠĠĠ Ġ. add Source ( file System . getPath ("/ source 1 ")) ĊĠĠĠĠĠĠĠ Ġ. add Source ( file System . getPath ("/ source 2 ")) ĊĠĠĠĠĠĠĠ Ġ. load () ĊĠĠĠ Ġval Ġmessage Ġ= Ġschema . getType (" Message ") Ġas ĠMessageType ĊĠĠĠ ĠassertThat ( message . field (" a ")). isNotNull ĊĠ Ġ} ĊĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġprivate Ġfun ĠPath . write Text ( content : ĠString ) Ġ{ ĊĠĠĠ ĠFiles . write ( this , Ġcontent . toByteArray ( UTF _ 8 )) ĊĠ Ġ} Ċ } Ċ