package Ġat . fh oo e . h agen berg . t utor bot . util Ċ Ċ import Ġat . fh oo e . h agen berg . t utor bot . testutil . CommandLine Test Ċ import Ġat . fh oo e . h agen berg . t utor bot . testutil . assert Throws Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . mock k Static Ċ import Ġio . mock k . un mock k Static Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġjava . io . Console Ċ Ċ class ĠCli Test Ġ: ĠCommandLine Test () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġconsole Ġ= Ġmock k < Console >() ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup Ġ() Ġ{ ĊĠĠĠĠĠĠĠ Ġmock k Static ( System :: class ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠSystem . console () Ġ} Ġreturns Ġconsole ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġteardown () Ġ{ ĊĠĠĠĠĠĠĠ Ġun mock k Static ( System :: class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Text Ġpromp ts Ġwork Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġsystem In . provide Lines (" Input ") ĊĠĠĠĠĠĠĠ ĠassertEquals (" Input ", Ġprompt TextInput (" Enter :" )) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Enter : Ġ", Ġsystem Out . log ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Mult iline Ġtext Ġpromp ts Ġwork Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnewline Ġ= ĠSystem . line Separator () ĊĠĠĠĠĠĠĠ Ġsystem In . provide Lines (" This < br /> is < br /> a < br /> mult iline < br /> text ") ĊĠĠĠĠĠĠĠ ĠassertEquals (" This ${ newline } is ${ newline } a ${ newline } mult iline ${ newline } text ", Ġprompt Mult iline TextInput (" Enter :" )) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Enter : Ġ( use Ġ< br /> Ġfor Ġline Ġbreaks ) Ġ", Ġsystem Out . log ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Password Ġpromp ts Ġwork Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġconsole . read Password () Ġ} Ġreturns Ġ" Password ". toCharArray () ĊĠĠĠĠĠĠĠ ĠassertEquals (" Password ", Ġprompt Password Input (" Enter :" )) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Enter : Ġ", Ġsystem Out . log ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Boolean Ġpromp ts Ġwork Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpositive Answers Ġ= ĠlistOf ("", Ġ" y ", Ġ" Y ", Ġ" yes ", Ġ" YES ") ĊĠĠĠĠĠĠĠ Ġval Ġnegative Answers Ġ= ĠlistOf (" n ", Ġ" N ", Ġ" no ", Ġ" NO ", Ġ" abc ") ĊĊĠĠĠĠĠĠĠ Ġpositive Answers . forEach Ġ{ Ġanswer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem In . provide Lines ( answer ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( prompt Boolean Input (" Enter :" )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Enter : Ġ[ Y / N ] Ġ", Ġsystem Out . log ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Out . clear Log () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnegative Answers . forEach Ġ{ Ġanswer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem In . provide Lines ( answer ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( prompt Boolean Input (" Enter :" )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Enter : Ġ[ Y / N ] Ġ", Ġsystem Out . log ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Out . clear Log () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Exit ing Ġthe Ġprogram Ġworks Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThrows < Program Exit Error > Ġ{ Ġexit WithError (" Error Ġmessage ") Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" ERROR : ĠError Ġmessage \ n ", Ġsystem Err . log With Normalized Line Separator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Capt uring Ġoutput Ġworks Ġcorrectly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun With Capt ured Output Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" Normal Ġoutput Ġ# 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . print (" Error Ġoutput Ġ# 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġsystem Out . log ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġsystem Err . log ) ĊĊĠĠĠĠĠĠĠ Ġprint (" Normal Ġoutput Ġ# 2 ") ĊĠĠĠĠĠĠĠ ĠSystem . err . print (" Error Ġoutput Ġ# 2 ") ĊĠĠĠĠĠĠĠ ĠassertEquals (" Normal Ġoutput Ġ# 2 ", Ġsystem Out . log ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Error Ġoutput Ġ# 2 ", Ġsystem Err . log ) ĊĠĠĠ Ġ} Ċ } Ċ