/* Ċ Ġ* Ġ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 . components Ċ Ċ import Ġandroid . widget . Frame Layout Ċ import Ġbr . com . z up . be agle . android . action . Action Ċ import Ġbr . com . z up . be agle . android . components . utils . style ManagerFactory Ċ import Ġbr . com . z up . be agle . android . context . Bind Ċ import Ġbr . com . z up . be agle . android . context . Context Data Ċ import Ġbr . com . z up . be agle . android . extensions . once Ċ import Ġbr . com . z up . be agle . android . setup . Be agle Environment Ċ import Ġbr . com . z up . be agle . android . utils .* Ċ import Ġbr . com . z up . be agle . android . view . View Factory Ċ import Ġbr . com . z up . be agle . android . view . custom . Be agle Tab Layout Ċ import Ġbr . com . z up . be agle . core . Style Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġio . mock k .* Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ Ċ private Ġconst Ġval ĠDEFAULT _ STYLE Ġ= Ġ" Dummy Style " Ċ private Ġconst Ġval ĠTAB _ BAR _ ITEM _ TITLE Ġ= Ġ" Be agle ĠTab " Ċ Ċ class ĠTab Bar Test Ġ: ĠBase Component Test () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtab Layout : ĠBe agle Tab Layout Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġframe LayoutParams : ĠFrame Layout . LayoutParams Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġval Ġtab Bar Item : ĠTab Bar Item Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġval Ġstyle Manager : ĠStyle Manager Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġcurrent Tab : ĠBind < Int > Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġon Tab Selection : ĠList < Action > Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġicon : ĠImage Path . Local Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġstyle Slot Ġ= Ġmutable ListOf < Style >() ĊĠĠĠ Ġprivate Ġval Ġon Tab Selected Slot Ġ= Ġslot < Tab Layout . On Tab Selected Listener >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtab Bar : ĠTab Bar ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUp () ĊĠĠĠĠĠĠĠ Ġmock k Static (" br . com . z up . be agle . android . utils . Widget Extensions Kt ") ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠBe agle Environment . application Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġresources . display Metrics Ġ} Ġreturns Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdensity Ġ= Ġ 1 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstyle ManagerFactory Ġ= Ġstyle Manager ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠBe agle Environment . be agle Sdk . design System ?. image ( any ()) Ġ} Ġreturns Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠBe agle Environment . be agle Sdk . design System ?. tab View Style ( any ()) Ġ} Ġreturns Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < View Factory >(). make Tab Layout ( root View . getContext (), Ġany ()) Ġ} Ġreturns Ġtab Layout ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < View Factory >(). make Frame LayoutParams ( any (), Ġany ()) Ġ} Ġreturns Ġframe LayoutParams ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < View Factory >(). make Be agle Flex View ( any (), Ġcapture ( style Slot )) Ġ} Ġreturns Ġbe agle Flex View ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġbe agle Flex View . addView ( any (), Ġcapture ( style Slot )) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtab Bar Item . title Ġ} Ġreturns ĠTAB _ BAR _ ITEM _ TITLE ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtab Bar Item . icon Ġ} Ġreturns Ġicon ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtab Layout . add On Tab Selected Listener ( capture ( on Tab Selected Slot )) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġtab Bar Ġ= ĠTab Bar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= ĠlistOf ( tab Bar Item ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Id Ġ= ĠDEFAULT _ STYLE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Tab Ġ= Ġcurrent Tab , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Tab Selection Ġ= Ġon Tab Selection ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbuild View _ should _ use _ style _ with _ grow _ 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// G IV EN ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtab Bar . build View ( root View ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 . 0 , Ġstyle Slot [ 0 ]. flex ?. grow ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbuild View _ should _ set _ layout _ params () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// G IV EN ĊĊĠĠĠĠĠĠĠ Ġ// WHEN ĊĠĠĠĠĠĠĠ Ġval Ġtab Bar View Ġ= Ġtab Bar . build View ( root View ) ĊĊĠĠĠĠĠĠĠ Ġ// THEN ĊĠĠĠĠĠĠĠ ĠassertEquals ( frame LayoutParams . width , Ġtab Bar View . layout Params . width ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( frame LayoutParams . height , Ġtab Bar View . layout Params . height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbuild View _ should _ set _ tab _ mode _ as _ scroll able () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// G IV EN ĊĊĠĠĠĠĠĠĠ Ġ// WHEN ĊĠĠĠĠĠĠĠ Ġtab Bar . build View ( root View ) ĊĊĠĠĠĠĠĠĠ Ġ// THEN ĊĠĠĠĠĠĠĠ ĠassertEquals ( Tab Layout . MODE _ SCROLL ABLE , Ġtab Layout . tab Mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbuild View _ should _ set _ tab _ gravity _ as _ fill () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// G IV EN ĊĊĠĠĠĠĠĠĠ Ġ// WHEN ĊĠĠĠĠĠĠĠ Ġtab Bar . build View ( root View ) ĊĊĠĠĠĠĠĠĠ Ġ// THEN ĊĠĠĠĠĠĠĠ ĠassertEquals ( Tab Layout . GR AV ITY _ FILL , Ġtab Layout . tab Gravity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbuild _ view _ should _ add _ tab _ layout _ listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// G IV EN ĊĊĠĠĠĠĠĠĠ Ġ// WHEN ĊĠĠĠĠĠĠĠ Ġtab Bar . build View ( root View ) ĊĊĠĠĠĠĠĠĠ Ġ// THEN ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġon Tab Selected Slot . is Capt ured Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbuild _ view _ should _ ob servers _ current _ tab () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// G IV EN ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Tab Slot Ġ= Ġslot < Observer < Int ? >>() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Bar . observe Bind Changes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot View Ġ= Ġroot View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġbe agle Flex View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Ġ= Ġcurrent Tab , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob serves Ġ= Ġcapture ( current Tab Slot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġ// WHEN ĊĠĠĠĠĠĠĠ Ġtab Bar . build View ( root View ) ĊĊĠĠĠĠĠĠĠ Ġ// THEN ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġcurrent Tab Slot . is Capt ured Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhandle _ event _ should _ be _ called _ when _ tab _ is _ selected () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// G IV EN ĊĠĠĠĠĠĠĠ Ġval Ġtab Mock ed Ġ= Ġmock k < Tab Layout . Tab >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtab Mock ed . position Ġ} Ġreturns Ġ 0 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Bar . handle Event ( root View , Ġtab Layout , Ġon Tab Selection , ĠContext Data (" on Tab Selection ", Ġ 0 ), Ġ" on Tab Selected ") ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġ// WHEN ĊĠĠĠĠĠĠĠ Ġtab Bar . build View ( root View ) ĊĠĠĠĠĠĠĠ Ġon Tab Selected Slot . captured . on Tab Selected ( tab Mock ed ) ĊĊĠĠĠĠĠĠĠ Ġ// THEN ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġonce ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Bar . handle Event ( root View , Ġtab Layout , Ġon Tab Selection , ĠContext Data (" on Tab Selection ", Ġ 0 ), Ġ" on Tab Selected ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġob servers _ bind _ change _ should _ be _ called _ when _ current _ page _ change () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// G IV EN ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Tab Slot Ġ= Ġslot < Observer < Int ? >>() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Bar . observe Bind Changes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot View Ġ= Ġroot View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġbe agle Flex View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Ġ= Ġcurrent Tab , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob serves Ġ= Ġcapture ( current Tab Slot ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġ// WHEN ĊĠĠĠĠĠĠĠ Ġtab Bar . build View ( root View ) ĊĠĠĠĠĠĠĠ Ġcurrent Tab Slot . captured . invoke ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// THEN ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġonce ()) Ġ{ Ġtab Layout . get Tab At ( 1 )?. select () Ġ} ĊĠĠĠ Ġ} Ċ }