/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġandroidx . recyclerview . widget Ċ Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . Measure Spec . AT _ MO ST Ċ import Ġandroid . view . View . Measure Spec . EX ACT LY Ċ import Ġandroid . view . View . Measure Spec . UNSPECIFIED Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġandroidx . test . filters . Small Test Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ Ċ @ Small Test Ċ @ RunWith ( Parameterized :: class ) Ċ class ĠRecyclerView Measure Test ( ĊĠĠĠ Ġprivate Ġval Ġchild Width : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġchild Height : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġfirst Width Mode : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġfirst Width : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġfirst Height Mode : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġfirst Height : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġsecond Width Mode : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġsecond Width : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġsecond Height Mode : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġsecond Height : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġexpected Width Mode : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġexpected Width : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġexpected Height Mode : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġexpected Height : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm RecyclerView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Mock LayoutManager : ĠMock LayoutManager ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" child Width Ġ= Ġ{ 0 }, Ġchild Height Ġ= Ġ{ 1 }, Ġfirst Width Mode Ġ= Ġ{ 2 }, Ġfirst Width Ġ= Ġ{ 3 }, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first Height Mode Ġ= Ġ{ 4 }, Ġfirst Height Ġ= Ġ{ 5 }, Ġsecond Width Mode Ġ= Ġ{ 6 }, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" second Width Ġ= Ġ{ 7 }, Ġsecond Height Mode Ġ= Ġ{ 8 }, Ġsecond Height Ġ= Ġ{ 9 }, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" expected Width Mode Ġ= Ġ{ 1 0 }, Ġexpected Width Ġ= Ġ{ 1 1 }, Ġexpected Height Mode Ġ= Ġ{ 1 2 }, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" expected Height Ġ= Ġ{ 1 3 }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfun Ġdata (): ĠList < Array < Any >> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtests Ġ= Ġmutable ListOf < Array < Any >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVerifies Ġthat Ġwhen Ġmeasurements Ġare Ġfirst ĠAT _ MO ST Ġand Ġthen ĠEX ACT LY , Ġif Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchildren Ġcause Ġthe ĠR V Ġto Ġbe Ġsmaller Ġduring ĠAT _ MO ST , Ġthe Ġchildren Ġare Ġla id Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġagain Ġusing Ġthe ĠEX ACT LY Ġmeasurements . ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 4 9 9 , Ġ 5 0 0 , Ġ 5 0 1 ). forEach Ġ{ Ġresulting Width Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 9 9 9 , Ġ 1 0 0 0 , Ġ 1 0 0 1 ). forEach Ġ{ Ġresulting Height Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Mode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ing Width Ġ>= Ġ 5 0 0 Ġ&& Ġresulting Height Ġ>= Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAT _ MO ST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Width , Ġresulting Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAT _ MO ST , Ġ 5 0 0 , ĠAT _ MO ST , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Mode , Ġ 5 0 0 , Ġexpected Mode , Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSame Ġas Ġabove Ġbut Ġheight Ġis Ġalways ĠEX ACT LY . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 4 9 9 , Ġ 5 0 0 , Ġ 5 0 1 ). forEach Ġ{ Ġresulting Width Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 9 9 9 , Ġ 1 0 0 0 , Ġ 1 0 0 1 ). forEach Ġ{ Ġresulting Height Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Mode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ing Width Ġ>= Ġ 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAT _ MO ST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Width , Ġresulting Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAT _ MO ST , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Mode , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSame Ġas Ġabove Ġbut Ġwidth Ġis Ġalways ĠEX ACT LY Ġinstead Ġof Ġheight . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 4 9 9 , Ġ 5 0 0 , Ġ 5 0 1 ). forEach Ġ{ Ġresulting Width Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 9 9 9 , Ġ 1 0 0 0 , Ġ 1 0 0 1 ). forEach Ġ{ Ġresulting Height Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Mode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ing Height Ġ>= Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAT _ MO ST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Width , Ġresulting Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠAT _ MO ST , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , Ġexpected Mode , Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVerifies Ġthat Ġwhen Ġmeasurements Ġare Ġfirst ĠUNS PE CI FIED Ġand Ġthen ĠEX ACT LY , Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEX ACT LY Ġmeasurements Ġare Ġalways Ġused , Ġeven Ġif Ġthe Ġchildren Ġcause Ġthe ĠR V Ġalready ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbe Ġthe Ġsame Ġsize Ġas Ġthe ĠEX ACT LY Ġmeasurements . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġshouldn 't Ġactually Ġbe Ġthe Ġcase . Ġ ĠIt Ġshould Ġbe Ġthat Ġif Ġthe Ġchildren Ġcause Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠR V Ġto Ġbe Ġsmaller Ġor Ġlarger Ġduring ĠUNS PE CI FIED , Ġthen Ġthe Ġchildren Ġare Ġla id Ġout Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġusing Ġthe ĠEX ACT LY Ġmeasurements , Ġbut Ġonly Ġthen . Ġ ĠThis Ġis Ġjust Ġa Ġminor Ġhit Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġperformance , Ġbut Ġworth Ġnot ing . ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 4 9 9 , Ġ 5 0 0 , Ġ 5 0 1 ). forEach Ġ{ Ġresulting Width Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 9 9 9 , Ġ 1 0 0 0 , Ġ 1 0 0 1 ). forEach Ġ{ Ġresulting Height Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Width , Ġresulting Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUNS PE CI FIED , Ġ 0 , ĠUNS PE CI FIED , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSame Ġas Ġabove Ġbut Ġheight Ġis Ġalways ĠEX ACT LY . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 4 9 9 , Ġ 5 0 0 , Ġ 5 0 1 ). forEach Ġ{ Ġresulting Width Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 9 9 9 , Ġ 1 0 0 0 , Ġ 1 0 0 1 ). forEach Ġ{ Ġresulting Height Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Width , Ġresulting Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUNS PE CI FIED , Ġ 0 , ĠEX ACT LY , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSame Ġas Ġabove Ġbut Ġwidth Ġis Ġalways ĠEX ACT LY Ġinstead Ġof Ġheight . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 4 9 9 , Ġ 5 0 0 , Ġ 5 0 1 ). forEach Ġ{ Ġresulting Width Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 9 9 9 , Ġ 1 0 0 0 , Ġ 1 0 0 1 ). forEach Ġ{ Ġresulting Height Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Width , Ġresulting Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠUNS PE CI FIED , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVerifies Ġsame Ġstuff Ġas Ġabove , Ġbut Ġfirst Ġmeasure Ġis ĠUNS PE CI FIED Ġfor Ġwidth Ġand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAT _ MO ST Ġfor Ġheight . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġlike Ġabove , Ġthis Ġbehavior Ġcould Ġbe Ġimproved Ġto Ġbe Ġmore Ġefficient Ġwhere Ġif Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchildren Ġend Ġup Ġgetting Ġmeasured Ġto Ġbe Ġthe Ġsame Ġsize Ġas Ġthe ĠEX ACT LY Ġmeasurements , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen Ġthe ĠEX ACT LY Ġmeasurements Ġcan Ġbe Ġtotally Ġskipped . ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 4 9 9 , Ġ 5 0 0 , Ġ 5 0 1 ). forEach Ġ{ Ġresulting Width Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 9 9 9 , Ġ 1 0 0 0 , Ġ 1 0 0 1 ). forEach Ġ{ Ġresulting Height Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Width , Ġresulting Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUNS PE CI FIED , Ġ 0 , ĠAT _ MO ST , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVerifies Ġsame Ġstuff Ġas Ġabove , Ġbut Ġfirst Ġmeasure Ġis ĠAT _ MO ST Ġfor Ġwidth Ġand ĠUNS PE CI FIED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġheight . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġlike Ġabove , Ġthis Ġbehavior Ġcould Ġbe Ġimproved Ġto Ġbe Ġmore Ġefficient Ġwhere Ġif Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchildren Ġend Ġup Ġgetting Ġmeasured Ġto Ġbe Ġthe Ġsame Ġsize Ġas Ġthe ĠEX ACT LY Ġmeasurements , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen Ġthe ĠEX ACT LY Ġmeasurements Ġcan Ġbe Ġtotally Ġskipped . ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 4 9 9 , Ġ 5 0 0 , Ġ 5 0 1 ). forEach Ġ{ Ġresulting Width Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 9 9 9 , Ġ 1 0 0 0 , Ġ 1 0 0 1 ). forEach Ġ{ Ġresulting Height Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Width , Ġresulting Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAT _ MO ST , Ġ 5 0 0 , ĠUNS PE CI FIED , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX ACT LY , Ġ 5 0 0 , ĠEX ACT LY , Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtests ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġm RecyclerView Ġ= ĠRecyclerView ( Application Provider . getApplicationContext ()) ĊĠĠĠĠĠĠĠ Ġm Mock LayoutManager Ġ= ĠMock LayoutManager () ĊĠĠĠĠĠĠĠ Ġm RecyclerView . layout Manager Ġ= Ġm Mock LayoutManager ĊĠĠĠĠĠĠĠ Ġm RecyclerView . adapter Ġ= ĠMock Adapter () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġauto Measure _ test () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Mock LayoutManager . measure ments To Report ( child Width , Ġchild Height ) ĊĠĠĠĠĠĠĠ Ġm RecyclerView . measure ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Width Mode Ġor Ġfirst Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Height Mode Ġor Ġfirst Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġm RecyclerView . measure ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Width Mode Ġor Ġsecond Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Height Mode Ġor Ġsecond Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġm RecyclerView . layout ( 0 , Ġ 0 , Ġsecond Width , Ġsecond Height ) ĊĠĠĠĠĠĠĠ Ġverify Measure Specs At Last Layout Children ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Width Mode , Ġexpected Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Height Mode , Ġexpected Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Measure Specs At Last Layout Children ( ĊĠĠĠĠĠĠĠ Ġwidth Measure Mode : ĠInt , ĊĠĠĠĠĠĠĠ Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠ Ġheight Measure Mode : ĠInt , ĊĠĠĠĠĠĠĠ Ġheight : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Measure Mode . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Mock LayoutManager . m Width Mode At Last Layout Children . to Long () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Mock LayoutManager . m Width At Last Layout Children . to Long () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Measure Mode . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Mock LayoutManager . m Height Mode At Last Layout Children . to Long () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Mock LayoutManager . m Height At Last Layout Children . to Long () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠMock LayoutManager Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . LayoutManager () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Total Width Of All Children To Report Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Total Height Of All Children To Report Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġm Width At Last Layout Children Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġm Height At Last Layout Children Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġm Width Mode At Last Layout Children Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġm Height Mode At Last Layout Children Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfun Ġmeasurements To Report ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Total Width Of All Children To Report Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Total Height Of All Children To Report Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Auto Measure Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Layout Children ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler : ĠRecyclerView . Recycler , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Width Mode At Last Layout Children Ġ= Ġwidth Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Width At Last Layout Children Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Height Mode At Last Layout Children Ġ= Ġheight Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Height At Last Layout Children Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove And Re cycle All Views ( recycler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( recycler . getView For Position ( i )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġset Measure Specs ( w Spec : ĠInt , Ġh Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . set Measure Specs ( w Spec , Ġh Spec ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Decorated Bounds With Margins ( view : ĠView , Ġout Bounds : ĠRect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Bounds . left Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Bounds . top Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Bounds . right Ġ= Ġm Total Width Of All Children To Report ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Bounds . bottom Ġ= Ġm Total Height Of All Children To Report ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġgenerate Default LayoutParams (): ĠRecyclerView . LayoutParams Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRecyclerView . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠMock Adapter Ġ: ĠRecyclerView . Adapter < Mock ViewHolder >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠMock ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMock ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTextView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder : ĠMock ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠMock ViewHolder ( item View : ĠView ?) Ġ: ĠRecyclerView . ViewHolder ( item View !! ) Ċ }