/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠZ UP ĠIT ĠSER V IC OS ĠEM ĠT EC NO LOG IA ĠE ĠIN OV AC AO ĠSA Ċ Ġ* Ċ Ġ* Ġ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 Ġbr . com . z up . be agle . android . json path Ċ Ċ import Ġbr . com . z up . be agle . android . testutil . Random Data Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONObject Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ Ċ private Ġconst Ġval ĠLONG Ġ= ĠLong . MAX _ VALUE Ċ private Ġconst Ġval ĠINT Ġ= ĠInt . MAX _ VALUE Ċ private Ġconst Ġval ĠBOOLEAN Ġ= Ġtrue Ċ private Ġval ĠDOUBLE Ġ= ĠDouble . MAX _ VALUE Ċ private Ġval ĠSTRING Ġ= ĠRandom Data . string () Ċ private Ġval ĠJSON _ OBJECT Ġ= Ġ""" {" a ": $ DOUBLE } """ Ċ Ċ private Ġval ĠJSON Ġ= Ġ""" ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" a ": Ġ$ STRING , ĊĠĠĠĠĠĠĠ Ġ" b ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" c ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" d ": Ġ$ BOOLEAN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" e ": Ġ$ LONG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" f ": Ġ$ INT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" g ": Ġ$ JSON _ OBJECT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" h ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ JSON _ OBJECT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ JSON _ OBJECT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ" i ": Ġnull ĊĠĠĠ Ġ} Ċ """ Ċ Ċ class ĠJson Path Finder Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġjson Path Finder Ġ= ĠJson Path Finder () ĊĠĠĠ Ġprivate Ġval ĠjsonObject Ġ= ĠJSONObject ( JSON ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ null _ when _ value _ is _ null () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" i ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertNull ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ null _ when _ value _ is _ does _ not _ exists () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" z ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertNull ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ String () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" a ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠString ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( STRING , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ Boolean () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" b . c . d ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠBoolean ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( BOOLEAN , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ Long () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" b . c . e ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠLong ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LONG , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ Int () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" b . c . f ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠInt ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( INT , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ JSONObject () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" b . c . g ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠJSONObject ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( JSON _ OBJECT , Ġresult . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ throw _ exception _ when _ try ing _ to _ access _ object _ position _ with _ array () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" b . c [ 0 ]") ĊĊĠĠĠĠĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ throw _ exception _ when _ try ing _ to _ pass _ invalid _ array _ position () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" b . h [] ") ĊĊĊĠĠĠĠĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ throw _ exception _ when _ try ing _ to _ access _ invalid _ array _ position () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" b . h [ 3 ]") ĊĊĠĠĠĠĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ Double _ in _ array _ position _ 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" b . h [ 0 ]. a ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠDouble ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( DOUBLE , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ Double _ in _ array _ position _ 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" b . h [ 1 ]. a ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠDouble ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( DOUBLE , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ JSON _ inside _ array _ position _ 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" b . h [ 0 ]") ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( JSON _ OBJECT , Ġresult . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ value _ inside _ array _ position _ 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys ("[ 0 ]") ĊĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠJSONArray (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput (" b ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , Ġjson Array ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals (" a ", Ġresult . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ should _ return _ JSON _ inside _ dimensional _ array () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠJson Path Utils . split Keys (" a [ 0 ][ 1 ]") ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" a ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[" a ", Ġ" b "], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[" c ", Ġ" d "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= ĠJSONObject ( json ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Path Finder . find ( keys , ĠjsonObject ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals (" b ", Ġresult ) ĊĠĠĠ Ġ} Ċ }