1818import java .security .MessageDigest ;
1919import java .security .NoSuchAlgorithmException ;
2020
21+ import static org .mockito .ArgumentMatchers .any ;
2122import static org .mockito .ArgumentMatchers .anyInt ;
2223import static org .mockito .ArgumentMatchers .anyString ;
2324import static org .mockito .ArgumentMatchers .isNull ;
@@ -28,7 +29,7 @@ public class LockScreenDeviceIconManagerTests extends AndroidTestCase2 {
2829
2930 TemporaryFolder tempFolder = new TemporaryFolder ();
3031 private LockScreenDeviceIconManager lockScreenDeviceIconManager ;
31- private static final String ICON_URL = "http ://i.imgur.com/TgkvOIZ.png" ;
32+ private static final String ICON_URL = "https ://i.imgur.com/TgkvOIZ.png" ;
3233 private static final String LAST_UPDATED_TIME = "lastUpdatedTime" ;
3334 private static final String STORED_PATH = "storedPath" ;
3435
@@ -40,178 +41,63 @@ public void tearDown() throws Exception {
4041 super .tearDown ();
4142 }
4243
43- public void testUpdateCacheImageShouldReturnTrueWhenSharedPreferencesDoesNotExist () {
44+ public void testRetrieveIconShouldCallOnErrorAndOnImageRetrievedWithNullWhenGivenURLThatCannotDownloadAndIconIsNotCached () {
4445 final SharedPreferences sharedPrefs = Mockito .mock (SharedPreferences .class );
4546 final Context context = Mockito .mock (Context .class );
47+ final LockScreenDeviceIconManager .OnIconRetrievedListener listener = Mockito .mock (LockScreenDeviceIconManager .OnIconRetrievedListener .class );
48+
4649 Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
4750 Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn (null );
4851
4952 lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
50- boolean imageUpToDate = lockScreenDeviceIconManager .isIconCachedAndValid (ICON_URL );
51- assertFalse (imageUpToDate );
53+ lockScreenDeviceIconManager .retrieveIcon ("" , listener );
54+ verify (listener , times (1 )).onError (anyString ());
55+ verify (listener , times (1 )).onImageRetrieved (null );
5256 }
5357
54- public void testUpdateCacheImageShouldReturnTrueWhenUnableToReadSharedPreference () {
58+ public void testRetrieveIconShouldCallOnImageOnImageRetrievedWithIconWhenIconUpdateTimeIsNullFromSharedPref () {
5559 final SharedPreferences sharedPrefs = Mockito .mock (SharedPreferences .class );
56- final SharedPreferences .Editor sharedPrefsEditor = Mockito .mock (SharedPreferences .Editor .class );
5760 final Context context = Mockito .mock (Context .class );
58- Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
59- Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn ("" );
60- Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
61- Mockito .when (sharedPrefs .edit ()).thenReturn (sharedPrefsEditor );
62- Mockito .when (sharedPrefsEditor .remove (anyString ())).thenReturn (sharedPrefsEditor );
63- Mockito .when (sharedPrefsEditor .commit ()).thenReturn (true );
64-
65-
66- lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
67- boolean imageUpToDate = lockScreenDeviceIconManager .isIconCachedAndValid (ICON_URL );
68- assertFalse (imageUpToDate );
69- }
61+ final LockScreenDeviceIconManager .OnIconRetrievedListener listener = Mockito .mock (LockScreenDeviceIconManager .OnIconRetrievedListener .class );
7062
71- public void testUpdateCacheImageShouldReturnTrueSharedPreferenceReturnsAnOutdatedIcon () {
72- final SharedPreferences sharedPrefs = Mockito .mock (SharedPreferences .class );
73- final Context context = Mockito .mock (Context .class );
7463 Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
75- Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn (daysToMillisecondsAsString ( 35 ) );
64+ Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn (null );
7665
7766 lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
78- boolean imageUpToDate = lockScreenDeviceIconManager .isIconCachedAndValid (ICON_URL );
79- assertFalse ( imageUpToDate );
67+ lockScreenDeviceIconManager .retrieveIcon (ICON_URL , listener );
68+ verify ( listener , times ( 1 )). onImageRetrieved (( Bitmap ) any () );
8069 }
8170
82- public void testUpdateCacheImageShouldReturnFalseWhenSharedPreferenceReturnsAnUpdatedIcon () {
83- final SharedPreferences sharedPrefs = Mockito .mock (SharedPreferences .class );
84- final Context context = Mockito .mock (Context .class );
85- Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
86- Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn (daysToMillisecondsAsString (15 ));
87-
88- lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
89- boolean imageUpToDate = lockScreenDeviceIconManager .isIconCachedAndValid (ICON_URL );
90- assertTrue (imageUpToDate );
91- }
9271
93- public void testSaveFileToCacheShouldReturnBeforeWritingSharedPrefsIfSavingToCacheFails () {
72+ public void testRetrieveIconShouldCallOnImageOnImageRetrievedWithIconWhenCachedIconExpired () {
9473 final SharedPreferences sharedPrefs = Mockito .mock (SharedPreferences .class );
95- final SharedPreferences .Editor sharedPrefsEditor = Mockito .mock (SharedPreferences .Editor .class );
9674 final Context context = Mockito .mock (Context .class );
97- Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
98- Mockito .when (sharedPrefs .edit ()).thenReturn (sharedPrefsEditor );
99-
100- Bitmap deviceLogo = null ;
101- try {
102- deviceLogo = AndroidTools .downloadImage (ICON_URL );
103- lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
104- lockScreenDeviceIconManager .saveFileToCache (deviceLogo , ICON_URL );
105- verify (sharedPrefs , times (0 )).edit ();
106- verify (sharedPrefsEditor , times (0 )).putString (anyString (), anyString ());
107- } catch (IOException e ) {
108- e .printStackTrace ();
109- }
110- }
75+ final LockScreenDeviceIconManager .OnIconRetrievedListener listener = Mockito .mock (LockScreenDeviceIconManager .OnIconRetrievedListener .class );
11176
112- public void testSaveFileToCacheShouldWriteToSharedPrefsIfSaveIconIsSuccessful () {
113- final SharedPreferences sharedPrefs = Mockito .mock (SharedPreferences .class );
114- final SharedPreferences .Editor sharedPrefsEditor = Mockito .mock (SharedPreferences .Editor .class );
115- final Context context = Mockito .mock (Context .class );
11677 Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
117- Mockito .when (sharedPrefs .edit ()).thenReturn (sharedPrefsEditor );
118- try {
119- tempFolder .create ();
120- Mockito .when (context .getCacheDir ()).thenReturn (tempFolder .newFolder ());
121- } catch (IOException e ) {
122- e .printStackTrace ();
123- }
124-
125- Bitmap deviceLogo = null ;
126- try {
127- deviceLogo = AndroidTools .downloadImage (ICON_URL );
128- lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
129- lockScreenDeviceIconManager .saveFileToCache (deviceLogo , ICON_URL );
130- verify (sharedPrefs , times (1 )).edit ();
131- verify (sharedPrefsEditor , times (1 )).putString (anyString (), anyString ());
132- } catch (IOException e ) {
133- e .printStackTrace ();
134- }
135- }
136-
137- public void testGetFileFromCacheShouldReturnNullIfFailedToGetSystemPref () {
138- final SharedPreferences sharedPrefs = Mockito .mock (SharedPreferences .class );
139- final Context context = Mockito .mock (Context .class );
140- Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
141- Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn (null );
78+ Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn (daysToMillisecondsAsString (31 ));
14279
14380 lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
144- Bitmap cachedIcon = lockScreenDeviceIconManager .getFileFromCache (ICON_URL );
145- assertNull ( cachedIcon );
81+ lockScreenDeviceIconManager .retrieveIcon (ICON_URL , listener );
82+ verify ( listener , times ( 1 )). onImageRetrieved (( Bitmap ) any () );
14683 }
14784
148- public void testGetFileFromCacheShouldReturnNullIfInvalidDataFromSharedPref () {
85+ public void testRetrieveIconShouldCallOnImageRetrievedWithIconWhenCachedIconIsUpToDate () {
14986 final SharedPreferences sharedPrefs = Mockito .mock (SharedPreferences .class );
150- final SharedPreferences .Editor sharedPrefsEditor = Mockito .mock (SharedPreferences .Editor .class );
15187 final Context context = Mockito .mock (Context .class );
152- Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
153- Mockito .when (sharedPrefs .edit ()).thenReturn (sharedPrefsEditor );
154- Mockito .when (sharedPrefsEditor .remove (anyString ())).thenReturn (sharedPrefsEditor );
155- Mockito .when (sharedPrefsEditor .commit ()).thenReturn (true );
156- Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn ("" );
157-
158-
159- lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
160- Bitmap cachedIcon = lockScreenDeviceIconManager .getFileFromCache (ICON_URL );
161- assertNull (cachedIcon );
162- }
163-
164- public void testGetFileFromCacheShouldReturnNullIfFailedToFindIcon () {
165- final SharedPreferences sharedPrefs = Mockito .mock (SharedPreferences .class );
16688 final SharedPreferences .Editor sharedPrefsEditor = Mockito .mock (SharedPreferences .Editor .class );
167- final Context context = Mockito .mock (Context .class );
168- Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
169- Mockito .when (sharedPrefs .edit ()).thenReturn (sharedPrefsEditor );
170- Mockito .when (sharedPrefsEditor .remove (anyString ())).thenReturn (sharedPrefsEditor );
171- Mockito .when (sharedPrefsEditor .commit ()).thenReturn (true );
172- Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn (daysToMillisecondsAsString (15 ));
173-
174- try {
175- tempFolder .create ();
176- Mockito .when (context .getCacheDir ()).thenReturn (tempFolder .newFolder ());
177- } catch (IOException e ) {
178- e .printStackTrace ();
179- }
180-
89+ final LockScreenDeviceIconManager .OnIconRetrievedListener listener = Mockito .mock (LockScreenDeviceIconManager .OnIconRetrievedListener .class );
18190
182- lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
183- Bitmap cachedIcon = lockScreenDeviceIconManager .getFileFromCache (ICON_URL );
184- assertNull (cachedIcon );
185- }
186-
187- public void testGetFileFromCacheShouldReturnBitmapIfIconFoundInCache () {
188- final SharedPreferences sharedPrefs = Mockito .mock (SharedPreferences .class );
189- final SharedPreferences .Editor sharedPrefsEditor = Mockito .mock (SharedPreferences .Editor .class );
190- final Context context = Mockito .mock (Context .class );
19191 Mockito .when (context .getSharedPreferences (anyString (), anyInt ())).thenReturn (sharedPrefs );
92+ Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn (daysToMillisecondsAsString (15 ));
19293 Mockito .when (sharedPrefs .edit ()).thenReturn (sharedPrefsEditor );
19394 Mockito .when (sharedPrefsEditor .remove (anyString ())).thenReturn (sharedPrefsEditor );
194- Mockito .when (sharedPrefsEditor .commit ()).thenReturn (true );
195- Bitmap deviceLogo = null ;
19695
19796 lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
198-
199- try {
200- tempFolder .create ();
201- File newFolder = tempFolder .newFolder ();
202- Mockito .when (context .getCacheDir ()).thenReturn (newFolder );
203- deviceLogo = AndroidTools .downloadImage (ICON_URL );
204- Mockito .when (sharedPrefs .getString (anyString (), (String ) isNull ())).thenReturn (daysToMillisecondsAsString (15 ));
205- } catch (IOException e ) {
206- e .printStackTrace ();
207- }
208-
209- lockScreenDeviceIconManager = new LockScreenDeviceIconManager (context );
210- lockScreenDeviceIconManager .saveFileToCache (deviceLogo , ICON_URL );
211- Bitmap cachedIcon = lockScreenDeviceIconManager .getFileFromCache (ICON_URL );
212- assertNotNull (cachedIcon );
97+ lockScreenDeviceIconManager .retrieveIcon (ICON_URL , listener );
98+ verify (listener , times (1 )).onImageRetrieved ((Bitmap ) any ());
21399 }
214-
100+
215101 private String daysToMillisecondsAsString (int days ) {
216102 long milliSeconds = (long ) days * 24 * 60 * 60 * 1000 ;
217103 long previousDay = System .currentTimeMillis () - milliSeconds ;
0 commit comments