package Ġcom . be ust . kl ax on Ċ Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . testng . Assert Ċ import Ġorg . testng . annotations . Test Ċ import Ġjava . io . String Reader Ċ import Ġjava . util . regex . Pattern Ċ Ċ @ Test Ċ class ĠPath Matcher Test Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIll ustr ate Ġhow Ġwe Ġcan Ġcreate Ġa ĠKotlin Ġobject Ġmade Ġof Ġfields Ġscatter ed ĊĠĠĠĠ Ġ* Ġinside Ġthe ĠJSON Ġdocument . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscatter ed Object () Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠUser With Zip Code ( val Ġname : ĠString , Ġval Ġzip Code : ĠInt ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpm Ġ= Ġobject : ĠPath Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Path Ġ= Ġ"$ . description . person . name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzip Code Path Ġ= Ġ"$ . description . location . zip Code " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaths Ġ= Ġset Of ( name Path , Ġzip Code Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġzip Code : ĠInt ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpath Matches ( path : ĠString ) Ġ= Ġpaths . contains ( path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Match ( path : ĠString , Ġvalue : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Path Ġ-> Ġname Ġ= Ġvalue . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip Code Path Ġ-> Ġzip Code Ġ= Ġvalue Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠK l ax on () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. path Matcher ( pm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse JsonObject ( String Reader (""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" person ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" John " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" location ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zip Code ": Ġ 9 0 2 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} "" ")) ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser With Zip Code ( pm . name !! , Ġpm . zip Code !! ) ĊĠĠĠĠĠĠĠ ĠassertThat ( user ). isEqualTo ( User With Zip Code (" John ", Ġ 9 0 2 1 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpath Matcher () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpo Ġ= Ġobject Ġ: ĠPath Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpath Matches ( path : ĠString ) Ġ= ĠPattern . matches (" .* store . book .* author .* ", Ġpath ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthors Ġ= Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Match ( path : ĠString , Ġvalue : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthors . add ( value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠK l ax on () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. path Matcher ( po ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse JsonObject ( String Reader (""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" John ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" store ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" book ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" category ": Ġ" reference ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" author ": Ġ" Ni gel ĠRe es ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" Say ings Ġof Ġthe ĠCent ury ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" price ": Ġ 8 . 9 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" category ": Ġ" fi ction ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" author ": Ġ" E vel yn ĠW a ugh ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" S word Ġof ĠH on our ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" price ": Ġ 1 2 . 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" category ": Ġ" fi ction ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" author ": Ġ" Her man ĠMel ville ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" Mob y ĠD ick ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" isbn ": Ġ" 0 - 5 5 3 - 2 1 3 1 1 - 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" price ": Ġ 8 . 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" category ": Ġ" fi ction ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" author ": Ġ" J . ĠR . ĠR . ĠT ol ki en ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" The ĠL ord Ġof Ġthe ĠR ings ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" isbn ": Ġ" 0 - 3 9 5 - 1 9 3 9 5 - 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" price ": Ġ 2 2 . 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" bic ycle ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" color ": Ġ" red ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" price ": Ġ 1 9 . 9 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ex pensive ": Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} "" ")) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( po . authors , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" Ni gel ĠRe es ", Ġ" E vel yn ĠW a ugh ", Ġ" Her man ĠMel ville ", Ġ" J . ĠR . ĠR . ĠT ol ki en ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠWith Path ( ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ Json ( path Ġ= Ġ"$ . person . name ") ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġfield With Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠK l ax on () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse < With Path >( String Reader (""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" person ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" John " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} "" ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( result ). isEqualTo ( With Path ( 2 , Ġ" John ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠLibrary ( val Ġtitles : ĠList < String >, Ġval Ġbooks : ĠList < Book >, Ġval Ġpeople : ĠList < Author >) ĊĊĠĠĠ Ġdata Ġclass ĠBook ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Json ( path Ġ= Ġ"$ . titles [ 1 ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor : ĠAuthor ĊĠĠĠ Ġ) ĊĠĠĠ Ġdata Ġclass ĠAuthor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Json ( path Ġ= Ġ"$ . people [ 0 ]. author Name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Name : ĠString ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ( enabled Ġ= Ġfalse ) ĊĠĠĠ Ġfun Ġfield With Nested Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġk Ġ= ĠK l ax on () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġk Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse JsonObject ( String Reader (""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse < Library >( String Reader (""" { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" titles ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bad Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Hyper ion " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" book ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title ": Ġ" Wrong Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" author ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" author Name ": Ġ" Wrong Ġauthor " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" people ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" author Name ": Ġ" Sim mon s " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} "" ")) ĊĠĠĠĠĠĠĠ Ġprintln (" Result : Ġ$ result ") Ċ // ĠĠĠĠĠĠĠ ĠassertThat ( result ). isEqualTo ( Library ( Book (" Hyper ion ", ĠAuthor (" Sim mon s ")) )) ĊĠĠĠ Ġ} Ċ } Ċ