/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 Ġ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 . compose . ui . text Ċ Ċ import Ġandroidx . compose . ui . text . Annotated String . Range Ċ import Ġandroidx . compose . ui . text . font . to Font Family Ċ import Ġandroidx . compose . ui . unit . Density Ċ import Ġandroidx . compose . ui . unit . Text Unit Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġandroidx . test . filters . Small Test Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ @ Small Test Ċ class ĠParagraph Intr insic IntegrationTest Ġ{ ĊĠĠĠ Ġprivate Ġval ĠfontFamily Measure Font Ġ= ĠFont TestData . BASIC _ MEAS URE _ FONT . to Font Family () ĊĠĠĠ Ġprivate Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). context ĊĠĠĠ Ġprivate Ġval Ġdefault Density Ġ= ĠD ensity ( density Ġ= Ġ 1 f ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmax Intr insic Width _ empty _ string _ is _ zero () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparagraph Intr insics Ġ= Ġparagraph Intr insics ( text Ġ= Ġ"") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( paragraph Intr insics . max Intr insic Width ). is Zero () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmax Intr insic Width _ with _ rtl _ string () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( default Density ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"\ u 0 5 D 0 \ u 0 5 D 1 \ u 0 5 D 2 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfontSize Ġ= Ġ 5 0 . sp ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparagraph Intr insics Ġ= Ġparagraph Intr insics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠfontSize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( paragraph Intr insics . max Intr insic Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( text . length Ġ* ĠfontSize . to Px ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmax Intr insic Width _ with _ ltr _ string () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( default Density ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" abc " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfontSize Ġ= Ġ 5 0 . sp ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparagraph Intr insics Ġ= Ġparagraph Intr insics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠfontSize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( paragraph Intr insics . max Intr insic Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( text . length Ġ* ĠfontSize . to Px ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmax Intr insic Width _ with _ line _ feed () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( default Density ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" abc \ n abc " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfontSize Ġ= Ġ 5 0 . sp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparagraph Intr insics Ġ= Ġparagraph Intr insics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠfontSize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( paragraph Intr insics . max Intr insic Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( text . indexOf ('\ n ') Ġ* ĠfontSize . to Px ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmax Instr insic Width _ with Styled Text () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( default Density ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" a Ġbb Ġc cc " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfontSize Ġ= Ġ 1 2 . sp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstyled FontSize Ġ= Ġ 2 4 . sp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparagraph Ġ= Ġparagraph Intr insics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠfontSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Styles Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRange ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= ĠSpan Style ( fontSize Ġ= Ġstyled FontSize ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġ" a Ġ". length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġ" a Ġbb Ġ". length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsince Ġ" bb Ġ" Ġis Ġdouble Ġfont Ġsize , Ġthe Ġwhole Ġwidth Ġshould Ġbe Ġthe Ġtext Ġsize , Ġand Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadditional Ġwidth Ġresulting Ġfrom Ġthe Ġ" bb Ġ" Ġlength . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Width Ġ= Ġ( text . length Ġ+ Ġ" bb Ġ". length ) Ġ* ĠfontSize . to Px () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( paragraph . max Intr insic Width ). isEqualTo ( expected Width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmin Intr insic Width _ empty _ string _ is _ zero () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparagraph Intr insics Ġ= Ġparagraph Intr insics ( text Ġ= Ġ"") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( paragraph Intr insics . min Intr insic Width ). is Zero () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmin Intr insic Width _ with _ rtl _ string () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( default Density ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"\ u 0 5 D 0 \ u 0 5 D 1 \ u 0 5 D 2 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfontSize Ġ= Ġ 5 0 . sp ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparagraph Intr insics Ġ= Ġparagraph Intr insics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠfontSize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( paragraph Intr insics . min Intr insic Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( text . length Ġ* ĠfontSize . to Px ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmin Intr insic Width _ with _ ltr _ string () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( default Density ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" abc " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfontSize Ġ= Ġ 5 0 . sp ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparagraph Intr insics Ġ= Ġparagraph Intr insics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠfontSize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( paragraph Intr insics . min Intr insic Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( text . length Ġ* ĠfontSize . to Px ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmin Instr insic Width _ returns _ longest _ word _ width () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( default Density ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġwords Ġwith Ġlength Ġ 1 , Ġ 2 , Ġ 3 ... Ġ 5 0 ; Ġand Ġappend Ġall Ġwith Ġspace . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Word Length Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ( 1 .. max Word Length ). fold ("") Ġ{ Ġstring , Ġnext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Ġ+ Ġ" a ". repeat ( next ) Ġ+ Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfontSize Ġ= Ġ 1 2 . sp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparagraph Ġ= Ġparagraph Intr insics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠfontSize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ+ 1 Ġis Ġfor Ġthe Ġwhite Ġspace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Width Ġ= Ġ( max Word Length Ġ+ Ġ 1 ) Ġ* ĠfontSize . to Px () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( paragraph . min Intr insic Width ). isEqualTo ( expected Width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmin Instr insic Width _ with Styled Text () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( default Density ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" a Ġbb Ġc cc " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfontSize Ġ= Ġ 1 2 . sp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstyled FontSize Ġ= Ġ 2 4 . sp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparagraph Ġ= Ġparagraph Intr insics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠfontSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Styles Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRange ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ= ĠSpan Style ( fontSize Ġ= Ġstyled FontSize ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġ" a ". length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġ" a Ġbb Ġ". length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Width Ġ= Ġ" bb Ġ". length Ġ* Ġstyled FontSize . to Px () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( paragraph . min Intr insic Width ). isEqualTo ( expected Width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparagraph Intr insics ( ĊĠĠĠĠĠĠĠ Ġtext : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġstyle : ĠTextStyle ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠfontSize : ĠText Unit Ġ= Ġ 1 4 . sp , ĊĠĠĠĠĠĠĠ Ġspan Styles : ĠList < Range < Span Style >> Ġ= ĠlistOf () ĊĠĠĠ Ġ): ĠParagraph Intr insics Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠParagraph Intr insics ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspan Styles Ġ= Ġspan Styles , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholders Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTextStyle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontFamily Ġ= ĠfontFamily Measure Font , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠfontSize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). merge ( style ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdensity Ġ= Ġdefault Density , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontFamily Resolver Ġ= ĠUn cached Font Family Resolver ( context ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }