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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/ntp/ChromeHomeNewTabPageTest.java

Issue 2759823002: 🏠 Separate bottom sheet current from target state (Closed)
Patch Set: fix tests 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
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.ntp; 5 package org.chromium.chrome.browser.ntp;
6 6
7 import android.support.test.filters.SmallTest; 7 import android.support.test.filters.SmallTest;
8 8
9 import org.chromium.base.ThreadUtils; 9 import org.chromium.base.ThreadUtils;
10 import org.chromium.base.test.util.CallbackHelper;
10 import org.chromium.chrome.browser.UrlConstants; 11 import org.chromium.chrome.browser.UrlConstants;
11 import org.chromium.chrome.browser.tab.Tab; 12 import org.chromium.chrome.browser.tab.Tab;
12 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; 13 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
13 import org.chromium.chrome.browser.widget.FadingBackgroundView; 14 import org.chromium.chrome.browser.widget.FadingBackgroundView;
14 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet; 15 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
16 import org.chromium.chrome.browser.widget.bottomsheet.EmptyBottomSheetObserver;
15 import org.chromium.chrome.test.BottomSheetTestCaseBase; 17 import org.chromium.chrome.test.BottomSheetTestCaseBase;
16 import org.chromium.chrome.test.util.ChromeTabUtils; 18 import org.chromium.chrome.test.util.ChromeTabUtils;
17 import org.chromium.chrome.test.util.NewTabPageTestUtils; 19 import org.chromium.chrome.test.util.NewTabPageTestUtils;
18 20
21 import java.util.concurrent.TimeoutException;
22
19 /** 23 /**
20 * Tests for the {@link ChromeHomeNewTabPage}. 24 * Tests for the {@link ChromeHomeNewTabPage}.
21 */ 25 */
22 public class ChromeHomeNewTabPageTest extends BottomSheetTestCaseBase { 26 public class ChromeHomeNewTabPageTest extends BottomSheetTestCaseBase {
23 private FadingBackgroundView mFadingBackgroundView; 27 private FadingBackgroundView mFadingBackgroundView;
28 private StateChangeBottomSheetObserver mObserver;
29 private int mStateChangeCurrentCalls;
30
31 /** On observer used to record state change events on the bottom sheet. */
32 private static class StateChangeBottomSheetObserver extends EmptyBottomSheet Observer {
33 /** A {@link CallbackHelper} that waits for the bottom sheet state to ch ange. */
34 private final CallbackHelper mStateChangedCallbackHelper = new CallbackH elper();
35
36 @Override
37 public void onSheetStateChanged(int state) {
38 mStateChangedCallbackHelper.notifyCalled();
39 }
40 }
24 41
25 @Override 42 @Override
26 public void setUp() throws Exception { 43 public void setUp() throws Exception {
27 super.setUp(); 44 super.setUp();
28 45
46 mObserver = new StateChangeBottomSheetObserver();
47 mBottomSheet.addObserver(mObserver);
48
29 mFadingBackgroundView = getActivity().getFadingBackgroundView(); 49 mFadingBackgroundView = getActivity().getFadingBackgroundView();
50
51 // Once setup is done, get the initial call count for onStateChanged().
52 mStateChangeCurrentCalls = mObserver.mStateChangedCallbackHelper.getCall Count();
30 } 53 }
31 54
32 @SmallTest 55 @SmallTest
33 public void testCloseNTP_OneTab() throws IllegalArgumentException, Interrupt edException { 56 public void testCloseNTP_OneTab()
57 throws IllegalArgumentException, InterruptedException, TimeoutExcept ion {
34 // Load the NTP. 58 // Load the NTP.
35 Tab tab = getActivity().getActivityTab(); 59 Tab tab = getActivity().getActivityTab();
36 loadUrl(UrlConstants.NTP_URL); 60 loadUrl(UrlConstants.NTP_URL);
37 NewTabPageTestUtils.waitForNtpLoaded(tab); 61 NewTabPageTestUtils.waitForNtpLoaded(tab);
38 62
39 validateState(true); 63 validateState(true, true);
40 64
41 // Close the new tab. 65 // Close the new tab.
42 closeNewTab(); 66 closeNewTab();
43 assertEquals(0, getActivity().getTabModelSelector().getTotalTabCount()); 67 assertEquals(0, getActivity().getTabModelSelector().getTotalTabCount());
44 assertFalse("Overview mode should not be showing", 68 assertFalse("Overview mode should not be showing",
45 getActivity().getLayoutManager().overviewVisible()); 69 getActivity().getLayoutManager().overviewVisible());
46 } 70 }
47 71
48 @SmallTest 72 @SmallTest
49 public void testCloseNTP_TwoTabs() throws IllegalArgumentException, Interrup tedException { 73 public void testCloseNTP_TwoTabs()
74 throws IllegalArgumentException, InterruptedException, TimeoutExcept ion {
50 // Create a new tab. 75 // Create a new tab.
51 createNewTab(); 76 createNewTab();
52 77
53 // Close the new tab. 78 // Close the new tab.
54 closeNewTab(); 79 closeNewTab();
55 assertEquals(1, getActivity().getTabModelSelector().getTotalTabCount()); 80 assertEquals(1, getActivity().getTabModelSelector().getTotalTabCount());
56 assertFalse("Overview mode should not be showing", 81 assertFalse("Overview mode should not be showing",
57 getActivity().getLayoutManager().overviewVisible()); 82 getActivity().getLayoutManager().overviewVisible());
58 } 83 }
59 84
60 @SmallTest 85 @SmallTest
61 public void testCloseNTP_TwoTabs_OverviewMode() 86 public void testCloseNTP_TwoTabs_OverviewMode()
62 throws IllegalArgumentException, InterruptedException { 87 throws IllegalArgumentException, InterruptedException, TimeoutExcept ion {
63 // Switch to overview mode. 88 // Switch to overview mode.
64 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 89 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
65 @Override 90 @Override
66 public void run() { 91 public void run() {
67 getActivity().getLayoutManager().showOverview(false); 92 getActivity().getLayoutManager().showOverview(false);
68 } 93 }
69 }); 94 });
70 95
71 // Create a new tab. 96 // Create a new tab.
72 createNewTab(); 97 createNewTab();
73 98
74 // Close the new tab. 99 // Close the new tab.
75 closeNewTab(); 100 closeNewTab();
76 assertEquals(1, getActivity().getTabModelSelector().getTotalTabCount()); 101 assertEquals(1, getActivity().getTabModelSelector().getTotalTabCount());
77 assertTrue("Overview mode should be showing", 102 assertTrue("Overview mode should be showing",
78 getActivity().getLayoutManager().overviewVisible()); 103 getActivity().getLayoutManager().overviewVisible());
79 } 104 }
80 105
81 @SmallTest 106 @SmallTest
82 public void testToggleSelectedTab() throws IllegalArgumentException, Interru ptedException { 107 public void testToggleSelectedTab()
108 throws IllegalArgumentException, InterruptedException, TimeoutExcept ion {
83 // Create a new tab. 109 // Create a new tab.
84 createNewTab(); 110 createNewTab();
85 111
86 // Select the original tab. 112 // Select the original tab.
87 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 113 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
88 @Override 114 @Override
89 public void run() { 115 public void run() {
90 // It's not possible for the user to select a new tab while the bottom sheet is 116 // It's not possible for the user to select a new tab while the bottom sheet is
91 // open. 117 // open.
92 getActivity().getBottomSheet().setSheetState(BottomSheet.SHEET_S TATE_PEEK, false); 118 getActivity().getBottomSheet().setSheetState(BottomSheet.SHEET_S TATE_PEEK, false);
93 getActivity().getCurrentTabModel().setIndex(0, TabSelectionType. FROM_USER); 119 getActivity().getCurrentTabModel().setIndex(0, TabSelectionType. FROM_USER);
94 } 120 }
95 }); 121 });
96 122
97 validateState(false); 123 validateState(false, false);
98 124
99 // Select the NTP. 125 // Select the NTP.
100 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 126 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
101 @Override 127 @Override
102 public void run() { 128 public void run() {
103 getActivity().getCurrentTabModel().setIndex(1, TabSelectionType. FROM_USER); 129 getActivity().getCurrentTabModel().setIndex(1, TabSelectionType. FROM_USER);
104 } 130 }
105 }); 131 });
106 132
107 validateState(true); 133 validateState(true, true);
108 } 134 }
109 135
110 private void createNewTab() throws InterruptedException { 136 private void createNewTab() throws InterruptedException, TimeoutException {
111 ChromeTabUtils.fullyLoadUrlInNewTab( 137 ChromeTabUtils.fullyLoadUrlInNewTab(
112 getInstrumentation(), getActivity(), UrlConstants.NTP_URL, false ); 138 getInstrumentation(), getActivity(), UrlConstants.NTP_URL, false );
113 validateState(true); 139 validateState(true, true);
114 } 140 }
115 141
116 private void closeNewTab() { 142 private void closeNewTab() throws InterruptedException, TimeoutException {
117 Tab tab = getActivity().getActivityTab(); 143 Tab tab = getActivity().getActivityTab();
118 final ChromeHomeNewTabPage mNewTabPage = (ChromeHomeNewTabPage) tab.getN ativePage(); 144 final ChromeHomeNewTabPage mNewTabPage = (ChromeHomeNewTabPage) tab.getN ativePage();
119 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 145 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
120 @Override 146 @Override
121 public void run() { 147 public void run() {
122 mNewTabPage.getCloseButtonForTests().callOnClick(); 148 mNewTabPage.getCloseButtonForTests().callOnClick();
123 } 149 }
124 }); 150 });
125 151
126 validateState(false); 152 validateState(false, true);
127 } 153 }
128 154
129 private void validateState(boolean newTabPageSelected) { 155 private void validateState(boolean newTabPageSelected, boolean animatesToSta te)
156 throws InterruptedException, TimeoutException {
157 // Wait for two calls if animating; one is to SHEET_STATE_SCROLLING and the other is to the
158 // final state.
159 mObserver.mStateChangedCallbackHelper.waitForCallback(
160 mStateChangeCurrentCalls, animatesToState ? 2 : 1);
161
130 if (newTabPageSelected) { 162 if (newTabPageSelected) {
131 assertEquals("Sheet should be at half height", BottomSheet.SHEET_STA TE_HALF, 163 assertEquals("Sheet should be at half height", BottomSheet.SHEET_STA TE_HALF,
132 mBottomSheet.getSheetState()); 164 mBottomSheet.getSheetState());
133 assertFalse(mFadingBackgroundView.isEnabled()); 165 assertFalse(mFadingBackgroundView.isEnabled());
134 assertEquals(0f, mFadingBackgroundView.getAlpha()); 166 assertEquals(0f, mFadingBackgroundView.getAlpha());
135 } else { 167 } else {
136 assertEquals("Sheet should be peeking", BottomSheet.SHEET_STATE_PEEK , 168 assertEquals("Sheet should be peeking", BottomSheet.SHEET_STATE_PEEK ,
137 mBottomSheet.getSheetState()); 169 mBottomSheet.getSheetState());
138 assertTrue(mFadingBackgroundView.isEnabled()); 170 assertTrue(mFadingBackgroundView.isEnabled());
139 } 171 }
172
173 // Once the state is validated, update the call count.
174 mStateChangeCurrentCalls = mObserver.mStateChangedCallbackHelper.getCall Count();
140 } 175 }
141 } 176 }
OLDNEW
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698