package Ġorg . ko unter sign . core . generator Ċ Ċ import Ġorg . junit . jupiter . api .* Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . extension . Extension Context Ċ import Ġorg . junit . jupiter . params . Parameterized Test Ċ import Ġorg . junit . jupiter . params . provider . Arguments Ċ import Ġorg . junit . jupiter . params . provider . Arguments Provider Ċ import Ġorg . junit . jupiter . params . provider . Arguments Source Ċ import Ġorg . junit . jupiter . params . provider . Value Source Ċ import Ġorg . junit . platform . commons . logging . LoggerFactory Ċ import Ġorg . ko unter sign . core . Performance Test Ċ import Ġjava . net . URL Ċ import Ġjava . time . Duration Ċ import Ġjava . util . stream . Stream Ċ Ċ class ĠPass Phrase Generator Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Pass Phrase Generator Test :: class . java ) ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠCap ital ization Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġwords Ġ= Ġset Of (" base ball ", Ġ" dog ") ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġcorrectly Ġcapital ize Ġall Ġwords Ġwhen Ġspecified `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĠRandom Pass Phrase Generator ( words , Ġ 3 , Ġcapital ize Words Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġgenerator . generate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Generated ĠPassword : Ġ$ password " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpassword . contains (' B ') Ġor Ġpassword . contains (' D ') ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġcorrectly Ġnot Ġcapital ize Ġwords Ġwhen Ġspecified `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĠRandom Pass Phrase Generator ( words , Ġ 3 , Ġcapital ize Words Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġgenerator . generate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Generated ĠPassword : Ġ$ password " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ! password . contains (' B ') Ġand Ġ! password . contains (' D ') ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠDig it Placement Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġwords Ġ= Ġset Of (" test ", Ġ" words ") ĊĊĠĠĠĠĠĠĠ Ġ@ Parameterized Test ĊĠĠĠĠĠĠĠ Ġ@ Arguments Source ( Digit Placement Arguments :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġphrase Ġcorrectly Ġbased Ġon Ġgiven Ġdigit Ġplacement Ġstrategy `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpattern : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġword Count : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstrategy : ĠDig it Placement Strategy ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= ĠRandom Pass Phrase Generator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Count Ġ= Ġword Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdigit Placement Strategy Ġ= Ġstrategy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). generate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Generated ĠPassword : Ġ$ password " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregex Ġ= ĠRegex ( pattern ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( password . matches ( regex )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠValidation Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġthrow Ġillegal Ġargument Ġexception Ġwhen Ġgiven Ġempty Ġlist `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠassertThrows < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRandom Pass Phrase Generator ( empty Set (), Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Message Ġ= Ġ" At Ġleast Ġone Ġword Ġis Ġrequired " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( expected Message , Ġinstance . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġthrow Ġillegal Ġargument Ġexception Ġwhen Ġlength Ġis Ġzero `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠassertThrows < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRandom Pass Phrase Generator ( set Of (" a "), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Message Ġ= Ġ"' word Count ' Ġshould Ġbe Ġa Ġpositive Ġinteger " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( expected Message , Ġinstance . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Parameterized Test ĊĠĠĠĠĠĠĠ Ġ@ Value Source ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġints Ġ= Ġ[- 1 , Ġ- 5 , ĠInt . MIN _ VALUE ] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġthrow Ġillegal Ġargument Ġexception Ġwhen Ġlength Ġis Ġnegative `( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠassertThrows < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRandom Pass Phrase Generator ( set Of (" a "), Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Message Ġ= Ġ"' word Count ' Ġshould Ġbe Ġa Ġpositive Ġinteger " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( expected Message , Ġinstance . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġ@ Performance Test ĊĠĠĠ Ġinner Ġclass ĠPerformance Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Performance :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġwords Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠURL (" https :// raw . githubusercontent . com / dw yl / english - words / master / words . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġmaintain Ġreasonable Ġperformance Ġwhen Ġgenerating Ġmany Ġpasswords Ġat Ġonce `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Timeout ( Duration . of Millis ( 5 0 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĠRandom Pass Phrase Generator ( words , Ġ 3 , Ġcapital ize Words Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpasswords Ġ= Ġgenerator . generate Sequence (). take ( 1 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Generated Ġpasswords : Ġ${ passwords . join ToString () }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġmaintain Ġreasonable Ġperformance Ġwhen Ġgiven Ġhigh Ġvolume Ġof Ġwords `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Timeout ( Duration . of Millis ( 7 5 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĠRandom Pass Phrase Generator ( words , Ġ 3 , Ġcapital ize Words Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġgenerator . generate () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Generated Ġpassword : Ġ$ password " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġmaintain Ġreasonable Ġperformance Ġwhen Ġinject ing Ġdigits Ġbetween Ġmany Ġwords `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġassert Timeout ( Duration . of Millis ( 7 5 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstrategy Ġ= ĠDig it Placement Strategy ( pattern Ġ= ĠDig it Placement Pattern . WRAP _ AR O UND _ WORDS , Ġunique Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEx tre me ly Ġcomputation ally Ġexpensive Ġoperation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 5 0 0 ms Ġis Ġsomewhat Ġreasonable Ġwhen Ġre aching Ġinto Ġthe Ġhundred s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSeems Ġto Ġtake Ġroughly Ġ 1 ms Ġper Ġword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRandom Pass Phrase Generator ( words , Ġ 3 5 0 , Ġcapital ize Words Ġ= Ġtrue , Ġdigit Placement Strategy Ġ= Ġstrategy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator . generate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Generated Ġpassword : Ġ$ password " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDig it Placement Arguments Ġ: ĠArguments Provider Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprovide Arguments ( context : ĠExtension Context ?): ĠStream < out ĠArguments > Ġ= ĠStream . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExpected Ġpattern , ĠWord Ġcount , ĠDig it Ġplacement Ġstrategy ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArguments . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\\ d { 3 }\\ w +", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDig it Placement Strategy ( pattern Ġ= ĠDig it Placement Pattern . BEGIN , Ġdigit Count Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArguments . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\\ w + \\ d { 3 }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDig it Placement Strategy ( pattern Ġ= ĠDig it Placement Pattern . END , Ġdigit Count Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArguments . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\\ d { 3 }\\ w + \\ d { 3 }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDig it Placement Strategy ( pattern Ġ= ĠDig it Placement Pattern . BEGIN _ AND _ END , Ġdigit Count Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArguments . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\\ w + \\ d { 3 }\\ w +", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDig it Placement Strategy ( pattern Ġ= ĠDig it Placement Pattern . B ETWEEN _ WORDS , Ġdigit Count Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArguments . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\\ d { 3 }\\ w + \\ d { 3 }\\ w + \\ d { 3 }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDig it Placement Strategy ( pattern Ġ= ĠDig it Placement Pattern . WRAP _ AR O UND _ WORDS , Ġdigit Count Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ