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

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

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

Powered by Google App Engine
This is Rietveld 408576698