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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/AppMenuTest.java

Issue 2853423003: Revert of Convert ChromeActivityTestCaseBase direct children to JUnit4 (Closed)
Patch Set: Created 3 years, 7 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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.appmenu; 5 package org.chromium.chrome.browser.appmenu;
6 6
7 import android.app.Activity; 7 import android.app.Activity;
8 import android.content.pm.ActivityInfo; 8 import android.content.pm.ActivityInfo;
9 import android.support.test.InstrumentationRegistry;
10 import android.support.test.filters.SmallTest; 9 import android.support.test.filters.SmallTest;
11 import android.view.KeyEvent; 10 import android.view.KeyEvent;
12 import android.view.MenuItem; 11 import android.view.MenuItem;
13 import android.view.View; 12 import android.view.View;
14 import android.widget.ListPopupWindow; 13 import android.widget.ListPopupWindow;
15 import android.widget.ListView; 14 import android.widget.ListView;
16 15
17 import org.junit.Assert;
18 import org.junit.Before;
19 import org.junit.Rule;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22
23 import org.chromium.base.ThreadUtils; 16 import org.chromium.base.ThreadUtils;
24 import org.chromium.base.annotations.SuppressFBWarnings; 17 import org.chromium.base.annotations.SuppressFBWarnings;
25 import org.chromium.base.test.util.CommandLineFlags;
26 import org.chromium.base.test.util.DisabledTest; 18 import org.chromium.base.test.util.DisabledTest;
27 import org.chromium.base.test.util.Feature; 19 import org.chromium.base.test.util.Feature;
28 import org.chromium.base.test.util.RetryOnFailure; 20 import org.chromium.base.test.util.RetryOnFailure;
29 import org.chromium.base.test.util.UrlUtils; 21 import org.chromium.base.test.util.UrlUtils;
30 import org.chromium.chrome.browser.ChromeActivity; 22 import org.chromium.chrome.browser.ChromeActivity;
31 import org.chromium.chrome.browser.ChromeSwitches;
32 import org.chromium.chrome.browser.ChromeTabbedActivity; 23 import org.chromium.chrome.browser.ChromeTabbedActivity;
33 import org.chromium.chrome.test.ChromeActivityTestRule; 24 import org.chromium.chrome.test.ChromeActivityTestCaseBase;
34 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
35 import org.chromium.chrome.test.util.ChromeTabUtils; 25 import org.chromium.chrome.test.util.ChromeTabUtils;
36 import org.chromium.content.browser.test.util.Criteria; 26 import org.chromium.content.browser.test.util.Criteria;
37 import org.chromium.content.browser.test.util.CriteriaHelper; 27 import org.chromium.content.browser.test.util.CriteriaHelper;
38 28
39 import java.util.concurrent.Callable; 29 import java.util.concurrent.Callable;
40 30
41 /** 31 /**
42 * Tests AppMenu popup 32 * Tests AppMenu popup
43 */ 33 */
44 @RunWith(ChromeJUnit4ClassRunner.class)
45 @RetryOnFailure 34 @RetryOnFailure
46 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, 35 public class AppMenuTest extends ChromeActivityTestCaseBase<ChromeActivity> {
47 ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG})
48 public class AppMenuTest {
49 @Rule
50 public ChromeActivityTestRule<ChromeActivity> mActivityTestRule =
51 new ChromeActivityTestRule<>(ChromeActivity.class);
52
53 private static final String TEST_URL = UrlUtils.encodeHtmlDataUri("<html>foo </html>"); 36 private static final String TEST_URL = UrlUtils.encodeHtmlDataUri("<html>foo </html>");
54 37
55 private AppMenu mAppMenu; 38 private AppMenu mAppMenu;
56 private AppMenuHandler mAppMenuHandler; 39 private AppMenuHandler mAppMenuHandler;
57 40
58 /** 41 /**
59 * AppMenuHandler that will be used to intercept item selections for testing . 42 * AppMenuHandler that will be used to intercept item selections for testing .
60 */ 43 */
61 @SuppressFBWarnings("URF_UNREAD_FIELD") 44 @SuppressFBWarnings("URF_UNREAD_FIELD")
62 public static class AppMenuHandlerForTest extends AppMenuHandler { 45 public static class AppMenuHandlerForTest extends AppMenuHandler {
63 int mLastSelectedItemId = -1; 46 int mLastSelectedItemId = -1;
64 47
65 /** 48 /**
66 * AppMenuHandler for intercepting options item selections. 49 * AppMenuHandler for intercepting options item selections.
67 */ 50 */
68 public AppMenuHandlerForTest(Activity activity, AppMenuPropertiesDelegat e delegate, 51 public AppMenuHandlerForTest(Activity activity, AppMenuPropertiesDelegat e delegate,
69 int menuResourceId) { 52 int menuResourceId) {
70 super(activity, delegate, menuResourceId); 53 super(activity, delegate, menuResourceId);
71 } 54 }
72 55
73 @Override 56 @Override
74 void onOptionsItemSelected(MenuItem item) { 57 void onOptionsItemSelected(MenuItem item) {
75 mLastSelectedItemId = item.getItemId(); 58 mLastSelectedItemId = item.getItemId();
76 } 59 }
77 } 60 }
78 61
79 @Before 62 public AppMenuTest() {
80 public void setUp() throws Exception { 63 super(ChromeActivity.class);
64 }
65
66 @Override
67 public void startMainActivity() throws InterruptedException {
68 startMainActivityWithURL(TEST_URL);
69 }
70
71 @Override
72 protected void setUp() throws Exception {
81 // We need list selection; ensure we are not in touch mode. 73 // We need list selection; ensure we are not in touch mode.
82 InstrumentationRegistry.getInstrumentation().setInTouchMode(false); 74 getInstrumentation().setInTouchMode(false);
83 75
84 ChromeActivity.setAppMenuHandlerFactoryForTesting( 76 ChromeActivity.setAppMenuHandlerFactoryForTesting(
85 new ChromeActivity.AppMenuHandlerFactory() { 77 new ChromeActivity.AppMenuHandlerFactory() {
86 @Override 78 @Override
87 public AppMenuHandler get(Activity activity, AppMenuProperti esDelegate delegate, 79 public AppMenuHandler get(Activity activity, AppMenuProperti esDelegate delegate,
88 int menuResourceId) { 80 int menuResourceId) {
89 mAppMenuHandler = 81 mAppMenuHandler =
90 new AppMenuHandlerForTest(activity, delegate, me nuResourceId); 82 new AppMenuHandlerForTest(activity, delegate, me nuResourceId);
91 return mAppMenuHandler; 83 return mAppMenuHandler;
92 } 84 }
93 }); 85 });
94 86
95 mActivityTestRule.startMainActivityWithURL(TEST_URL); 87 super.setUp();
96 88
97 showAppMenuAndAssertMenuShown(); 89 showAppMenuAndAssertMenuShown();
98 mAppMenu = mActivityTestRule.getActivity().getAppMenuHandler().getAppMen u(); 90 mAppMenu = getActivity().getAppMenuHandler().getAppMenu();
99 ThreadUtils.runOnUiThread(new Runnable() { 91 ThreadUtils.runOnUiThread(new Runnable() {
100 @Override 92 @Override
101 public void run() { 93 public void run() {
102 mAppMenu.getPopup().getListView().setSelection(0); 94 mAppMenu.getPopup().getListView().setSelection(0);
103 } 95 }
104 }); 96 });
105 CriteriaHelper.pollInstrumentationThread(Criteria.equals(0, new Callable <Integer>() { 97 CriteriaHelper.pollInstrumentationThread(Criteria.equals(0, new Callable <Integer>() {
106 @Override 98 @Override
107 public Integer call() { 99 public Integer call() {
108 return getCurrentFocusedRow(); 100 return getCurrentFocusedRow();
109 } 101 }
110 })); 102 }));
111 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 103 getInstrumentation().waitForIdleSync();
112 } 104 }
113 105
114 /** 106 /**
115 * Verify opening a new tab from the menu. 107 * Verify opening a new tab from the menu.
116 */ 108 */
117 @Test
118 @SmallTest 109 @SmallTest
119 @Feature({"Browser", "Main"}) 110 @Feature({"Browser", "Main"})
120 public void testMenuNewTab() throws InterruptedException { 111 public void testMenuNewTab() throws InterruptedException {
121 final int tabCountBefore = mActivityTestRule.getActivity().getCurrentTab Model().getCount(); 112 final int tabCountBefore = getActivity().getCurrentTabModel().getCount() ;
122 ChromeTabUtils.newTabFromMenu(InstrumentationRegistry.getInstrumentation (), 113 ChromeTabUtils.newTabFromMenu(getInstrumentation(), (ChromeTabbedActivit y) getActivity());
123 (ChromeTabbedActivity) mActivityTestRule.getActivity()); 114 final int tabCountAfter = getActivity().getCurrentTabModel().getCount();
124 final int tabCountAfter = mActivityTestRule.getActivity().getCurrentTabM odel().getCount(); 115 assertTrue("Expected: " + (tabCountBefore + 1) + " Got: " + tabCountAfte r,
125 Assert.assertTrue("Expected: " + (tabCountBefore + 1) + " Got: " + tabCo untAfter,
126 tabCountBefore + 1 == tabCountAfter); 116 tabCountBefore + 1 == tabCountAfter);
127 } 117 }
128 118
129 /** 119 /**
130 * Test bounds when accessing the menu through the keyboard. 120 * Test bounds when accessing the menu through the keyboard.
131 * Make sure that the menu stays open when trying to move past the first and last items. 121 * Make sure that the menu stays open when trying to move past the first and last items.
132 */ 122 */
133 @Test
134 @SmallTest 123 @SmallTest
135 @Feature({"Browser", "Main"}) 124 @Feature({"Browser", "Main"})
136 public void testKeyboardMenuBoundaries() { 125 public void testKeyboardMenuBoundaries() {
137 moveToBoundary(false, true); 126 moveToBoundary(false, true);
138 Assert.assertEquals(getCount() - 1, getCurrentFocusedRow()); 127 assertEquals(getCount() - 1, getCurrentFocusedRow());
139 moveToBoundary(true, true); 128 moveToBoundary(true, true);
140 Assert.assertEquals(0, getCurrentFocusedRow()); 129 assertEquals(0, getCurrentFocusedRow());
141 moveToBoundary(false, true); 130 moveToBoundary(false, true);
142 Assert.assertEquals(getCount() - 1, getCurrentFocusedRow()); 131 assertEquals(getCount() - 1, getCurrentFocusedRow());
143 } 132 }
144 133
145 /** 134 /**
146 * Test that typing ENTER immediately opening the menu works. 135 * Test that typing ENTER immediately opening the menu works.
147 */ 136 */
148 @Test
149 @SmallTest 137 @SmallTest
150 @Feature({"Browser", "Main"}) 138 @Feature({"Browser", "Main"})
151 public void testKeyboardMenuEnterOnOpen() { 139 public void testKeyboardMenuEnterOnOpen() {
152 hitEnterAndAssertAppMenuDismissed(); 140 hitEnterAndAssertAppMenuDismissed();
153 } 141 }
154 142
155 /** 143 /**
156 * Test that hitting ENTER past the top item doesn't crash Chrome. 144 * Test that hitting ENTER past the top item doesn't crash Chrome.
157 */ 145 */
158 @Test
159 @SmallTest 146 @SmallTest
160 @Feature({"Browser", "Main"}) 147 @Feature({"Browser", "Main"})
161 public void testKeyboardEnterAfterMovePastTopItem() { 148 public void testKeyboardEnterAfterMovePastTopItem() {
162 moveToBoundary(true, true); 149 moveToBoundary(true, true);
163 Assert.assertEquals(0, getCurrentFocusedRow()); 150 assertEquals(0, getCurrentFocusedRow());
164 hitEnterAndAssertAppMenuDismissed(); 151 hitEnterAndAssertAppMenuDismissed();
165 } 152 }
166 153
167 /** 154 /**
168 * Test that hitting ENTER past the bottom item doesn't crash Chrome. 155 * Test that hitting ENTER past the bottom item doesn't crash Chrome.
169 * Catches regressions for http://crbug.com/181067 156 * Catches regressions for http://crbug.com/181067
170 */ 157 */
171 @Test
172 @SmallTest 158 @SmallTest
173 @Feature({"Browser", "Main"}) 159 @Feature({"Browser", "Main"})
174 public void testKeyboardEnterAfterMovePastBottomItem() { 160 public void testKeyboardEnterAfterMovePastBottomItem() {
175 moveToBoundary(false, true); 161 moveToBoundary(false, true);
176 Assert.assertEquals(getCount() - 1, getCurrentFocusedRow()); 162 assertEquals(getCount() - 1, getCurrentFocusedRow());
177 hitEnterAndAssertAppMenuDismissed(); 163 hitEnterAndAssertAppMenuDismissed();
178 } 164 }
179 165
180 /** 166 /**
181 * Test that hitting ENTER on the top item actually triggers the top item. 167 * Test that hitting ENTER on the top item actually triggers the top item.
182 * Catches regressions for https://crbug.com/191239 for shrunken menus. 168 * Catches regressions for https://crbug.com/191239 for shrunken menus.
183 */ 169 */
184 @Test
185 @SmallTest 170 @SmallTest
186 @Feature({"Browser", "Main"}) 171 @Feature({"Browser", "Main"})
187 public void testKeyboardMenuEnterOnTopItemLandscape() { 172 public void testKeyboardMenuEnterOnTopItemLandscape() {
188 mActivityTestRule.getActivity().setRequestedOrientation( 173 getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LA NDSCAPE);
189 ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
190 showAppMenuAndAssertMenuShown(); 174 showAppMenuAndAssertMenuShown();
191 moveToBoundary(true, false); 175 moveToBoundary(true, false);
192 Assert.assertEquals(0, getCurrentFocusedRow()); 176 assertEquals(0, getCurrentFocusedRow());
193 hitEnterAndAssertAppMenuDismissed(); 177 hitEnterAndAssertAppMenuDismissed();
194 } 178 }
195 179
196 /** 180 /**
197 * Test that hitting ENTER on the top item doesn't crash Chrome. 181 * Test that hitting ENTER on the top item doesn't crash Chrome.
198 */ 182 */
199 @Test
200 @SmallTest 183 @SmallTest
201 @Feature({"Browser", "Main"}) 184 @Feature({"Browser", "Main"})
202 public void testKeyboardMenuEnterOnTopItemPortrait() { 185 public void testKeyboardMenuEnterOnTopItemPortrait() {
203 mActivityTestRule.getActivity().setRequestedOrientation( 186 getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PO RTRAIT);
204 ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
205 showAppMenuAndAssertMenuShown(); 187 showAppMenuAndAssertMenuShown();
206 moveToBoundary(true, false); 188 moveToBoundary(true, false);
207 Assert.assertEquals(0, getCurrentFocusedRow()); 189 assertEquals(0, getCurrentFocusedRow());
208 hitEnterAndAssertAppMenuDismissed(); 190 hitEnterAndAssertAppMenuDismissed();
209 } 191 }
210 192
211 /** 193 /**
212 * Test that changing orientation hides the menu. 194 * Test that changing orientation hides the menu.
213 */ 195 */
214 /* 196 /*
215 @SmallTest 197 @SmallTest
216 @Feature({"Browser", "Main"}) 198 @Feature({"Browser", "Main"})
217 */ 199 */
218 @Test
219 @DisabledTest(message = "crbug.com/458193") 200 @DisabledTest(message = "crbug.com/458193")
220 public void testChangingOrientationHidesMenu() { 201 public void testChangingOrientationHidesMenu() {
221 mActivityTestRule.getActivity().setRequestedOrientation( 202 getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LA NDSCAPE);
222 ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
223 showAppMenuAndAssertMenuShown(); 203 showAppMenuAndAssertMenuShown();
224 mActivityTestRule.getActivity().setRequestedOrientation( 204 getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PO RTRAIT);
225 ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
226 CriteriaHelper.pollInstrumentationThread(new Criteria("AppMenu did not d ismiss") { 205 CriteriaHelper.pollInstrumentationThread(new Criteria("AppMenu did not d ismiss") {
227 @Override 206 @Override
228 public boolean isSatisfied() { 207 public boolean isSatisfied() {
229 return !mAppMenuHandler.isAppMenuShowing(); 208 return !mAppMenuHandler.isAppMenuShowing();
230 } 209 }
231 }); 210 });
232 } 211 }
233 212
234 private void showAppMenuAndAssertMenuShown() { 213 private void showAppMenuAndAssertMenuShown() {
235 ThreadUtils.runOnUiThread(new Runnable() { 214 ThreadUtils.runOnUiThread(new Runnable() {
236 @Override 215 @Override
237 public void run() { 216 public void run() {
238 mAppMenuHandler.showAppMenu(null, false); 217 mAppMenuHandler.showAppMenu(null, false);
239 } 218 }
240 }); 219 });
241 CriteriaHelper.pollInstrumentationThread(new Criteria("AppMenu did not s how") { 220 CriteriaHelper.pollInstrumentationThread(new Criteria("AppMenu did not s how") {
242 @Override 221 @Override
243 public boolean isSatisfied() { 222 public boolean isSatisfied() {
244 return mAppMenuHandler.isAppMenuShowing(); 223 return mAppMenuHandler.isAppMenuShowing();
245 } 224 }
246 }); 225 });
247 } 226 }
248 227
249 private void hitEnterAndAssertAppMenuDismissed() { 228 private void hitEnterAndAssertAppMenuDismissed() {
250 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 229 getInstrumentation().waitForIdleSync();
251 pressKey(KeyEvent.KEYCODE_ENTER); 230 pressKey(KeyEvent.KEYCODE_ENTER);
252 CriteriaHelper.pollInstrumentationThread(new Criteria("AppMenu did not d ismiss") { 231 CriteriaHelper.pollInstrumentationThread(new Criteria("AppMenu did not d ismiss") {
253 @Override 232 @Override
254 public boolean isSatisfied() { 233 public boolean isSatisfied() {
255 return !mAppMenuHandler.isAppMenuShowing(); 234 return !mAppMenuHandler.isAppMenuShowing();
256 } 235 }
257 }); 236 });
258 } 237 }
259 238
260 private void moveToBoundary(boolean towardsTop, boolean movePast) { 239 private void moveToBoundary(boolean towardsTop, boolean movePast) {
(...skipping 17 matching lines...) Expand all
278 pressKey(towardsTop ? KeyEvent.KEYCODE_DPAD_UP : KeyEvent.KEYCODE_DP AD_DOWN); 257 pressKey(towardsTop ? KeyEvent.KEYCODE_DPAD_UP : KeyEvent.KEYCODE_DP AD_DOWN);
279 CriteriaHelper.pollInstrumentationThread(Criteria.equals(end, new Ca llable<Integer>() { 258 CriteriaHelper.pollInstrumentationThread(Criteria.equals(end, new Ca llable<Integer>() {
280 @Override 259 @Override
281 public Integer call() { 260 public Integer call() {
282 return getCurrentFocusedRow(); 261 return getCurrentFocusedRow();
283 } 262 }
284 })); 263 }));
285 } 264 }
286 265
287 // The menu should stay open. 266 // The menu should stay open.
288 Assert.assertTrue(mAppMenu.isShowing()); 267 assertTrue(mAppMenu.isShowing());
289 } 268 }
290 269
291 private void pressKey(final int keycode) { 270 private void pressKey(final int keycode) {
292 final View view = mAppMenu.getPopup().getListView(); 271 final View view = mAppMenu.getPopup().getListView();
293 ThreadUtils.runOnUiThread(new Runnable() { 272 ThreadUtils.runOnUiThread(new Runnable() {
294 @Override 273 @Override
295 public void run() { 274 public void run() {
296 view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keycode )); 275 view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keycode ));
297 view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keycode)) ; 276 view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keycode)) ;
298 } 277 }
299 }); 278 });
300 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 279 getInstrumentation().waitForIdleSync();
301 } 280 }
302 281
303 private int getCurrentFocusedRow() { 282 private int getCurrentFocusedRow() {
304 ListPopupWindow popup = mAppMenu.getPopup(); 283 ListPopupWindow popup = mAppMenu.getPopup();
305 if (popup == null || popup.getListView() == null) return ListView.INVALI D_POSITION; 284 if (popup == null || popup.getListView() == null) return ListView.INVALI D_POSITION;
306 ListView listView = popup.getListView(); 285 ListView listView = popup.getListView();
307 return listView.getSelectedItemPosition(); 286 return listView.getSelectedItemPosition();
308 } 287 }
309 288
310 private int getCount() { 289 private int getCount() {
311 ListPopupWindow popup = mAppMenu.getPopup(); 290 ListPopupWindow popup = mAppMenu.getPopup();
312 if (popup == null || popup.getListView() == null) return 0; 291 if (popup == null || popup.getListView() == null) return 0;
313 return popup.getListView().getCount(); 292 return popup.getListView().getCount();
314 } 293 }
315 } 294 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698