/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 0 1 9 ĠThe ĠDec red Ġdevelopers Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġan ĠI SC Ċ Ġ* Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġcom . btc android Ċ Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġorg . hamcrest . Description Ċ import Ġorg . hamcrest . Matcher Ċ import Ġorg . hamcrest . Type Safe Matcher Ċ Ċ internal Ġfun Ġchild At Position ( parent Matcher : ĠMatcher < View >, Ġposition : ĠInt ): ĠMatcher < View > Ġ{ ĊĊĠĠĠ Ġreturn Ġobject Ġ: ĠType Safe Matcher < View >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdescribe To ( description : ĠDescription ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . append Text (" Child Ġat Ġposition Ġ$ position Ġin Ġparent Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Matcher . describe To ( description ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġmatches S af ely ( view : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġview . parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparent Ġis ĠViewGroup Ġ&& Ġparent Matcher . matches ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġview Ġ== Ġparent . getChild At ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġchild Has Parent Id ( parentId : ĠInt ): ĠMatcher < View > Ġ{ ĊĊĠĠĠ Ġreturn Ġobject Ġ: ĠType Safe Matcher < View >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdescribe To ( description : ĠDescription ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . append Text (" Has Ġparent ĠId Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġmatches S af ely ( view : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġview Parent : ĠView ? Ġ= Ġview . parent Ġas ĠView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Parent !!. id Ġ== ĠparentId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Parent Ġ= Ġview Parent . parent Ġas ? ĠView Ġ// Ġthis Ġcasting Ġwill Ġreturn Ġnull Ġif Ġit 's Ġnot Ġa ĠView Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( view Parent Ġ!= Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġchild Has Parent Matcher ( parent Matcher : ĠMatcher < View >): ĠMatcher < View > Ġ{ ĊĊĠĠĠ Ġreturn Ġobject Ġ: ĠType Safe Matcher < View >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdescribe To ( description : ĠDescription ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . append Text (" Child Ġhas Ġparent Ġmatcher Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Matcher . describe To ( description ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġmatches S af ely ( view : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġview Parent : ĠView ? Ġ= Ġview . parent Ġas ? ĠView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Matcher . matches ( view Parent !! )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Parent Ġ= Ġview Parent . parent Ġas ? ĠView Ġ// Ġthis Ġcasting Ġwill Ġreturn Ġnull Ġif Ġit 's Ġnot Ġa ĠView Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( view Parent Ġ!= Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġis Immediate Child ( parent Matcher : ĠMatcher < View >): ĠMatcher < View > Ġ{ ĊĊĠĠĠ Ġreturn Ġobject Ġ: ĠType Safe Matcher < View >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdescribe To ( description : ĠDescription ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . append Text (" is Immediate Child ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġmatches S af ely ( view : ĠView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġview . parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparent Ġis ĠViewGroup Ġ&& Ġparent Matcher . matches ( parent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }