package Ġcom . steam clock . up dat o tron Ċ Ċ import Ġcom . steam clock . up dat o tron . models . Version Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . Assert .* Ċ import Ġjava . lang . Exception Ċ Ċ class ĠVersion UnitTest Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTests Ġsituations Ġwhere Ġthe Ġparser Ġshould Ġbe Ġsuccessful . ĊĠĠĠĠ Ġ* ĠUsually Ġwe Ġwould Ġwant Ġto Ġtry / catch Ġour ĠVersion Ġinstantiation , Ġbut Ġsince ĊĠĠĠĠ Ġ* Ġwe Ġexpect Ġall Ġthese Ġshould Ġpass Ġthe Ġtest ĠI Ġhave Ġomitted Ġthem Ġin Ġthis Ġtest Ġcase . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbasic Parse () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMark eting , Ġextra Ġand Ġbuild ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= ĠVersion (" 1 . 2 . 9 9 - beta @ 4 0 0 ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( version . marketing Components . size Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version . marketing Components [ 0 ] Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version . marketing Components [ 1 ] Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version . marketing Components [ 2 ] Ġ== Ġ 9 9 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version . additional Text Ġ== Ġ"- beta ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( version . build Ġ== Ġ 4 0 0 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version . description Ġ== Ġ" 1 . 2 . 9 9 - beta @ 4 0 0 ") ĊĠĠĠĠĠĠĠ ĠassertFalse ( version . is Develop mem nt ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠMark eting Ġonly ĊĠĠĠĠĠĠĠ Ġval Ġversion 2 Ġ= ĠVersion (" 2 0 2 0 . 5 ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 2 . marketing Components . size Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 2 . marketing Components [ 0 ] Ġ== Ġ 2 0 2 0 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 2 . marketing Components [ 1 ] Ġ== Ġ 5 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 2 . additional Text . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertNull ( version 2 . build ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 2 . description Ġ== Ġ" 2 0 2 0 . 5 ") ĊĠĠĠĠĠĠĠ ĠassertFalse ( version 2 . is Develop mem nt ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠMark eting Ġand Ġextra ĊĠĠĠĠĠĠĠ Ġval Ġversion 3 Ġ= ĠVersion (" 1 . 2 . 3 - alpha ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 3 . marketing Components . size Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 3 . marketing Components [ 0 ] Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 3 . marketing Components [ 1 ] Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 3 . marketing Components [ 2 ] Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 3 . additional Text Ġ== Ġ"- alpha ") ĊĠĠĠĠĠĠĠ ĠassertNull ( version 3 . build ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 3 . description Ġ== Ġ" 1 . 2 . 3 - alpha ") ĊĠĠĠĠĠĠĠ ĠassertFalse ( version 3 . is Develop mem nt ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠMark eting Ġand Ġbuild ĊĠĠĠĠĠĠĠ Ġval Ġversion 4 Ġ= ĠVersion (" 4 . 9 9 @ 1 2 3 4 5 ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 4 . marketing Components . size Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 4 . marketing Components [ 0 ] Ġ== Ġ 4 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 4 . marketing Components [ 1 ] Ġ== Ġ 9 9 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 4 . additional Text . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 4 . build Ġ== Ġ 1 2 3 4 5 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 4 . description Ġ== Ġ" 4 . 9 9 @ 1 2 3 4 5 ") ĊĠĠĠĠĠĠĠ ĠassertFalse ( version 4 . is Develop mem nt ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠBuild Ġonly ĊĠĠĠĠĠĠĠ Ġval Ġversion 5 Ġ= ĠVersion ("@ 9 9 9 ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 5 . marketing Components . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 5 . additional Text . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 5 . build Ġ== Ġ 9 9 9 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 5 . description Ġ== Ġ"@ 9 9 9 ") ĊĠĠĠĠĠĠĠ ĠassertFalse ( version 5 . is Develop mem nt ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDev Ġbuild ĊĠĠĠĠĠĠĠ Ġval Ġversion 6 Ġ= ĠVersion (" 2 0 2 0 . 2 @ 0 ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 6 . marketing Components . size Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 6 . marketing Components [ 0 ] Ġ== Ġ 2 0 2 0 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 6 . marketing Components [ 1 ] Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 6 . additional Text . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertNull ( version 6 . build ) Ġ// Ġtodo , Ġshould Ġthis Ġactually Ġstill Ġbe Ġ 0 ? ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 6 . description Ġ== Ġ" 2 0 2 0 . 2 ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( version 6 . is Develop mem nt ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTests Ġsituations Ġwhere Ġthe Ġparser Ġshould Ġthrow ĠInvalid Version String . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfailed Parse () Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġattempt Create ( version Str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= ĠVersion ( version Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse (" Version Ġinit Ġshould Ġhave Ġthrown Ġan Ġexception Ġfor Ġ$ version Str ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( e Ġis ĠUp dat o tron Exception . Invalid Version String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġattempt Create (" Not A Build Number ") ĊĠĠĠĠĠĠĠ Ġattempt Create (" Not A Build Number @ 1 0 0 ") ĊĠĠĠĠĠĠĠ Ġattempt Create (" 1 . 2 .") Ġ// ĠEnd s Ġwith Ġ"." ĊĠĠĠĠĠĠĠ Ġattempt Create (". 2 . 3 ") Ġ// ĠStarts Ġwith Ġ"." ĊĠĠĠĠĠĠĠ Ġattempt Create (" 1 . 2 . 3 @ 1 0 0 @ 2 0 0 ") Ġ// ĠMultiple Ġbuild Ġnumbers ĊĠĠĠĠĠĠĠ Ġattempt Create (" 1 . a ") Ġ// ĠNon - numeric Ġmarketing Ġcomponent ĊĠĠĠĠĠĠĠ Ġattempt Create ("") Ġ// ĠEmpty Ġstring ĊĠĠĠĠĠĠĠ Ġattempt Create (".") Ġ// ĠEmpty Ġmarketing Ġcomponents ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTesting Ġ" ==" Ġ/ Ġequals Ġmethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġequals () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠshouldBe Equal Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 0 "), ĠVersion (" 1 . 2 . 0 ")), Ġ// ĠExact ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 "), ĠVersion (" 1 . 2 . 0 ")), Ġ// ĠO mitted Ġcomponent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 0 - beta "), ĠVersion (" 1 . 2 . 0 - beta ")), Ġ Ġ// ĠWith Ġextra ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 - beta "), ĠVersion (" 1 . 2 . 0 - beta ")), Ġ// ĠWith Ġextra Ġand Ġomitted Ġcomponent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 0 @ 2 0 0 "), ĠVersion (" 1 . 2 . 0 @ 2 0 0 ")), Ġ// ĠWith Ġbuild ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 @ 2 0 0 "), ĠVersion (" 1 . 2 . 0 @ 2 0 0 ")), Ġ// ĠWith Ġbuild Ġand Ġomitted Ġcomponent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 0 - beta @ 2 0 0 "), ĠVersion (" 1 . 2 . 0 - beta @ 2 0 0 ")), Ġ// ĠWith Ġextra Ġand Ġbuild ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 - beta @ 2 0 0 "), ĠVersion (" 1 . 2 . 0 - beta @ 2 0 0 ")) Ġ// ĠWith Ġextra , Ġbuild Ġand Ġand Ġomitted Ġcomponent ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġshould Not Be Equal Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 1 "), ĠVersion (" 1 . 2 . 0 ")) Ġ// ĠExact ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠshouldBe Equal . forEach Ġ{ ĠassertTrue ( it . first Ġ== Ġit . second ) Ġ} ĊĠĠĠĠĠĠĠ Ġshould Not Be Equal . forEach Ġ{ ĠassertFalse ( it . first Ġ== Ġit . second ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTesting Ġcompare To Ġ( less Ġthan , Ġgreater Ġthan ) Ġimplementation . ĊĠĠĠĠ Ġ* ĠUsually Ġwe Ġwould Ġwant Ġto Ġtry / catch Ġour ĠVersion Ġinstantiation , Ġbut Ġsince ĊĠĠĠĠ Ġ* Ġwe Ġexpect Ġall Ġthese Ġshould Ġpass Ġthe Ġtest ĠI Ġhave Ġomitted Ġthem Ġin Ġthis Ġtest Ġcase . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompare To () Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġordered Ascending True ( first : ĠString , Ġsecond : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ("$ first Ġshould Ġbe Ġ< Ġ$ second ", ĠVersion ( first ) Ġ< ĠVersion ( second )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġordered Ascending False ( first : ĠString , Ġsecond : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ("$ first Ġshould Ġbe Ġnot Ġbe Ġ< Ġthan Ġ$ second ", ĠVersion ( first ) Ġ< ĠVersion ( second )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġa Ġ< Ġb ĊĠĠĠĠĠĠĠ Ġordered Ascending True (" 1 . 2 ", Ġ" 1 . 2 . 1 ") ĊĠĠĠĠĠĠĠ Ġordered Ascending True (" 1 . 2 . 2 ", Ġ" 1 . 2 . 1 0 ") ĊĠĠĠĠĠĠĠ Ġordered Ascending True (" 1 . 2 . 4 ", Ġ" 1 . 3 . 5 ") ĊĠĠĠĠĠĠĠ Ġordered Ascending True (" 1 . 2 . 4 ", Ġ" 3 ") ĊĠĠĠĠĠĠĠ Ġordered Ascending True (" 3 ", Ġ" 4 . 1 ") ĊĠĠĠĠĠĠĠ Ġordered Ascending True (" 1 . 2 . 4 ", Ġ" 1 . 3 . 4 ") ĊĠĠĠĠĠĠĠ Ġordered Ascending True (" 1 . 2 ", Ġ" 2 ") ĊĠĠĠĠĠĠĠ Ġordered Ascending True (" 1 . 2 @ 3 0 ", Ġ" 1 . 2 @ 3 0 1 ") ĊĠĠĠĠĠĠĠ Ġordered Ascending True (" 1 . 2 - b @ 3 0 0 ", Ġ" 1 . 2 - a @ 3 0 1 ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġa Ġ> Ġb , ĊĠĠĠĠĠĠĠ Ġordered Ascending False (" 1 . 2 . 2 ", Ġ" 1 . 2 . 1 ") ĊĠĠĠĠĠĠĠ Ġordered Ascending False (" 1 . 3 @ 3 0 0 ", Ġ" 1 . 2 @ 2 0 0 ") Ġ// ĠBit Ġof Ġa Ġtrick Ġquestion , Ġbuild Ġnumbers Ġare Ġout Ġof Ġsequence , Ġshould Ġprobably Ġwarn Ġin Ġthis Ġcase ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTesting Ġmarketing Components Equal Ġimplementation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Mark eting Components Equal () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠshouldBe True Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 0 "), ĠVersion (" 1 . 2 . 0 ")), Ġ// ĠExact ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 "), ĠVersion (" 1 . 2 . 0 ")), Ġ// ĠO mitted Ġcomponent ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 0 . 0 . 0 "), ĠVersion (" 1 . 2 ")), Ġ// ĠSil ly Ġnumber Ġof Ġ 0 'd Ġcomponents ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 0 "), ĠVersion (" 1 . 2 . 0 - beta ")), Ġ// ĠWith Ġextra ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 - beta "), ĠVersion (" 1 . 2 . 0 ")), Ġ// ĠWith Ġextra Ġand Ġomitted Ġcomponent ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 0 @ 2 0 0 "), ĠVersion (" 1 . 2 . 0 ")), Ġ// ĠWith Ġbuild ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 "), ĠVersion (" 1 . 2 . 0 @ 2 0 0 ")), Ġ// ĠWith Ġbuild Ġand Ġomitted Ġcomponent ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 0 "), ĠVersion (" 1 . 2 . 0 - beta @ 2 0 0 ")), Ġ// ĠWith Ġextra Ġand Ġbuild ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 - beta @ 2 0 0 "), ĠVersion (" 1 . 2 . 0 ")) Ġ// ĠWith Ġextra , Ġbuild Ġand Ġand Ġomitted Ġcomponent ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġshould Not False Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 1 "), ĠVersion (" 1 . 2 . 0 ")), Ġ// ĠExact ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Version (" 1 . 2 . 0 "), ĠVersion (" 1 . 2 . 1 ")) Ġ// ĠExact ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠshouldBe True . forEach Ġ{ ĠassertTrue ( it . first . marketing Components Equal ( it . second )) Ġ} ĊĠĠĠĠĠĠĠ Ġshould Not False . forEach Ġ{ ĠassertFalse ( it . first . marketing Components Equal ( it . second )) Ġ} ĊĠĠĠ Ġ} Ċ }