package Ġedu . corn ell . cs . apl . vi ad uct . syntax . surface Ċ Ċ import Ġedu . corn ell . cs . apl . pretty printing . Pretty Print able Ċ import Ġedu . corn ell . cs . apl . vi ad uct . syntax . Loc ated Ċ import Ġedu . corn ell . cs . apl . vi ad uct . syntax . Source Location Ċ import Ġkotlin . reflect . K Visibility Ċ import Ġkotlin . reflect . full . member Properties Ċ import Ġkotlin . reflect . jvm . java Field Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġorg . opent est 4 j . Assertion Failed Error Ċ Ċ /** ĠAssert s Ġthat Ġ[ actual ] Ġequals Ġ[ expected ], Ġbut Ġignores Ġ[ Source Location ] s . Ġ*/ Ċ // ĠTODO : Ġextend Ġthis Ġto Ġalso Ġwork Ġwith Ġintermediate ĠNodes . Ċ internal Ġfun Ġassert Struct ur ally Equals ( expected : ĠNode , Ġactual : ĠNode ) Ġ{ ĊĠĠĠ Ġ// ĠActual Ġmust Ġbe Ġfrom Ġa Ġcompatible Ġclass ĊĠĠĠ Ġif Ġ(! expected :: class . is Instance ( actual )) ĊĠĠĠĠĠĠĠ Ġfail ( expected , Ġactual ) ĊĊĠĠĠ Ġ// ĠCompare Ġall Ġpublic Ġproperties Ġthat Ġare Ġbacked Ġby Ġa Ġfield ĊĠĠĠ Ġexpected :: class . member Properties . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . visibility Ġ== ĠK Visibility . PUBLIC Ġ&& Ġit . java Field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . getter . call ( expected ), Ġit . getter . call ( actual )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAssert s Ġthat Ġ[ actual ] Ġdiffers Ġfrom Ġ[ expected ] Ġstruct ur ally , Ġthat Ġis , Ġa Ġdifference Ġin Ċ Ġ* Ġ[ Source Location ] s Ġdoes Ġnot Ġcount . Ċ Ġ*/ Ċ internal Ġfun Ġassert Struct ur ally Not Equals ( expected : ĠNode , Ġactual : ĠNode ) Ġ{ ĊĠĠĠ ĠassertThrows < Assertion Failed Error > Ġ{ Ġassert Struct ur ally Equals ( expected , Ġactual ) Ġ} Ċ } Ċ Ċ private Ġfun ĠassertEquals ( expected : ĠAny ?, Ġactual : ĠAny ?) Ġ{ ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġexpected Ġis ĠNode Ġ&& Ġactual Ġis ĠNode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Struct ur ally Equals ( expected , Ġactual ) ĊĊĠĠĠĠĠĠĠ Ġexpected Ġis ĠLoc ated < *> Ġ&& Ġactual Ġis ĠLoc ated < *> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected . value , Ġactual . value ) ĊĊĠĠĠĠĠĠĠ Ġexpected Ġis ĠSource Location Ġ&& Ġactual Ġis ĠSource Location Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġexpected Ġis ĠList < *> Ġ&& Ġactual Ġis ĠList < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expected . size Ġ!= Ġactual . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail ( expected , Ġactual ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġexpected . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected [ i ], Ġactual [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expected Ġ!= Ġactual ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail ( expected , Ġactual ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġfail ( expected : ĠAny ?, Ġactual : ĠAny ?) Ġ{ ĊĠĠĠ Ġorg . junit . jupiter . api . fail Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Actual ĠAST Ġdoes Ġnot Ġmatch Ġthe Ġexpected Ġone ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n Expected : Ġ${ expected . print () }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n Actual : Ġ${ actual . print () }" ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠAny ?. print (): ĠString Ġ= ĊĠĠĠ Ġif Ġ( this Ġis ĠPretty Print able ) Ġthis . as Document . print () Ġelse Ġthis . toString () Ċ