package Ġcom . short en design . k 9 keyboard Ċ Ċ import Ġcom . short en design . k 9 keyboard . input mode . Word Input Mode Ċ import Ġcom . short en design . k 9 keyboard . util . Key Ċ import Ġcom . short en design . k 9 keyboard . util . KeyCode Mapping Ċ import Ġcom . short en design . k 9 keyboard . util . Letter Layout Ċ import Ġcom . short en design . k 9 keyboard . util . TestUtil Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Before Ċ import Ġjava . util .* Ċ Ċ class ĠWord Input Mode Test Ġ{ ĊĠĠĠ Ġvar Ġmode : ĠWord Input Mode ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġmode Ġ= ĠWord Input Mode ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey pad Ġ= ĠKey pad ( KeyCode Mapping . basic , ĠLetter Layout . en US ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpress Keys ( mode : ĠWord Input Mode , Ġvar arg Ġkeys : ĠKey ): ĠList < KeyPress Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠLinkedList < KeyPress Result >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġkeys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( mode . getKey Press Result ( key )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġpressing Ġa Ġsingle Ġletter Ġkey ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Add Letter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmode !!. getKey Press Result ( Key . N 2 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult . consumed ) ĊĠĠĠĠĠĠĠ Ġ// assertEquals ( 1 , Ġresult . cursor Position ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 2 ", Ġresult . code Word ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġdeleting Ġa Ġletter Ġwhile Ġcomp osing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Delete Letter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġthis . mode !! ĊĠĠĠĠĠĠĠ Ġmode . getKey Press Result ( Key . N 2 ) ĊĠĠĠĠĠĠĠ Ġmode . resolve Code Word (" 2 ", ĠlistOf (" a "), Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmode . getKey Press Result ( Key . BACK ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCon su med Ġis Ġfalse Ġbecause Ġwe 're Ġdeleting Ġthe Ġlast Ġcharacter Ġin Ġthe Ġword Ġwe 're Ġcomp osing , ĊĠĠĠĠĠĠĠ Ġ// Ġso Ġwe Ġdelegate Ġto Ġthe Ġinput Ġmethod Ġto Ġdelete Ġand Ġreset Ġthings Ġfor Ġus . ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġresult . consumed ) ĊĠĠĠĠĠĠĠ Ġ// assertEquals ( 0 , Ġresult . cursor Position ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult . code Word ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġdeleting Ġa Ġletter Ġwhile Ġnot Ġcomp osing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Delete Letter No Text () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmode !!. getKey Press Result ( Key . BACK ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġresult . consumed ) ĊĠĠĠĠĠĠĠ Ġ// assertEquals ( 0 , Ġresult . cursor Position ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult . code Word ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġthat Ġresolve Code Word Ġproperly Ġupdates Ġthe Ġmode 's Ġcode Ġword ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Resolve Code Word Re places Code Word () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġthis . mode !! ĊĠĠĠĠĠĠĠ Ġmode . getKey Press Result ( Key . N 3 ) ĊĠĠĠĠĠĠĠ Ġmode . resolve Code Word ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 ", ĠlistOf (" daniel ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmode . getKey Press Result ( Key . N 2 ) ĊĠĠĠĠĠĠĠ Ġmode . resolve Code Word ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 2 ", ĠlistOf (" daniel ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Code Ġword Ġshould Ġbe Ġ' 3 2 '", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 2 ", Ġmode . code Word . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġadv ancing Ġto Ġnext Ġcandidate Ġwhile Ġnot Ġcomp osing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Next Candidate Not Comp osing () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmode !!. getKey Press Result ( Key . STAR ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult . consumed ) ĊĠĠĠĠĠĠĠ Ġ// assertEquals ( 0 , Ġresult . cursor Position ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult . code Word ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġadv ancing Ġto Ġnext Ġcandidate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Next Candidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġthis . mode !! ĊĠĠĠĠĠĠĠ Ġpress Keys ( mode , ĠKey . N 2 , ĠKey . N 2 , ĠKey . N 5 , ĠKey . N 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcandidates Ġ= ĠlistOf (" call ", Ġ" ball ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcandidate 1 Ġ= Ġmode . resolve Code Word (" 2 2 5 5 ", Ġcandidates ) ĊĠĠĠĠĠĠĠ Ġval Ġresult 1 Ġ= Ġmode . getKey Press Result ( Key . STAR ) ĊĠĠĠĠĠĠĠ Ġval Ġcandidate 2 Ġ= Ġmode . resolve Code Word (" 2 2 5 5 ", Ġcandidates ) ĊĠĠĠĠĠĠĠ Ġmode . getKey Press Result ( Key . STAR ) ĊĠĠĠĠĠĠĠ Ġval Ġcandidate 3 Ġ= Ġmode . resolve Code Word (" 2 2 5 5 ", Ġcandidates ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠASSERT ĊĠĠĠĠĠĠĠ ĠassertEquals ("' next ' Ġshould Ġbe Ġconsumed ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , Ġresult 1 . consumed ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("' next ' Ġshould Ġreturn Ġa Ġcode Ġword ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 2 5 5 ", Ġresult 1 . code Word ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" First Ġcandidate Ġshould Ġbe Ġ' call '", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Call ", Ġcandidate 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Second Ġcandidate Ġshould Ġbe Ġ' ball '", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ball ", Ġcandidate 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Third Ġcandidate Ġshould Ġbe Ġ' call ' Ġagain ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Call ", Ġcandidate 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Space () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSET UP ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġthis . mode !! ĊĊĠĠĠĠĠĠĠ Ġ// ĠEXEC UTE ĊĠĠĠĠĠĠĠ Ġ// ĠPress Ġspace ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmode . getKey Press Result ( Key . N 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult . consumed ) ĊĠĠĠĠĠĠĠ Ġ// assertEquals ( 1 , Ġresult . cursor Position ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult . code Word ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Space With Word () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSET UP ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġthis . mode !! ĊĠĠĠĠĠĠĠ Ġ// ĠType Ġa Ġword ĊĠĠĠĠĠĠĠ Ġpress Keys ( mode , ĠKey . N 2 , ĠKey . N 2 , ĠKey . N 5 , ĠKey . N 5 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEXEC UTE ĊĠĠĠĠĠĠĠ Ġ// ĠPress Ġspace ĊĠĠĠĠĠĠĠ Ġval Ġspace Result Ġ= Ġmode . getKey Press Result ( Key . N 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġspace Ġshould Ġcome Ġback Ġwith Ġthe Ġword ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġspace Result . consumed ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġspace Result . code Word ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Ġ", Ġspace Result . word ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Partial Candidate () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSET UP ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġthis . mode !! ĊĊĠĠĠĠĠĠĠ Ġ// ĠType Ġa Ġpart Ġof Ġa Ġlonger Ġword ĊĠĠĠĠĠĠĠ Ġpress Keys ( mode , ĠKey . N 2 , ĠKey . N 2 , ĠKey . N 5 , ĠKey . N 2 ) ĊĠĠĠĠĠĠĠ Ġ// ĠResolve Ġthe Ġcandidate ĊĠĠĠĠĠĠĠ Ġval Ġcandidate Ġ= Ġmode . resolve Code Word ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 2 5 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" balance ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" the Ġword Ġshould Ġjust Ġbe Ġthe Ġletters Ġthat Ġwere Ġtyped ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bal a ", Ġcandidate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest A post rop he () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSET UP ĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġthis . mode !! ĊĊĠĠĠĠĠĠĠ Ġ// ĠType Ġa Ġword Ġwith Ġan Ġa post rop he ĊĠĠĠĠĠĠĠ Ġpress Keys ( mode , ĠKey . N 4 , ĠKey . N 1 , ĠKey . N 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġcandidate Ġ= Ġmode . resolve Code Word ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 4 1 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" I 'm ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" The Ġcandidate Ġshould Ġbe ĠI 'm ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" I 'm ", Ġcandidate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Register Mask Digit () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstarting Mask Ġ= Ġ 0 u ĊĊĠĠĠĠĠĠĠ Ġ// ĠSwitch Ġon Ġindex Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġmask 1 Ġ= ĠWord Input Mode . register Mask Digit ( starting Mask , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 ", ĠInteger . to Binary String ( mask 1 . toInt ())) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSwitch Ġon Ġindex Ġ 2 Ġfrom Ġprevious Ġmask ĊĠĠĠĠĠĠĠ Ġval Ġmask 2 Ġ= ĠWord Input Mode . register Mask Digit ( mask 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 0 1 ", ĠInteger . to Binary String ( mask 2 . toInt ())) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSwitch Ġoff Ġindex Ġ 0 Ġfrom Ġprevious Ġmask ĊĠĠĠĠĠĠĠ Ġval Ġmask 3 Ġ= ĠWord Input Mode . register Mask Digit ( mask 2 , Ġ 0 , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 0 0 ", ĠInteger . to Binary String ( mask 3 . toInt ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Register Mask Digit Switch ing Off Zero () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġstarting Mask Ġ= Ġ 1 u Ġshl Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġ// ĠAttempt Ġto Ġswitch Ġoff Ġindex Ġ 5 ĊĠĠĠĠĠĠĠ Ġval Ġmask 1 Ġ= ĠWord Input Mode . register Mask Digit ( starting Mask , Ġ 5 , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 0 0 0 ", ĠInteger . to Binary String ( mask 1 . toInt ())) ĊĠĠĠ Ġ} Ċ Ċ }