package Ġcom . v ise o . p oc . my weather application . ui . view model Ċ Ċ import Ġandroid . app . Application Ċ import Ġcom . v ise o . p oc . my weather application . data . City Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Annotations Ċ Ċ class ĠWeather ViewModel Test Ġ{ ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġval Ġmock Application : ĠApplication ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġweather ViewModel : ĠWeather ViewModel ĊĊĠĠĠ Ġ// History ĠList Ġwith ĠD uplic ations ĊĠĠĠ Ġprivate Ġval Ġhistory D uplic ations Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠCity (" City 1 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 2 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 3 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 2 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 1 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ) ĊĠĠĠ Ġ). asList () ĊĊĠĠĠ Ġprivate Ġval Ġhistory More Than 1 0 Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠCity (" City 1 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 2 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 3 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 4 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 5 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 6 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 7 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 8 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 9 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 1 0 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ), ĊĠĠĠĠĠĠĠ ĠCity (" City 1 1 ", Ġ 0 . 1 , Ġ 0 . 1 , Ġtrue ) ĊĠĠĠ Ġ). asList () ĊĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĠĠĠĠĠĠĠ Ġweather ViewModel Ġ= Ġmock Application ?. let Ġ{ ĠWeather ViewModel ( it ) Ġ} !! ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠisValid City Name _ isValid () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( weather ViewModel . isValid City Name (" New ĠYork ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( weather ViewModel . isValid City Name (" B og ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( weather ViewModel . isValid City Name (" B og ota ĠD . ĠC .")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( weather ViewModel . isValid City Name (" S aint - M alo ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠisValid City Name _ is Invalid () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Invalid Ġspecial Ġcharacter Ġ& ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather ViewModel . isValid City Name (" New ĠYork Ġ& ĠW ashington ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Invalid Ġspecial Ġcharacter Ġ= ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather ViewModel . isValid City Name (" New ĠYork Ġ= ĠW ashington ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertFalse (" Empty ĠString ", Ġweather ViewModel . isValid City Name ("")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget City History () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Filtered Ġlist : ĠRemove Ġd uplic ations ", ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather ViewModel . filter City History ( history D uplic ations ). size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Filtered Ġlist : ĠMax Ġ 1 0 Ġitems ", ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather ViewModel . filter City History ( history More Than 1 0 ). size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ }