Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Side by Side Diff: chrome/android/junit/src/org/chromium/chrome/browser/suggestions/TileGroupTest.java

Issue 2819983002: (Reland) Expose resources in Robolectric/JUnit tests. (Closed)
Patch Set: Fix Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.suggestions; 5 package org.chromium.chrome.browser.suggestions;
6 6
7 import static org.hamcrest.CoreMatchers.is; 7 import static org.hamcrest.CoreMatchers.is;
8 import static org.junit.Assert.assertNotNull; 8 import static org.junit.Assert.assertNotNull;
9 import static org.junit.Assert.assertThat; 9 import static org.junit.Assert.assertThat;
10 import static org.junit.Assert.fail;
11 import static org.mockito.ArgumentMatchers.any; 10 import static org.mockito.ArgumentMatchers.any;
12 import static org.mockito.ArgumentMatchers.anyBoolean; 11 import static org.mockito.ArgumentMatchers.anyBoolean;
13 import static org.mockito.ArgumentMatchers.anyInt; 12 import static org.mockito.ArgumentMatchers.anyInt;
14 import static org.mockito.Mockito.doAnswer; 13 import static org.mockito.Mockito.doAnswer;
15 import static org.mockito.Mockito.mock; 14 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.never; 15 import static org.mockito.Mockito.never;
17 import static org.mockito.Mockito.reset; 16 import static org.mockito.Mockito.reset;
18 import static org.mockito.Mockito.verify; 17 import static org.mockito.Mockito.verify;
19 import static org.mockito.Mockito.verifyNoMoreInteractions; 18 import static org.mockito.Mockito.verifyNoMoreInteractions;
20 import static org.mockito.Mockito.when; 19 import static org.mockito.Mockito.when;
21 20
22 import android.content.Context;
23 import android.content.res.Resources;
24 import android.graphics.Bitmap; 21 import android.graphics.Bitmap;
25 import android.graphics.Color; 22 import android.graphics.Color;
26 import android.support.annotation.ColorRes;
27 import android.support.annotation.DimenRes;
28 import android.support.annotation.LayoutRes;
29 import android.view.LayoutInflater;
30 import android.view.View; 23 import android.view.View;
31 import android.view.ViewGroup; 24 import android.view.ViewGroup;
32 import android.widget.FrameLayout; 25 import android.widget.FrameLayout;
33 26
34 import org.hamcrest.CoreMatchers; 27 import org.hamcrest.CoreMatchers;
35 import org.junit.Before; 28 import org.junit.Before;
36 import org.junit.Rule; 29 import org.junit.Rule;
37 import org.junit.Test; 30 import org.junit.Test;
38 import org.junit.runner.RunWith; 31 import org.junit.runner.RunWith;
39 import org.mockito.ArgumentCaptor; 32 import org.mockito.ArgumentCaptor;
40 import org.mockito.Mock; 33 import org.mockito.Mock;
41 import org.mockito.MockitoAnnotations; 34 import org.mockito.MockitoAnnotations;
42 import org.mockito.invocation.InvocationOnMock; 35 import org.mockito.invocation.InvocationOnMock;
43 import org.mockito.stubbing.Answer; 36 import org.mockito.stubbing.Answer;
44 import org.robolectric.RuntimeEnvironment; 37 import org.robolectric.RuntimeEnvironment;
45 import org.robolectric.annotation.Config; 38 import org.robolectric.annotation.Config;
46 import org.robolectric.annotation.Implementation;
47 import org.robolectric.annotation.Implements;
48 import org.robolectric.shadows.ShadowResources;
49 39
50 import org.chromium.base.Callback; 40 import org.chromium.base.Callback;
51 import org.chromium.chrome.R;
52 import org.chromium.chrome.browser.ChromeFeatureList; 41 import org.chromium.chrome.browser.ChromeFeatureList;
53 import org.chromium.chrome.browser.Features; 42 import org.chromium.chrome.browser.Features;
54 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; 43 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
55 import org.chromium.chrome.browser.ntp.ContextMenuManager; 44 import org.chromium.chrome.browser.ntp.ContextMenuManager;
56 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; 45 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
57 import org.chromium.testing.local.LocalRobolectricTestRunner; 46 import org.chromium.testing.local.LocalRobolectricTestRunner;
58 47
59 /** 48 /**
60 * Unit tests for {@link TileGroup}. 49 * Unit tests for {@link TileGroup}.
61 */ 50 */
62 @RunWith(LocalRobolectricTestRunner.class) 51 @RunWith(LocalRobolectricTestRunner.class)
63 @Config(manifest = Config.NONE, sdk = 21, 52 @Config(manifest = Config.NONE)
64 shadows = {TileGroupTest.TileShadowResources.class,
65 TileGroupTest.ShadowLayoutInflater.class})
66 @Features(@Features.Register(ChromeFeatureList.NTP_OFFLINE_PAGES_FEATURE_NAME)) 53 @Features(@Features.Register(ChromeFeatureList.NTP_OFFLINE_PAGES_FEATURE_NAME))
67 public class TileGroupTest { 54 public class TileGroupTest {
68 private static final int MAX_TILES_TO_FETCH = 4; 55 private static final int MAX_TILES_TO_FETCH = 4;
69 private static final int TILE_TITLE_LINES = 1; 56 private static final int TILE_TITLE_LINES = 1;
70 private static final String[] URLS = {"https://www.google.com", "https://tel lmedadjokes.com"}; 57 private static final String[] URLS = {"https://www.google.com", "https://tel lmedadjokes.com"};
71 58
72 @Rule 59 @Rule
73 public Features.Processor mFeaturesProcessor = new Features.Processor(); 60 public Features.Processor mFeaturesProcessor = new Features.Processor();
74 61
75 @Mock 62 @Mock
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 MostVisitedSites.Observer observer, int maxResults) { 410 MostVisitedSites.Observer observer, int maxResults) {
424 mObserver = observer; 411 mObserver = observer;
425 } 412 }
426 413
427 @Override 414 @Override
428 public void onLoadingComplete(Tile[] tiles) {} 415 public void onLoadingComplete(Tile[] tiles) {}
429 416
430 @Override 417 @Override
431 public void destroy() {} 418 public void destroy() {}
432 } 419 }
433
434 /**
435 * Replacement for the {@link Resources} to allow loading resources used by {@link TileGroup} in
436 * unit tests.
437 * TODO(https://crbug.com/693573): Needed until unit tests can pick up resou rces themselves.
438 */
439 @Implements(Resources.class)
440 public static class TileShadowResources extends ShadowResources {
441 @Implementation
442 public int getDimensionPixelSize(@DimenRes int id) {
443 if (id == R.dimen.tile_view_icon_size) return 48;
444
445 throw new IllegalArgumentException();
446 }
447
448 @Implementation
449 public int getColor(@ColorRes int id) {
450 if (id == R.color.default_favicon_background_color) return Color.BLA CK;
451
452 throw new IllegalArgumentException();
453 }
454 }
455
456 /** Intercepts calls to inflate views to replace them with mocks. */
457 @Implements(LayoutInflater.class)
458 public static class ShadowLayoutInflater {
459 @Implementation
460 public static LayoutInflater from(Context context) {
461 LayoutInflater layoutInflater = mock(LayoutInflater.class);
462 when(layoutInflater.inflate(anyInt(), any(ViewGroup.class), anyBoole an()))
463 .thenAnswer(new Answer<View>() {
464 @Override
465 public View answer(InvocationOnMock invocation) throws T hrowable {
466 @LayoutRes
467 int layoutId = invocation.getArgument(0);
468 if (layoutId != R.layout.tile_view) fail("Unexpected resource id.");
469 return createMockTileView();
470 }
471 });
472 return layoutInflater;
473 }
474 }
475 } 420 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698