package Ġcom . shop runner . b ale en . json Ċ Ċ import Ġcom . fasterxml . jackson . core . Json ParseException Ċ import Ġcom . shop runner . b ale en . B ale en . describe As Ċ import Ġcom . shop runner . b ale en . Data Trace Ċ import Ġcom . shop runner . b ale en . Validation Ċ import Ġcom . shop runner . b ale en . ValidationError Ċ import Ġcom . shop runner . b ale en . Validation Result Ċ import Ġcom . shop runner . b ale en . Validation Warning Ċ import Ġcom . shop runner . b ale en . types . Double Type Ċ import Ġcom . shop runner . b ale en . types . Float Type Ċ import Ġcom . shop runner . b ale en . types . Int Type Ċ import Ġcom . shop runner . b ale en . types . Integer Type Ċ import Ġcom . shop runner . b ale en . types . Long Type Ċ import Ġcom . shop runner . b ale en . types . Map Type Ċ import Ġcom . shop runner . b ale en . types . Numeric Type Ċ import Ġcom . shop runner . b ale en . types . Occ urrences Type Ċ import Ġcom . shop runner . b ale en . types . StringType Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ Ċ internal Ġclass ĠJson Util Test Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġlist Ġof Ġonly Ġerrors ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠValidation . errors (): ĠList < Validation Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . results . filter Ġ{ Ġit Ġis ĠValidationError Ġ|| Ġit Ġis ĠValidation Warning Ġ}. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠValidation . eval () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . results . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠSingle Values Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠString Type () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ"\" string \"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( type , ĠData Trace (" string "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġint `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠInt Type () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ"- 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( type , ĠData Trace (" int "), Ġjson . byte InputStream (), ĠOptions ( integer Options Ġ= ĠInteger Options . INT )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġlong `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠLong Type () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ" 1 0 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( type , ĠData Trace (" long "), Ġjson . byte InputStream (), ĠOptions ( integer Options Ġ= ĠInteger Options . LONG )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġbig Ġinteger `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠInteger Type () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ" 1 0 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( type , ĠData Trace (" big integer "), Ġjson . byte InputStream (), ĠOptions ( integer Options Ġ= ĠInteger Options . BIG _ INTEGER )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġfloat `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠFloat Type () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ" 1 . 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( type , ĠData Trace (" float "), Ġjson . byte InputStream (), ĠOptions ( decimal Options Ġ= ĠDecimal Options . FLOAT )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġdouble `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠDouble Type () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ" 1 0 . 1 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( type , ĠData Trace (" double "), Ġjson . byte InputStream (), ĠOptions ( decimal Options Ġ= ĠDecimal Options . DOUBLE )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġbig Ġdecimal `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠNumeric Type () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ" 1 0 0 0 0 0 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( type , ĠData Trace (" big decimal "), Ġjson . byte InputStream (), ĠOptions ( decimal Options Ġ= ĠDecimal Options . BIG _ DECIMAL )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġarray `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠOcc urrences Type ( Numeric Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ"[ Ġ 1 . 1 , Ġ 2 . 2 , Ġ 3 . 3 Ġ] " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( type , ĠData Trace (" array "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġmap `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠMap Type ( StringType (), ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key 1 ": Ġ" value 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key 2 ": Ġ" value 2 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( type , ĠData Trace (" map "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġsimple Ġobject `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdog Type Ġ= Ġ" dog ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" name ", ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" num Le gs ", ĠInteger Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" F ido ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" num Le gs ": Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( dog Type , ĠData Trace (" dog "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġnested Ġobject `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdog Type Ġ= Ġ" dog ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" name ", ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" num Le gs ", ĠInteger Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpack Type Ġ= Ġ" pack ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" name ", ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" members ", ĠOcc urrences Type ( dog Type )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" W olf pack ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" members ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" F ido ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" num Le gs ": Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" D ug ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" num Le gs ": Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( pack Type , ĠData Trace (" pack "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġnon - json Ġthrows Ġan ĠJson ParseException `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ" bad Ġjson " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠassertThrows < Json ParseException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Util . validate ( StringType (), ĠData Trace (" string "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . original Message ). isEqualTo (" Unrecognized Ġtoken Ġ' bad ': Ġwas Ġexpecting Ġ( JSON ĠString , ĠNumber , ĠArray , ĠObject Ġor Ġtoken Ġ' null ', Ġ' true ' Ġor Ġ' false ') ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . line Nr ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . column Nr ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġmal - formed Ġjson Ġthrows Ġan ĠJson ParseException `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key ": Ġ" unexpected Ġcomma ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Type Ġ= Ġ" obj ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" key ", ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠassertThrows < Json ParseException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Util . validate ( obj Type , ĠData Trace (" string "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . original Message ). isEqualTo (" Unexpected Ġcharacter Ġ(' }' Ġ( code Ġ 1 2 5 )): Ġwas Ġexpecting Ġdouble - quote Ġto Ġstart Ġfield Ġname ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . line Nr ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . column Nr ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġprimitive Ġcorrectly Ġfails Ġwith Ġline Ġand Ġcolumn Ġnumbers `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ"- 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( Numeric Type ( min Ġ= Ġ 0 . to BigDecimal ()), ĠData Trace (" dog "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidationError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Trace (" dog ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. tag (" line ", Ġ" 1 "). tag (" column ", Ġ" 3 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Ġless Ġthan Ġ 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 . to BigInteger () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġobject Ġcorrectly Ġfails Ġwith Ġline Ġand Ġcolumn Ġnumbers `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdog Type Ġ= Ġ" dog ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" name ", ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" num Le gs ", ĠInt Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" F ido ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" num Le gs ": Ġ" wrong " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( dog Type , ĠData Trace (" dog "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidationError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Trace (" dog ", Ġ" attribute Ġ\" num Le gs \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. tag (" line ", Ġ" 3 "). tag (" column ", Ġ" 1 7 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Ġnot Ġan ĠInt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" wrong " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġon Ġarrays Ġcorrectly Ġfails Ġwith Ġline Ġand Ġcolumn Ġnumbers `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdog Type Ġ= Ġ" dog ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" name ", ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" num Le gs ", ĠInt Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" F ido ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" num Le gs ": Ġ" wrong " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate ( Occ urrences Type ( dog Type ), ĠData Trace (" dog s "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidationError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Trace (" dog s ", Ġ" index Ġ 0 ", Ġ" attribute Ġ\" num Le gs \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. tag (" line ", Ġ" 3 "). tag (" column ", Ġ" 1 7 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Ġnot Ġan ĠInt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" wrong " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠLarge Array Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġan Ġarray Ġof Ġints `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Root JsonArray ( Numeric Type (), ĠData Trace (" array Ġof Ġints "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġan Ġarray Ġof Ġstrings `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello Ġ 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello Ġ 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello Ġ 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello Ġ 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello Ġ 5 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Root JsonArray ( StringType (), ĠData Trace (" array Ġof strings "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġan Ġarray Ġof Ġobjects `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ 1 Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ 2 Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ 3 Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ 4 Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Type Ġ= Ġ" obj ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" key ", ĠNumeric Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Root JsonArray ( obj Type , ĠData Trace (" array Ġof Ġobjects "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġa Ġnested Ġarray `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ Ġ 1 , Ġ 2 , Ġ 3 Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ Ġ 4 , Ġ 5 , Ġ 6 Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ Ġ 7 , Ġ 8 , Ġ 9 Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ Ġ 1 0 , Ġ 1 1 , Ġ 1 2 Ġ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ Ġ 1 3 , Ġ 1 4 , Ġ 1 5 Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Root JsonArray ( Occ urrences Type ( Numeric Type ()), ĠData Trace (" array Ġof Ġarrays "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġcorrectly Ġfails Ġwith Ġline Ġand Ġcolumn Ġnumbers `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdog Type Ġ= Ġ" dog ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" name ", ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" num Le gs ", ĠInt Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ": Ġ" F ido ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" num Le gs ": Ġ" wrong " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Root JsonArray ( dog Type , ĠData Trace (" dog s "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidationError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Trace (" dog s ", Ġ" index Ġ 0 ", Ġ" attribute Ġ\" num Le gs \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. tag (" line ", Ġ" 3 "). tag (" column ", Ġ" 1 7 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Ġnot Ġan ĠInt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" wrong " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġcorrectly Ġfails Ġwhen Ġnot Ġan Ġarray `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ"\" not Ġan Ġarray \"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Root JsonArray ( StringType (), ĠData Trace (" array "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidationError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Trace (" array ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. tag (" line ", Ġ" 1 "). tag (" column ", Ġ" 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Ġnot Ġan Ġarray ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġnon - json Ġthrows Ġan ĠJson ParseException `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ" bad Ġjson " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠassertThrows < Json ParseException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Util . validate Root JsonArray ( StringType (), ĠData Trace (" string "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . original Message ). isEqualTo (" Unrecognized Ġtoken Ġ' bad ': Ġwas Ġexpecting Ġ( JSON ĠString , ĠNumber , ĠArray , ĠObject Ġor Ġtoken Ġ' null ', Ġ' true ' Ġor Ġ' false ') ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . line Nr ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . column Nr ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġmal - formed Ġjson Ġthrows Ġan ĠJson ParseException `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key ": Ġ" unexpected Ġcomma ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Type Ġ= Ġ" obj ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" key ", ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠassertThrows < Json ParseException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Util . validate Root JsonArray ( obj Type , ĠData Trace (" string "), Ġjson . byte InputStream ()). eval () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . original Message ). isEqualTo (" Unexpected Ġcharacter Ġ(' }' Ġ( code Ġ 1 2 5 )): Ġwas Ġexpecting Ġdouble - quote Ġto Ġstart Ġfield Ġname ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . line Nr ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . column Nr ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠStream Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġan Ġstream Ġof Ġints `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Json Stream ( Numeric Type (), ĠData Trace (" stream Ġof Ġints "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġan Ġstream Ġof Ġstrings `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello Ġ 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello Ġ 2 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello Ġ 3 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello Ġ 4 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello Ġ 5 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Json Stream ( StringType (), ĠData Trace (" stream Ġof Ġstrings "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġan Ġstream Ġof Ġobjects `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ 3 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ 4 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Type Ġ= Ġ" obj ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" key ", ĠNumeric Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Json Stream ( obj Type , ĠData Trace (" stream Ġof Ġobjects "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġa Ġstream Ġof Ġarray `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[ Ġ 1 , Ġ 2 , Ġ 3 Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[ Ġ 4 , Ġ 5 , Ġ 6 Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[ Ġ 7 , Ġ 8 , Ġ 9 Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[ Ġ 1 0 , Ġ 1 1 , Ġ 1 2 Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ[ Ġ 1 3 , Ġ 1 4 , Ġ 1 5 Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Json Stream ( Occ urrences Type ( Numeric Type ()), ĠData Trace (" stream Ġof Ġarrays "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġempty Ġstream `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Json Stream ( Occ urrences Type ( Numeric Type ()), ĠData Trace (" empty Ġstream "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . results ). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġcorrectly Ġfails Ġwith Ġline Ġand Ġcolumn Ġnumbers `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdog Type Ġ= Ġ" dog ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" name ", ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" num Le gs ", ĠNumeric Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" name ": Ġ" F ido ", Ġ" num Le gs ": Ġ 4 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" name ": Ġ" D ug ", Ġ" num Le gs ": Ġ" wrong " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Json Stream ( dog Type , ĠData Trace (" dog s "), Ġjson . byte InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidationError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Trace (" dog s ", Ġ" index Ġ 1 ", Ġ" attribute Ġ\" num Le gs \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. tag (" line ", Ġ" 1 "). tag (" column ", Ġ" 3 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Ġnot Ġa Ġnumber ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" wrong " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġnon - json Ġthrows Ġan ĠJson ParseException `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ" bad Ġjson " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠassertThrows < Json ParseException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Util . validate Json Stream ( StringType (), ĠData Trace (" string "), Ġjson . byte InputStream ()). eval () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . original Message ). isEqualTo (" Unrecognized Ġtoken Ġ' bad ': Ġwas Ġexpecting Ġ( JSON ĠString , ĠNumber , ĠArray , ĠObject Ġor Ġtoken Ġ' null ', Ġ' true ' Ġor Ġ' false ') ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . line Nr ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . column Nr ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġmal - formed Ġjson Ġthrows Ġan ĠJson ParseException `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ" key ": Ġ" unexpected Ġcomma ", Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Type Ġ= Ġ" obj ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" key ", ĠString Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠassertThrows < Json ParseException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Util . validate Json Stream ( obj Type , ĠData Trace (" string "), Ġjson . byte InputStream ()). eval () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . original Message ). isEqualTo (" Unexpected Ġcharacter Ġ(' }' Ġ( code Ġ 1 2 5 )): Ġwas Ġexpecting Ġdouble - quote Ġto Ġstart Ġfield Ġname ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . line Nr ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( e . location . column Nr ). isEqualTo ( 3 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġan Ġstream Ġwith Ġa Ġdifferent Ġdelimiter `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" { Ġ" key ": Ġ 1 Ġ} |{ Ġ" key ": Ġ 2 Ġ} |{ Ġ" key ": Ġ 3 Ġ} |{ Ġ" key ": Ġ 4 Ġ} |{ Ġ" key ": Ġ 5 Ġ} """ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Type Ġ= Ġ" obj ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" key ", ĠNumeric Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Json Stream ( obj Type , ĠData Trace (" stream Ġof Ġpipe Ġobjects "), Ġjson . byte InputStream (), Ġrecord Delimiter Ġ= Ġ"\\ | ". to Pattern ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġa Ġmultiline Ġstream Ġwith Ġa Ġdifferent Ġdelimiter `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key ": Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key ": Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key ": Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key ": Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key ": Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Type Ġ= Ġ" obj ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" key ", ĠNumeric Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Json Stream ( obj Type , ĠData Trace (" stream Ġof Ġpipe Ġobjects "), Ġjson . byte InputStream (), Ġrecord Delimiter Ġ= Ġ"\\ | ". to Pattern ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` validate Ġfails Ġcorrectly Ġan Ġstream Ġwith Ġa Ġdifferent Ġdelimiter `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" { Ġ" key ": Ġ 1 Ġ} |{ Ġ" key ": Ġ" 2 " Ġ} |{ Ġ" key ": Ġ 3 Ġ} |{ Ġ" key ": Ġ" 4 " Ġ} |{ Ġ" key ": Ġ 5 Ġ} """ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Type Ġ= Ġ" obj ". describe As Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" key ", ĠInt Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidation Ġ= ĠJson Util . validate Json Stream ( obj Type , ĠData Trace (" stream Ġof Ġpipe Ġobjects "), Ġjson . byte InputStream (), Ġrecord Delimiter Ġ= Ġ"\\ | ". to Pattern ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( validation . errors ()). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidationError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Trace (" stream Ġof Ġpipe Ġobjects ", Ġ" index Ġ 1 ", Ġ" attribute Ġ\" key \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. tag (" line ", Ġ" 1 "). tag (" column ", Ġ" 1 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Ġnot Ġan ĠInt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠValidationError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Trace (" stream Ġof Ġpipe Ġobjects ", Ġ" index Ġ 3 ", Ġ" attribute Ġ\" key \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. tag (" line ", Ġ" 1 "). tag (" column ", Ġ" 1 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Ġnot Ġan ĠInt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 4 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ