OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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; | 5 package org.chromium.chrome.browser; |
6 | 6 |
7 import android.Manifest; | 7 import android.Manifest; |
8 import android.app.Dialog; | 8 import android.app.Dialog; |
9 import android.content.Intent; | 9 import android.content.Intent; |
10 import android.content.pm.PackageManager; | 10 import android.content.pm.PackageManager; |
11 import android.location.LocationManager; | 11 import android.location.LocationManager; |
12 import android.support.test.filters.LargeTest; | 12 import android.support.test.filters.LargeTest; |
13 import android.test.MoreAsserts; | 13 import android.test.MoreAsserts; |
14 import android.view.View; | 14 import android.view.View; |
15 import android.widget.Button; | 15 import android.widget.Button; |
16 import android.widget.ListView; | 16 import android.widget.ListView; |
17 | 17 |
18 import org.junit.After; | |
19 import org.junit.Assert; | |
20 import org.junit.Before; | |
21 import org.junit.Rule; | |
22 import org.junit.Test; | |
23 import org.junit.runner.RunWith; | |
24 | |
18 import org.chromium.base.ThreadUtils; | 25 import org.chromium.base.ThreadUtils; |
26 import org.chromium.base.test.util.CommandLineFlags; | |
19 import org.chromium.base.test.util.RetryOnFailure; | 27 import org.chromium.base.test.util.RetryOnFailure; |
20 import org.chromium.chrome.R; | 28 import org.chromium.chrome.R; |
21 import org.chromium.chrome.test.ChromeActivityTestCaseBase; | 29 import org.chromium.chrome.test.ChromeActivityTestRule; |
30 import org.chromium.chrome.test.ChromeJUnit4ClassRunner; | |
22 import org.chromium.components.location.LocationUtils; | 31 import org.chromium.components.location.LocationUtils; |
23 import org.chromium.components.security_state.ConnectionSecurityLevel; | 32 import org.chromium.components.security_state.ConnectionSecurityLevel; |
24 import org.chromium.content.browser.test.util.Criteria; | 33 import org.chromium.content.browser.test.util.Criteria; |
25 import org.chromium.content.browser.test.util.CriteriaHelper; | 34 import org.chromium.content.browser.test.util.CriteriaHelper; |
26 import org.chromium.content.browser.test.util.TouchCommon; | 35 import org.chromium.content.browser.test.util.TouchCommon; |
27 import org.chromium.ui.base.ActivityWindowAndroid; | 36 import org.chromium.ui.base.ActivityWindowAndroid; |
28 import org.chromium.ui.base.AndroidPermissionDelegate; | 37 import org.chromium.ui.base.AndroidPermissionDelegate; |
29 import org.chromium.ui.base.WindowAndroid; | 38 import org.chromium.ui.base.WindowAndroid; |
30 import org.chromium.ui.base.WindowAndroid.PermissionCallback; | 39 import org.chromium.ui.base.WindowAndroid.PermissionCallback; |
31 import org.chromium.ui.widget.TextViewWithClickableSpans; | 40 import org.chromium.ui.widget.TextViewWithClickableSpans; |
32 | 41 |
33 import java.util.concurrent.Callable; | 42 import java.util.concurrent.Callable; |
34 | 43 |
35 /** | 44 /** |
36 * Tests for the BluetoothChooserDialog class. | 45 * Tests for the BluetoothChooserDialog class. |
37 */ | 46 */ |
47 @RunWith(ChromeJUnit4ClassRunner.class) | |
38 @RetryOnFailure | 48 @RetryOnFailure |
39 public class BluetoothChooserDialogTest extends ChromeActivityTestCaseBase<Chrom eActivity> { | 49 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, |
50 ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG}) | |
51 public class BluetoothChooserDialogTest { | |
40 /** | 52 /** |
41 * Works like the BluetoothChooserDialog class, but records calls to native methods instead of | 53 * Works like the BluetoothChooserDialog class, but records calls to native methods instead of |
42 * calling back to C++. | 54 * calling back to C++. |
43 */ | 55 */ |
56 | |
57 @Rule | |
58 public ChromeActivityTestRule<ChromeActivity> mActivityTestRule = | |
Ted C
2017/04/27 18:05:27
incorrectly inserted between the comment and the c
the real yoland
2017/04/28 02:03:29
sorry, script problem.
Changed
| |
59 new ChromeActivityTestRule<>(ChromeActivity.class); | |
60 | |
44 static class BluetoothChooserDialogWithFakeNatives extends BluetoothChooserD ialog { | 61 static class BluetoothChooserDialogWithFakeNatives extends BluetoothChooserD ialog { |
45 int mFinishedEventType = -1; | 62 int mFinishedEventType = -1; |
46 String mFinishedDeviceId; | 63 String mFinishedDeviceId; |
47 int mRestartSearchCount = 0; | 64 int mRestartSearchCount = 0; |
48 | 65 |
49 BluetoothChooserDialogWithFakeNatives(WindowAndroid windowAndroid, Strin g origin, | 66 BluetoothChooserDialogWithFakeNatives(WindowAndroid windowAndroid, Strin g origin, |
50 int securityLevel, long nativeBluetoothChooserDialogPtr) { | 67 int securityLevel, long nativeBluetoothChooserDialogPtr) { |
51 super(windowAndroid, origin, securityLevel, nativeBluetoothChooserDi alogPtr); | 68 super(windowAndroid, origin, securityLevel, nativeBluetoothChooserDi alogPtr); |
52 } | 69 } |
53 | 70 |
54 @Override | 71 @Override |
55 void nativeOnDialogFinished( | 72 void nativeOnDialogFinished( |
56 long nativeBluetoothChooserAndroid, int eventType, String device Id) { | 73 long nativeBluetoothChooserAndroid, int eventType, String device Id) { |
57 assertEquals(nativeBluetoothChooserAndroid, mNativeBluetoothChooserD ialogPtr); | 74 Assert.assertEquals(nativeBluetoothChooserAndroid, mNativeBluetoothC hooserDialogPtr); |
58 assertEquals(mFinishedEventType, -1); | 75 Assert.assertEquals(mFinishedEventType, -1); |
59 mFinishedEventType = eventType; | 76 mFinishedEventType = eventType; |
60 mFinishedDeviceId = deviceId; | 77 mFinishedDeviceId = deviceId; |
61 // The native code calls closeDialog() when OnDialogFinished is call ed. | 78 // The native code calls closeDialog() when OnDialogFinished is call ed. |
62 closeDialog(); | 79 closeDialog(); |
63 } | 80 } |
64 | 81 |
65 @Override | 82 @Override |
66 void nativeRestartSearch(long nativeBluetoothChooserAndroid) { | 83 void nativeRestartSearch(long nativeBluetoothChooserAndroid) { |
67 assertTrue(mNativeBluetoothChooserDialogPtr != 0); | 84 Assert.assertTrue(mNativeBluetoothChooserDialogPtr != 0); |
68 mRestartSearchCount++; | 85 mRestartSearchCount++; |
69 } | 86 } |
70 | 87 |
71 @Override | 88 @Override |
72 void nativeShowBluetoothOverviewLink(long nativeBluetoothChooserAndroid) { | 89 void nativeShowBluetoothOverviewLink(long nativeBluetoothChooserAndroid) { |
73 // We shouldn't be running native functions if the native class has been destroyed. | 90 // We shouldn't be running native functions if the native class has been destroyed. |
74 assertTrue(mNativeBluetoothChooserDialogPtr != 0); | 91 Assert.assertTrue(mNativeBluetoothChooserDialogPtr != 0); |
75 } | 92 } |
76 | 93 |
77 @Override | 94 @Override |
78 void nativeShowBluetoothAdapterOffLink(long nativeBluetoothChooserAndroi d) { | 95 void nativeShowBluetoothAdapterOffLink(long nativeBluetoothChooserAndroi d) { |
79 // We shouldn't be running native functions if the native class has been destroyed. | 96 // We shouldn't be running native functions if the native class has been destroyed. |
80 assertTrue(mNativeBluetoothChooserDialogPtr != 0); | 97 Assert.assertTrue(mNativeBluetoothChooserDialogPtr != 0); |
81 } | 98 } |
82 | 99 |
83 @Override | 100 @Override |
84 void nativeShowNeedLocationPermissionLink(long nativeBluetoothChooserAnd roid) { | 101 void nativeShowNeedLocationPermissionLink(long nativeBluetoothChooserAnd roid) { |
85 // We shouldn't be running native functions if the native class has been destroyed. | 102 // We shouldn't be running native functions if the native class has been destroyed. |
86 assertTrue(mNativeBluetoothChooserDialogPtr != 0); | 103 Assert.assertTrue(mNativeBluetoothChooserDialogPtr != 0); |
87 } | 104 } |
88 } | 105 } |
89 | 106 |
90 private ActivityWindowAndroid mWindowAndroid; | 107 private ActivityWindowAndroid mWindowAndroid; |
91 private FakeLocationUtils mLocationUtils; | 108 private FakeLocationUtils mLocationUtils; |
92 private BluetoothChooserDialogWithFakeNatives mChooserDialog; | 109 private BluetoothChooserDialogWithFakeNatives mChooserDialog; |
93 | 110 |
94 public BluetoothChooserDialogTest() { | |
95 super(ChromeActivity.class); | |
96 } | |
97 | |
98 // ChromeActivityTestCaseBase: | 111 // ChromeActivityTestCaseBase: |
99 | 112 |
100 @Override | 113 @Before |
101 protected void setUp() throws Exception { | 114 public void setUp() throws Exception { |
102 super.setUp(); | 115 mActivityTestRule.startMainActivityOnBlankPage(); |
103 mLocationUtils = new FakeLocationUtils(); | 116 mLocationUtils = new FakeLocationUtils(); |
104 LocationUtils.setFactory(new LocationUtils.Factory() { | 117 LocationUtils.setFactory(new LocationUtils.Factory() { |
105 @Override | 118 @Override |
106 public LocationUtils create() { | 119 public LocationUtils create() { |
107 return mLocationUtils; | 120 return mLocationUtils; |
108 } | 121 } |
109 }); | 122 }); |
110 mChooserDialog = createDialog(); | 123 mChooserDialog = createDialog(); |
111 } | 124 } |
112 | 125 |
113 @Override | 126 @After |
114 protected void tearDown() throws Exception { | 127 public void tearDown() throws Exception { |
115 LocationUtils.setFactory(null); | 128 LocationUtils.setFactory(null); |
116 super.tearDown(); | |
117 } | |
118 | |
119 @Override | |
120 public void startMainActivity() throws InterruptedException { | |
121 startMainActivityOnBlankPage(); | |
122 } | 129 } |
123 | 130 |
124 private BluetoothChooserDialogWithFakeNatives createDialog() { | 131 private BluetoothChooserDialogWithFakeNatives createDialog() { |
125 return ThreadUtils.runOnUiThreadBlockingNoException( | 132 return ThreadUtils.runOnUiThreadBlockingNoException( |
126 new Callable<BluetoothChooserDialogWithFakeNatives>() { | 133 new Callable<BluetoothChooserDialogWithFakeNatives>() { |
127 @Override | 134 @Override |
128 public BluetoothChooserDialogWithFakeNatives call() { | 135 public BluetoothChooserDialogWithFakeNatives call() { |
129 mWindowAndroid = new ActivityWindowAndroid(getActivity() ); | 136 mWindowAndroid = new ActivityWindowAndroid(mActivityTest Rule.getActivity()); |
130 BluetoothChooserDialogWithFakeNatives dialog = | 137 BluetoothChooserDialogWithFakeNatives dialog = |
131 new BluetoothChooserDialogWithFakeNatives(mWindo wAndroid, | 138 new BluetoothChooserDialogWithFakeNatives(mWindo wAndroid, |
132 "https://origin.example.com/", | 139 "https://origin.example.com/", |
133 ConnectionSecurityLevel.SECURE, 42); | 140 ConnectionSecurityLevel.SECURE, 42); |
134 dialog.show(); | 141 dialog.show(); |
135 return dialog; | 142 return dialog; |
136 } | 143 } |
137 }); | 144 }); |
138 } | 145 } |
139 | 146 |
140 private static void selectItem(final BluetoothChooserDialogWithFakeNatives c hooserDialog, | 147 private static void selectItem(final BluetoothChooserDialogWithFakeNatives c hooserDialog, |
141 int position) { | 148 int position) { |
142 final Dialog dialog = chooserDialog.mItemChooserDialog.getDialogForTesti ng(); | 149 final Dialog dialog = chooserDialog.mItemChooserDialog.getDialogForTesti ng(); |
143 final ListView items = (ListView) dialog.findViewById(R.id.items); | 150 final ListView items = (ListView) dialog.findViewById(R.id.items); |
144 final Button button = (Button) dialog.findViewById(R.id.positive); | 151 final Button button = (Button) dialog.findViewById(R.id.positive); |
145 | 152 |
146 CriteriaHelper.pollUiThread(new Criteria() { | 153 CriteriaHelper.pollUiThread(new Criteria() { |
147 @Override | 154 @Override |
148 public boolean isSatisfied() { | 155 public boolean isSatisfied() { |
149 return items.getChildAt(0) != null; | 156 return items.getChildAt(0) != null; |
150 } | 157 } |
151 }); | 158 }); |
152 | 159 |
153 assertEquals("Not all items have a view; positions may be incorrect.", | 160 Assert.assertEquals("Not all items have a view; positions may be incorre ct.", |
154 items.getChildCount(), items.getAdapter().getCount()); | 161 items.getChildCount(), items.getAdapter().getCount()); |
155 | 162 |
156 // Verify first item selected gets selected. | 163 // Verify first item selected gets selected. |
157 TouchCommon.singleClickView(items.getChildAt(position - 1)); | 164 TouchCommon.singleClickView(items.getChildAt(position - 1)); |
158 | 165 |
159 CriteriaHelper.pollUiThread(new Criteria() { | 166 CriteriaHelper.pollUiThread(new Criteria() { |
160 @Override | 167 @Override |
161 public boolean isSatisfied() { | 168 public boolean isSatisfied() { |
162 return button.isEnabled(); | 169 return button.isEnabled(); |
163 } | 170 } |
(...skipping 10 matching lines...) Expand all Loading... | |
174 } | 181 } |
175 | 182 |
176 /** | 183 /** |
177 * The messages include <*link*> ... </*link*> sections that are used to cre ate clickable spans. | 184 * The messages include <*link*> ... </*link*> sections that are used to cre ate clickable spans. |
178 * For testing the messages, this function returns the raw string without th e tags. | 185 * For testing the messages, this function returns the raw string without th e tags. |
179 */ | 186 */ |
180 private static String removeLinkTags(String message) { | 187 private static String removeLinkTags(String message) { |
181 return message.replaceAll("</?[^>]*link[^>]*>", ""); | 188 return message.replaceAll("</?[^>]*link[^>]*>", ""); |
182 } | 189 } |
183 | 190 |
191 @Test | |
184 @LargeTest | 192 @LargeTest |
185 public void testCancel() { | 193 public void testCancel() { |
186 ItemChooserDialog itemChooser = mChooserDialog.mItemChooserDialog; | 194 ItemChooserDialog itemChooser = mChooserDialog.mItemChooserDialog; |
187 Dialog dialog = itemChooser.getDialogForTesting(); | 195 Dialog dialog = itemChooser.getDialogForTesting(); |
188 assertTrue(dialog.isShowing()); | 196 Assert.assertTrue(dialog.isShowing()); |
189 | 197 |
190 TextViewWithClickableSpans statusView = | 198 TextViewWithClickableSpans statusView = |
191 (TextViewWithClickableSpans) dialog.findViewById(R.id.status); | 199 (TextViewWithClickableSpans) dialog.findViewById(R.id.status); |
192 final ListView items = (ListView) dialog.findViewById(R.id.items); | 200 final ListView items = (ListView) dialog.findViewById(R.id.items); |
193 final Button button = (Button) dialog.findViewById(R.id.positive); | 201 final Button button = (Button) dialog.findViewById(R.id.positive); |
194 | 202 |
195 // Before we add items to the dialog, the 'searching' message should be | 203 // Before we add items to the dialog, the 'searching' message should be |
196 // showing, the Commit button should be disabled and the list view hidde n. | 204 // showing, the Commit button should be disabled and the list view hidde n. |
197 assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_s earching)), | 205 Assert.assertEquals(removeLinkTags(mActivityTestRule.getActivity().getSt ring( |
206 R.string.bluetooth_searching)), | |
198 statusView.getText().toString()); | 207 statusView.getText().toString()); |
199 assertFalse(button.isEnabled()); | 208 Assert.assertFalse(button.isEnabled()); |
200 assertEquals(View.GONE, items.getVisibility()); | 209 Assert.assertEquals(View.GONE, items.getVisibility()); |
201 | 210 |
202 dialog.dismiss(); | 211 dialog.dismiss(); |
203 | 212 |
204 CriteriaHelper.pollUiThread(new Criteria() { | 213 CriteriaHelper.pollUiThread(new Criteria() { |
205 @Override | 214 @Override |
206 public boolean isSatisfied() { | 215 public boolean isSatisfied() { |
207 return mChooserDialog.mFinishedEventType != -1; | 216 return mChooserDialog.mFinishedEventType != -1; |
208 } | 217 } |
209 }); | 218 }); |
210 | 219 |
211 assertEquals(BluetoothChooserDialog.DIALOG_FINISHED_CANCELLED, | 220 Assert.assertEquals(BluetoothChooserDialog.DIALOG_FINISHED_CANCELLED, |
212 mChooserDialog.mFinishedEventType); | 221 mChooserDialog.mFinishedEventType); |
213 assertEquals("", mChooserDialog.mFinishedDeviceId); | 222 Assert.assertEquals("", mChooserDialog.mFinishedDeviceId); |
214 } | 223 } |
215 | 224 |
225 @Test | |
216 @LargeTest | 226 @LargeTest |
217 public void testSelectItem() { | 227 public void testSelectItem() { |
218 Dialog dialog = mChooserDialog.mItemChooserDialog.getDialogForTesting(); | 228 Dialog dialog = mChooserDialog.mItemChooserDialog.getDialogForTesting(); |
219 | 229 |
220 TextViewWithClickableSpans statusView = | 230 TextViewWithClickableSpans statusView = |
221 (TextViewWithClickableSpans) dialog.findViewById(R.id.status); | 231 (TextViewWithClickableSpans) dialog.findViewById(R.id.status); |
222 final View items = dialog.findViewById(R.id.items); | 232 final View items = dialog.findViewById(R.id.items); |
223 final Button button = (Button) dialog.findViewById(R.id.positive); | 233 final Button button = (Button) dialog.findViewById(R.id.positive); |
224 final View progress = dialog.findViewById(R.id.progress); | 234 final View progress = dialog.findViewById(R.id.progress); |
225 | 235 |
(...skipping 12 matching lines...) Expand all Loading... | |
238 // Add connected device with signal strength level 1. | 248 // Add connected device with signal strength level 1. |
239 mChooserDialog.addOrUpdateDevice( | 249 mChooserDialog.addOrUpdateDevice( |
240 "id-4", "Name 4", true /* isGATTConnected */, 1 /* signa lStrengthLevel */); | 250 "id-4", "Name 4", true /* isGATTConnected */, 1 /* signa lStrengthLevel */); |
241 } | 251 } |
242 }); | 252 }); |
243 | 253 |
244 // After adding items to the dialog, the help message should be showing, | 254 // After adding items to the dialog, the help message should be showing, |
245 // the progress spinner should disappear, the Commit button should still | 255 // the progress spinner should disappear, the Commit button should still |
246 // be disabled (since nothing's selected), and the list view should | 256 // be disabled (since nothing's selected), and the list view should |
247 // show. | 257 // show. |
248 assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_s earching)), | 258 Assert.assertEquals(removeLinkTags(mActivityTestRule.getActivity().getSt ring( |
259 R.string.bluetooth_searching)), | |
249 statusView.getText().toString()); | 260 statusView.getText().toString()); |
250 assertFalse(button.isEnabled()); | 261 Assert.assertFalse(button.isEnabled()); |
251 assertEquals(View.VISIBLE, items.getVisibility()); | 262 Assert.assertEquals(View.VISIBLE, items.getVisibility()); |
252 assertEquals(View.GONE, progress.getVisibility()); | 263 Assert.assertEquals(View.GONE, progress.getVisibility()); |
253 | 264 |
254 ItemChooserDialog.ItemAdapter itemAdapter = | 265 ItemChooserDialog.ItemAdapter itemAdapter = |
255 mChooserDialog.mItemChooserDialog.getItemAdapterForTesting(); | 266 mChooserDialog.mItemChooserDialog.getItemAdapterForTesting(); |
256 assertTrue(itemAdapter.getItem(0).hasSameContents( | 267 Assert.assertTrue(itemAdapter.getItem(0).hasSameContents( |
257 "id-1", "Name 1", null /* icon */, null /* iconDescription */)); | 268 "id-1", "Name 1", null /* icon */, null /* iconDescription */)); |
258 assertTrue(itemAdapter.getItem(1).hasSameContents("id-2", "Name 2", | 269 Assert.assertTrue(itemAdapter.getItem(1).hasSameContents("id-2", "Name 2 ", |
259 mChooserDialog.mConnectedIcon, mChooserDialog.mConnectedIconDesc ription)); | 270 mChooserDialog.mConnectedIcon, mChooserDialog.mConnectedIconDesc ription)); |
260 assertTrue(itemAdapter.getItem(2).hasSameContents("id-3", "Name 3", | 271 Assert.assertTrue(itemAdapter.getItem(2).hasSameContents("id-3", "Name 3 ", |
261 mChooserDialog.mSignalStrengthLevelIcon[1], | 272 mChooserDialog.mSignalStrengthLevelIcon[1], |
262 getActivity().getResources().getQuantityString( | 273 mActivityTestRule.getActivity().getResources().getQuantityString ( |
263 R.plurals.signal_strength_level_n_bars, 1, 1))); | 274 R.plurals.signal_strength_level_n_bars, 1, 1))); |
264 // We show the connected icon even if the device has a signal strength. | 275 // We show the connected icon even if the device has a signal strength. |
265 assertTrue(itemAdapter.getItem(3).hasSameContents("id-4", "Name 4", | 276 Assert.assertTrue(itemAdapter.getItem(3).hasSameContents("id-4", "Name 4 ", |
266 mChooserDialog.mConnectedIcon, mChooserDialog.mConnectedIconDesc ription)); | 277 mChooserDialog.mConnectedIcon, mChooserDialog.mConnectedIconDesc ription)); |
267 | 278 |
268 selectItem(mChooserDialog, 2); | 279 selectItem(mChooserDialog, 2); |
269 | 280 |
270 assertEquals( | 281 Assert.assertEquals( |
271 BluetoothChooserDialog.DIALOG_FINISHED_SELECTED, mChooserDialog. mFinishedEventType); | 282 BluetoothChooserDialog.DIALOG_FINISHED_SELECTED, mChooserDialog. mFinishedEventType); |
272 assertEquals("id-2", mChooserDialog.mFinishedDeviceId); | 283 Assert.assertEquals("id-2", mChooserDialog.mFinishedDeviceId); |
273 } | 284 } |
274 | 285 |
286 @Test | |
275 @LargeTest | 287 @LargeTest |
276 public void testNoLocationPermission() { | 288 public void testNoLocationPermission() { |
277 ItemChooserDialog itemChooser = mChooserDialog.mItemChooserDialog; | 289 ItemChooserDialog itemChooser = mChooserDialog.mItemChooserDialog; |
278 Dialog dialog = itemChooser.getDialogForTesting(); | 290 Dialog dialog = itemChooser.getDialogForTesting(); |
279 assertTrue(dialog.isShowing()); | 291 Assert.assertTrue(dialog.isShowing()); |
280 | 292 |
281 final TextViewWithClickableSpans statusView = | 293 final TextViewWithClickableSpans statusView = |
282 (TextViewWithClickableSpans) dialog.findViewById(R.id.status); | 294 (TextViewWithClickableSpans) dialog.findViewById(R.id.status); |
283 final TextViewWithClickableSpans errorView = | 295 final TextViewWithClickableSpans errorView = |
284 (TextViewWithClickableSpans) dialog.findViewById(R.id.not_found_ message); | 296 (TextViewWithClickableSpans) dialog.findViewById(R.id.not_found_ message); |
285 final View items = dialog.findViewById(R.id.items); | 297 final View items = dialog.findViewById(R.id.items); |
286 final Button button = (Button) dialog.findViewById(R.id.positive); | 298 final Button button = (Button) dialog.findViewById(R.id.positive); |
287 final View progress = dialog.findViewById(R.id.progress); | 299 final View progress = dialog.findViewById(R.id.progress); |
288 | 300 |
289 final TestAndroidPermissionDelegate permissionDelegate = | 301 final TestAndroidPermissionDelegate permissionDelegate = |
290 new TestAndroidPermissionDelegate(dialog); | 302 new TestAndroidPermissionDelegate(dialog); |
291 mWindowAndroid.setAndroidPermissionDelegate(permissionDelegate); | 303 mWindowAndroid.setAndroidPermissionDelegate(permissionDelegate); |
292 | 304 |
293 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 305 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
294 @Override | 306 @Override |
295 public void run() { | 307 public void run() { |
296 mChooserDialog.notifyDiscoveryState( | 308 mChooserDialog.notifyDiscoveryState( |
297 BluetoothChooserDialog.DISCOVERY_FAILED_TO_START); | 309 BluetoothChooserDialog.DISCOVERY_FAILED_TO_START); |
298 } | 310 } |
299 }); | 311 }); |
300 | 312 |
301 assertEquals(removeLinkTags( | 313 Assert.assertEquals(removeLinkTags(mActivityTestRule.getActivity().getSt ring( |
302 getActivity().getString(R.string.bluetooth_need_loc ation_permission)), | 314 R.string.bluetooth_need_location_permission) ), |
303 errorView.getText().toString()); | 315 errorView.getText().toString()); |
304 assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_a dapter_off_help)), | 316 Assert.assertEquals(removeLinkTags(mActivityTestRule.getActivity().getSt ring( |
317 R.string.bluetooth_adapter_off_help)), | |
305 statusView.getText().toString()); | 318 statusView.getText().toString()); |
306 assertFalse(button.isEnabled()); | 319 Assert.assertFalse(button.isEnabled()); |
307 assertEquals(View.VISIBLE, errorView.getVisibility()); | 320 Assert.assertEquals(View.VISIBLE, errorView.getVisibility()); |
308 assertEquals(View.GONE, items.getVisibility()); | 321 Assert.assertEquals(View.GONE, items.getVisibility()); |
309 assertEquals(View.GONE, progress.getVisibility()); | 322 Assert.assertEquals(View.GONE, progress.getVisibility()); |
310 | 323 |
311 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 324 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
312 @Override | 325 @Override |
313 public void run() { | 326 public void run() { |
314 errorView.getClickableSpans()[0].onClick(errorView); | 327 errorView.getClickableSpans()[0].onClick(errorView); |
315 } | 328 } |
316 }); | 329 }); |
317 | 330 |
318 // Permission was requested. | 331 // Permission was requested. |
319 MoreAsserts.assertEquals(permissionDelegate.mPermissionsRequested, | 332 MoreAsserts.assertEquals(permissionDelegate.mPermissionsRequested, |
320 new String[] {Manifest.permission.ACCESS_COARSE_LOCATION}); | 333 new String[] {Manifest.permission.ACCESS_COARSE_LOCATION}); |
321 assertNotNull(permissionDelegate.mCallback); | 334 Assert.assertNotNull(permissionDelegate.mCallback); |
322 // Grant permission. | 335 // Grant permission. |
323 mLocationUtils.mLocationGranted = true; | 336 mLocationUtils.mLocationGranted = true; |
324 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 337 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
325 @Override | 338 @Override |
326 public void run() { | 339 public void run() { |
327 permissionDelegate.mCallback.onRequestPermissionsResult( | 340 permissionDelegate.mCallback.onRequestPermissionsResult( |
328 new String[] {Manifest.permission.ACCESS_COARSE_LOCATION }, | 341 new String[] {Manifest.permission.ACCESS_COARSE_LOCATION }, |
329 new int[] {PackageManager.PERMISSION_GRANTED}); | 342 new int[] {PackageManager.PERMISSION_GRANTED}); |
330 } | 343 } |
331 }); | 344 }); |
332 | 345 |
333 assertEquals(1, mChooserDialog.mRestartSearchCount); | 346 Assert.assertEquals(1, mChooserDialog.mRestartSearchCount); |
334 assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_s earching)), | 347 Assert.assertEquals(removeLinkTags(mActivityTestRule.getActivity().getSt ring( |
348 R.string.bluetooth_searching)), | |
335 statusView.getText().toString()); | 349 statusView.getText().toString()); |
336 mChooserDialog.closeDialog(); | 350 mChooserDialog.closeDialog(); |
337 } | 351 } |
338 | 352 |
353 @Test | |
339 @LargeTest | 354 @LargeTest |
340 public void testNoLocationServices() { | 355 public void testNoLocationServices() { |
341 ItemChooserDialog itemChooser = mChooserDialog.mItemChooserDialog; | 356 ItemChooserDialog itemChooser = mChooserDialog.mItemChooserDialog; |
342 Dialog dialog = itemChooser.getDialogForTesting(); | 357 Dialog dialog = itemChooser.getDialogForTesting(); |
343 assertTrue(dialog.isShowing()); | 358 Assert.assertTrue(dialog.isShowing()); |
344 | 359 |
345 final TextViewWithClickableSpans statusView = | 360 final TextViewWithClickableSpans statusView = |
346 (TextViewWithClickableSpans) dialog.findViewById(R.id.status); | 361 (TextViewWithClickableSpans) dialog.findViewById(R.id.status); |
347 final TextViewWithClickableSpans errorView = | 362 final TextViewWithClickableSpans errorView = |
348 (TextViewWithClickableSpans) dialog.findViewById(R.id.not_found_ message); | 363 (TextViewWithClickableSpans) dialog.findViewById(R.id.not_found_ message); |
349 final View items = dialog.findViewById(R.id.items); | 364 final View items = dialog.findViewById(R.id.items); |
350 final Button button = (Button) dialog.findViewById(R.id.positive); | 365 final Button button = (Button) dialog.findViewById(R.id.positive); |
351 final View progress = dialog.findViewById(R.id.progress); | 366 final View progress = dialog.findViewById(R.id.progress); |
352 | 367 |
353 final TestAndroidPermissionDelegate permissionDelegate = | 368 final TestAndroidPermissionDelegate permissionDelegate = |
354 new TestAndroidPermissionDelegate(dialog); | 369 new TestAndroidPermissionDelegate(dialog); |
355 mWindowAndroid.setAndroidPermissionDelegate(permissionDelegate); | 370 mWindowAndroid.setAndroidPermissionDelegate(permissionDelegate); |
356 | 371 |
357 // Grant permissions, and turn off location services. | 372 // Grant permissions, and turn off location services. |
358 mLocationUtils.mLocationGranted = true; | 373 mLocationUtils.mLocationGranted = true; |
359 mLocationUtils.mSystemLocationSettingsEnabled = false; | 374 mLocationUtils.mSystemLocationSettingsEnabled = false; |
360 | 375 |
361 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 376 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
362 @Override | 377 @Override |
363 public void run() { | 378 public void run() { |
364 mChooserDialog.notifyDiscoveryState( | 379 mChooserDialog.notifyDiscoveryState( |
365 BluetoothChooserDialog.DISCOVERY_FAILED_TO_START); | 380 BluetoothChooserDialog.DISCOVERY_FAILED_TO_START); |
366 } | 381 } |
367 }); | 382 }); |
368 | 383 |
369 assertEquals(removeLinkTags( | 384 Assert.assertEquals(removeLinkTags(mActivityTestRule.getActivity().getSt ring( |
370 getActivity().getString(R.string.bluetooth_need_loc ation_services_on)), | 385 R.string.bluetooth_need_location_services_on )), |
371 errorView.getText().toString()); | 386 errorView.getText().toString()); |
372 assertEquals(removeLinkTags(getActivity().getString( | 387 Assert.assertEquals(removeLinkTags(mActivityTestRule.getActivity().getSt ring( |
373 R.string.bluetooth_need_location_permission_help)), | 388 R.string.bluetooth_need_location_permission_ help)), |
374 statusView.getText().toString()); | 389 statusView.getText().toString()); |
375 assertFalse(button.isEnabled()); | 390 Assert.assertFalse(button.isEnabled()); |
376 assertEquals(View.VISIBLE, errorView.getVisibility()); | 391 Assert.assertEquals(View.VISIBLE, errorView.getVisibility()); |
377 assertEquals(View.GONE, items.getVisibility()); | 392 Assert.assertEquals(View.GONE, items.getVisibility()); |
378 assertEquals(View.GONE, progress.getVisibility()); | 393 Assert.assertEquals(View.GONE, progress.getVisibility()); |
379 | 394 |
380 // Turn on Location Services. | 395 // Turn on Location Services. |
381 mLocationUtils.mSystemLocationSettingsEnabled = true; | 396 mLocationUtils.mSystemLocationSettingsEnabled = true; |
382 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 397 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
383 @Override | 398 @Override |
384 public void run() { | 399 public void run() { |
385 mChooserDialog.mLocationModeBroadcastReceiver.onReceive( | 400 mChooserDialog.mLocationModeBroadcastReceiver.onReceive( |
386 getActivity(), new Intent(LocationManager.MODE_CHANGED_A CTION)); | 401 mActivityTestRule.getActivity(), |
402 new Intent(LocationManager.MODE_CHANGED_ACTION)); | |
387 } | 403 } |
388 }); | 404 }); |
389 | 405 |
390 assertEquals(1, mChooserDialog.mRestartSearchCount); | 406 Assert.assertEquals(1, mChooserDialog.mRestartSearchCount); |
391 assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_s earching)), | 407 Assert.assertEquals(removeLinkTags(mActivityTestRule.getActivity().getSt ring( |
408 R.string.bluetooth_searching)), | |
392 statusView.getText().toString()); | 409 statusView.getText().toString()); |
393 | 410 |
394 mChooserDialog.closeDialog(); | 411 mChooserDialog.closeDialog(); |
395 } | 412 } |
396 | 413 |
397 // TODO(jyasskin): Test when the user denies Chrome the ability to ask for p ermission. | 414 // TODO(jyasskin): Test when the user denies Chrome the ability to ask for p ermission. |
398 | 415 |
416 @Test | |
399 @LargeTest | 417 @LargeTest |
400 public void testTurnOnAdapter() { | 418 public void testTurnOnAdapter() { |
401 final ItemChooserDialog itemChooser = mChooserDialog.mItemChooserDialog; | 419 final ItemChooserDialog itemChooser = mChooserDialog.mItemChooserDialog; |
402 Dialog dialog = itemChooser.getDialogForTesting(); | 420 Dialog dialog = itemChooser.getDialogForTesting(); |
403 assertTrue(dialog.isShowing()); | 421 Assert.assertTrue(dialog.isShowing()); |
404 | 422 |
405 final TextViewWithClickableSpans statusView = | 423 final TextViewWithClickableSpans statusView = |
406 (TextViewWithClickableSpans) dialog.findViewById(R.id.status); | 424 (TextViewWithClickableSpans) dialog.findViewById(R.id.status); |
407 final TextViewWithClickableSpans errorView = | 425 final TextViewWithClickableSpans errorView = |
408 (TextViewWithClickableSpans) dialog.findViewById(R.id.not_found_ message); | 426 (TextViewWithClickableSpans) dialog.findViewById(R.id.not_found_ message); |
409 final View items = dialog.findViewById(R.id.items); | 427 final View items = dialog.findViewById(R.id.items); |
410 final Button button = (Button) dialog.findViewById(R.id.positive); | 428 final Button button = (Button) dialog.findViewById(R.id.positive); |
411 final View progress = dialog.findViewById(R.id.progress); | 429 final View progress = dialog.findViewById(R.id.progress); |
412 | 430 |
413 // Turn off adapter. | 431 // Turn off adapter. |
414 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 432 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
415 @Override | 433 @Override |
416 public void run() { | 434 public void run() { |
417 mChooserDialog.notifyAdapterTurnedOff(); | 435 mChooserDialog.notifyAdapterTurnedOff(); |
418 } | 436 } |
419 }); | 437 }); |
420 | 438 |
421 assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_a dapter_off)), | 439 Assert.assertEquals(removeLinkTags(mActivityTestRule.getActivity().getSt ring( |
440 R.string.bluetooth_adapter_off)), | |
422 errorView.getText().toString()); | 441 errorView.getText().toString()); |
423 assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_a dapter_off_help)), | 442 Assert.assertEquals(removeLinkTags(mActivityTestRule.getActivity().getSt ring( |
443 R.string.bluetooth_adapter_off_help)), | |
424 statusView.getText().toString()); | 444 statusView.getText().toString()); |
425 assertFalse(button.isEnabled()); | 445 Assert.assertFalse(button.isEnabled()); |
426 assertEquals(View.VISIBLE, errorView.getVisibility()); | 446 Assert.assertEquals(View.VISIBLE, errorView.getVisibility()); |
427 assertEquals(View.GONE, items.getVisibility()); | 447 Assert.assertEquals(View.GONE, items.getVisibility()); |
428 assertEquals(View.GONE, progress.getVisibility()); | 448 Assert.assertEquals(View.GONE, progress.getVisibility()); |
429 | 449 |
430 // Turn on adapter. | 450 // Turn on adapter. |
431 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 451 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
432 @Override | 452 @Override |
433 public void run() { | 453 public void run() { |
434 itemChooser.signalInitializingAdapter(); | 454 itemChooser.signalInitializingAdapter(); |
435 } | 455 } |
436 }); | 456 }); |
437 | 457 |
438 assertEquals(View.GONE, errorView.getVisibility()); | 458 Assert.assertEquals(View.GONE, errorView.getVisibility()); |
439 assertEquals(View.GONE, items.getVisibility()); | 459 Assert.assertEquals(View.GONE, items.getVisibility()); |
440 assertEquals(View.VISIBLE, progress.getVisibility()); | 460 Assert.assertEquals(View.VISIBLE, progress.getVisibility()); |
441 | 461 |
442 mChooserDialog.closeDialog(); | 462 mChooserDialog.closeDialog(); |
443 } | 463 } |
444 | 464 |
445 private static class TestAndroidPermissionDelegate implements AndroidPermiss ionDelegate { | 465 private static class TestAndroidPermissionDelegate implements AndroidPermiss ionDelegate { |
446 Dialog mDialog = null; | 466 Dialog mDialog = null; |
447 PermissionCallback mCallback = null; | 467 PermissionCallback mCallback = null; |
448 String[] mPermissionsRequested = null; | 468 String[] mPermissionsRequested = null; |
449 | 469 |
450 public TestAndroidPermissionDelegate(Dialog dialog) { | 470 public TestAndroidPermissionDelegate(Dialog dialog) { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
487 } | 507 } |
488 | 508 |
489 public boolean mSystemLocationSettingsEnabled = true; | 509 public boolean mSystemLocationSettingsEnabled = true; |
490 | 510 |
491 @Override | 511 @Override |
492 public boolean isSystemLocationSettingEnabled() { | 512 public boolean isSystemLocationSettingEnabled() { |
493 return mSystemLocationSettingsEnabled; | 513 return mSystemLocationSettingsEnabled; |
494 } | 514 } |
495 } | 515 } |
496 } | 516 } |
OLD | NEW |