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.payments; | 5 package org.chromium.chrome.browser.payments; |
6 | 6 |
7 import android.view.View; | |
8 import android.view.ViewGroup; | |
9 import android.widget.CheckBox; | |
10 import android.widget.EditText; | 7 import android.widget.EditText; |
11 import android.widget.Spinner; | 8 import android.widget.Spinner; |
12 import android.widget.TextView; | 9 import android.widget.TextView; |
13 | 10 |
14 import org.chromium.base.ThreadUtils; | 11 import org.chromium.base.ThreadUtils; |
15 import org.chromium.base.test.util.CommandLineFlags; | 12 import org.chromium.base.test.util.CommandLineFlags; |
16 import org.chromium.base.test.util.UrlUtils; | 13 import org.chromium.base.test.util.UrlUtils; |
17 import org.chromium.chrome.R; | 14 import org.chromium.chrome.R; |
18 import org.chromium.chrome.browser.ChromeActivity; | 15 import org.chromium.chrome.browser.ChromeActivity; |
19 import org.chromium.chrome.browser.ChromeSwitches; | 16 import org.chromium.chrome.browser.ChromeSwitches; |
(...skipping 30 matching lines...) Expand all Loading... |
50 protected final PaymentsCallbackHelper<PaymentRequestUI> mReadyToClose; | 47 protected final PaymentsCallbackHelper<PaymentRequestUI> mReadyToClose; |
51 protected final PaymentsCallbackHelper<PaymentRequestUI> mResultReady; | 48 protected final PaymentsCallbackHelper<PaymentRequestUI> mResultReady; |
52 protected final PaymentsCallbackHelper<CardUnmaskPrompt> mReadyForUnmaskInpu
t; | 49 protected final PaymentsCallbackHelper<CardUnmaskPrompt> mReadyForUnmaskInpu
t; |
53 protected final PaymentsCallbackHelper<CardUnmaskPrompt> mReadyToUnmask; | 50 protected final PaymentsCallbackHelper<CardUnmaskPrompt> mReadyToUnmask; |
54 protected final CallbackHelper mReadyToEdit; | 51 protected final CallbackHelper mReadyToEdit; |
55 protected final CallbackHelper mEditorValidationError; | 52 protected final CallbackHelper mEditorValidationError; |
56 protected final CallbackHelper mEditorTextUpdate; | 53 protected final CallbackHelper mEditorTextUpdate; |
57 protected final CallbackHelper mEditorDismissed; | 54 protected final CallbackHelper mEditorDismissed; |
58 protected final CallbackHelper mDismissed; | 55 protected final CallbackHelper mDismissed; |
59 protected final CallbackHelper mUnableToAbort; | 56 protected final CallbackHelper mUnableToAbort; |
60 protected final CallbackHelper mBillingAddressChangeProcessed; | |
61 private final AtomicReference<ContentViewCore> mViewCoreRef; | 57 private final AtomicReference<ContentViewCore> mViewCoreRef; |
62 private final AtomicReference<WebContents> mWebContentsRef; | 58 private final AtomicReference<WebContents> mWebContentsRef; |
63 private final String mTestFilePath; | 59 private final String mTestFilePath; |
64 private PaymentRequestUI mUI; | 60 private PaymentRequestUI mUI; |
65 private CardUnmaskPrompt mCardUnmaskPrompt; | 61 private CardUnmaskPrompt mCardUnmaskPrompt; |
66 | 62 |
67 protected PaymentRequestTestBase(String testFileName) { | 63 protected PaymentRequestTestBase(String testFileName) { |
68 super(ChromeActivity.class); | 64 super(ChromeActivity.class); |
69 mReadyForInput = new PaymentsCallbackHelper<>(); | 65 mReadyForInput = new PaymentsCallbackHelper<>(); |
70 mReadyToPay = new PaymentsCallbackHelper<>(); | 66 mReadyToPay = new PaymentsCallbackHelper<>(); |
71 mReadyToClose = new PaymentsCallbackHelper<>(); | 67 mReadyToClose = new PaymentsCallbackHelper<>(); |
72 mResultReady = new PaymentsCallbackHelper<>(); | 68 mResultReady = new PaymentsCallbackHelper<>(); |
73 mReadyForUnmaskInput = new PaymentsCallbackHelper<>(); | 69 mReadyForUnmaskInput = new PaymentsCallbackHelper<>(); |
74 mReadyToUnmask = new PaymentsCallbackHelper<>(); | 70 mReadyToUnmask = new PaymentsCallbackHelper<>(); |
75 mReadyToEdit = new CallbackHelper(); | 71 mReadyToEdit = new CallbackHelper(); |
76 mEditorValidationError = new CallbackHelper(); | 72 mEditorValidationError = new CallbackHelper(); |
77 mEditorTextUpdate = new CallbackHelper(); | 73 mEditorTextUpdate = new CallbackHelper(); |
78 mEditorDismissed = new CallbackHelper(); | 74 mEditorDismissed = new CallbackHelper(); |
79 mDismissed = new CallbackHelper(); | 75 mDismissed = new CallbackHelper(); |
80 mUnableToAbort = new CallbackHelper(); | 76 mUnableToAbort = new CallbackHelper(); |
81 mBillingAddressChangeProcessed = new CallbackHelper(); | |
82 mViewCoreRef = new AtomicReference<>(); | 77 mViewCoreRef = new AtomicReference<>(); |
83 mWebContentsRef = new AtomicReference<>(); | 78 mWebContentsRef = new AtomicReference<>(); |
84 mTestFilePath = UrlUtils.getIsolatedTestFilePath( | 79 mTestFilePath = UrlUtils.getIsolatedTestFilePath( |
85 String.format("chrome/test/data/android/payments/%s", testFileNa
me)); | 80 String.format("chrome/test/data/android/payments/%s", testFileNa
me)); |
86 } | 81 } |
87 | 82 |
88 @Override | 83 @Override |
89 public void startMainActivity() throws InterruptedException {} | 84 public void startMainActivity() throws InterruptedException {} |
90 | 85 |
91 protected abstract void onMainActivityStarted() | 86 protected abstract void onMainActivityStarted() |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 int callCount = helper.getCallCount(); | 149 int callCount = helper.getCallCount(); |
155 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 150 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
156 @Override | 151 @Override |
157 public void run() { | 152 public void run() { |
158 mUI.getShippingAddressSectionForTest().findViewById(resourceId).
performClick(); | 153 mUI.getShippingAddressSectionForTest().findViewById(resourceId).
performClick(); |
159 } | 154 } |
160 }); | 155 }); |
161 helper.waitForCallback(callCount); | 156 helper.waitForCallback(callCount); |
162 } | 157 } |
163 | 158 |
164 /** Clicks on an element in the "Payment" section of the payments UI. */ | |
165 protected void clickInPaymentMethodAndWait(final int resourceId, CallbackHel
per helper) | |
166 throws InterruptedException, TimeoutException { | |
167 int callCount = helper.getCallCount(); | |
168 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
169 @Override | |
170 public void run() { | |
171 mUI.getPaymentMethodSectionForTest().findViewById(resourceId).pe
rformClick(); | |
172 } | |
173 }); | |
174 helper.waitForCallback(callCount); | |
175 } | |
176 | |
177 /** Clicks on an element in the "Contact Info" section of the payments UI. *
/ | 159 /** Clicks on an element in the "Contact Info" section of the payments UI. *
/ |
178 protected void clickInContactInfoAndWait(final int resourceId, CallbackHelpe
r helper) | 160 protected void clickInContactInfoAndWait(final int resourceId, CallbackHelpe
r helper) |
179 throws InterruptedException, TimeoutException { | 161 throws InterruptedException, TimeoutException { |
180 int callCount = helper.getCallCount(); | 162 int callCount = helper.getCallCount(); |
181 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 163 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
182 @Override | 164 @Override |
183 public void run() { | 165 public void run() { |
184 mUI.getContactDetailsSectionForTest().findViewById(resourceId).p
erformClick(); | 166 mUI.getContactDetailsSectionForTest().findViewById(resourceId).p
erformClick(); |
185 } | 167 } |
186 }); | 168 }); |
187 helper.waitForCallback(callCount); | 169 helper.waitForCallback(callCount); |
188 } | |
189 | |
190 /** Clicks on an element in the editor UI for credit cards. */ | |
191 protected void clickInCardEditorAndWait(final int resourceId, CallbackHelper
helper) | |
192 throws InterruptedException, TimeoutException { | |
193 int callCount = helper.getCallCount(); | |
194 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
195 @Override | |
196 public void run() { | |
197 mUI.getCardEditorView().findViewById(resourceId).performClick(); | |
198 } | |
199 }); | |
200 helper.waitForCallback(callCount); | |
201 } | 170 } |
202 | 171 |
203 /** Clicks on an element in the editor UI. */ | 172 /** Clicks on an element in the editor UI. */ |
204 protected void clickInEditorAndWait(final int resourceId, CallbackHelper hel
per) | 173 protected void clickInEditorAndWait(final int resourceId, CallbackHelper hel
per) |
205 throws InterruptedException, TimeoutException { | 174 throws InterruptedException, TimeoutException { |
206 int callCount = helper.getCallCount(); | 175 int callCount = helper.getCallCount(); |
207 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 176 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
208 @Override | 177 @Override |
209 public void run() { | 178 public void run() { |
210 mUI.getEditorView().findViewById(resourceId).performClick(); | 179 mUI.getEditorView().findViewById(resourceId).performClick(); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 protected int getNumberOfShippingAddressSuggestions() throws ExecutionExcept
ion { | 259 protected int getNumberOfShippingAddressSuggestions() throws ExecutionExcept
ion { |
291 return ThreadUtils.runOnUiThreadBlocking(new Callable<Integer>() { | 260 return ThreadUtils.runOnUiThreadBlocking(new Callable<Integer>() { |
292 @Override | 261 @Override |
293 public Integer call() { | 262 public Integer call() { |
294 return ((OptionSection) mUI.getShippingAddressSectionForTest()) | 263 return ((OptionSection) mUI.getShippingAddressSectionForTest()) |
295 .getNumberOfOptionLabelsForTest(); | 264 .getNumberOfOptionLabelsForTest(); |
296 } | 265 } |
297 }); | 266 }); |
298 } | 267 } |
299 | 268 |
300 /** Selects the spinner value in the editor UI for credit cards. */ | |
301 protected void setSpinnerSelectionsInCardEditorAndWait(final int[] selection
s, | |
302 CallbackHelper helper) throws InterruptedException, TimeoutException
{ | |
303 int callCount = helper.getCallCount(); | |
304 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
305 @Override | |
306 public void run() { | |
307 List<Spinner> fields = mUI.getCardEditorView().getDropdownFields
ForTest(); | |
308 for (int i = 0; i < selections.length && i < fields.size(); i++)
{ | |
309 fields.get(i).setSelection(selections[i]); | |
310 } | |
311 } | |
312 }); | |
313 helper.waitForCallback(callCount); | |
314 } | |
315 | |
316 /** Selects the spinner value in the editor UI. */ | 269 /** Selects the spinner value in the editor UI. */ |
317 protected void setSpinnerSelectionInEditorAndWait(final int selection, Callb
ackHelper helper) | 270 protected void setSpinnerSelectionInEditor(final int selection, CallbackHelp
er helper) |
318 throws InterruptedException, TimeoutException { | 271 throws InterruptedException, TimeoutException { |
319 int callCount = helper.getCallCount(); | 272 int callCount = helper.getCallCount(); |
320 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 273 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
321 @Override | 274 @Override |
322 public void run() { | 275 public void run() { |
323 ((Spinner) mUI.getEditorView().findViewById(R.id.spinner)).setSe
lection(selection); | 276 ((Spinner) mUI.getEditorView().findViewById(R.id.spinner)).setSe
lection(selection); |
324 } | 277 } |
325 }); | 278 }); |
326 helper.waitForCallback(callCount); | 279 helper.waitForCallback(callCount); |
327 } | |
328 | |
329 /** Directly sets the text in the editor UI for credit cards. */ | |
330 protected void setTextInCardEditorAndWait(final String[] values, CallbackHel
per helper) | |
331 throws InterruptedException, TimeoutException { | |
332 int callCount = helper.getCallCount(); | |
333 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
334 @Override | |
335 public void run() { | |
336 ViewGroup contents = (ViewGroup) | |
337 mUI.getCardEditorView().findViewById(R.id.contents); | |
338 assertNotNull(contents); | |
339 for (int i = 0, j = 0; i < contents.getChildCount() && j < value
s.length; i++) { | |
340 View view = contents.getChildAt(i); | |
341 if (view instanceof EditorTextField) { | |
342 ((EditorTextField) view).getEditText().setText(values[j+
+]); | |
343 } | |
344 } | |
345 } | |
346 }); | |
347 helper.waitForCallback(callCount); | |
348 } | 280 } |
349 | 281 |
350 /** Directly sets the text in the editor UI. */ | 282 /** Directly sets the text in the editor UI. */ |
351 protected void setTextInEditorAndWait(final String[] values, CallbackHelper
helper) | 283 protected void setTextInEditorAndWait(final String[] values, CallbackHelper
helper) |
352 throws InterruptedException, TimeoutException { | 284 throws InterruptedException, TimeoutException { |
353 int callCount = helper.getCallCount(); | 285 int callCount = helper.getCallCount(); |
354 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 286 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
355 @Override | 287 @Override |
356 public void run() { | 288 public void run() { |
357 List<EditText> fields = mUI.getEditorView().getEditableTextField
sForTest(); | 289 List<EditorTextField> fields = mUI.getEditorView().getEditorText
Fields(); |
358 for (int i = 0; i < values.length; i++) { | 290 for (int i = 0; i < values.length; i++) { |
359 fields.get(i).setText(values[i]); | 291 fields.get(i).getEditText().setText(values[i]); |
360 } | 292 } |
361 } | 293 } |
362 }); | 294 }); |
363 helper.waitForCallback(callCount); | 295 helper.waitForCallback(callCount); |
364 } | |
365 | |
366 /** Directly sets the checkbox selection in the editor UI for credit cards.
*/ | |
367 protected void selectCheckboxAndWait(final int resourceId, final boolean isC
hecked, | |
368 CallbackHelper helper) throws InterruptedException, TimeoutException
{ | |
369 int callCount = helper.getCallCount(); | |
370 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | |
371 @Override | |
372 public void run() { | |
373 ((CheckBox) mUI.getCardEditorView().findViewById(resourceId)).se
tChecked(isChecked); | |
374 } | |
375 }); | |
376 helper.waitForCallback(callCount); | |
377 } | 296 } |
378 | 297 |
379 /** Directly sets the text in the card unmask UI. */ | 298 /** Directly sets the text in the card unmask UI. */ |
380 protected void setTextInCardUnmaskDialogAndWait(final int resourceId, final
String input, | 299 protected void setTextInCardUnmaskDialogAndWait(final int resourceId, final
String input, |
381 CallbackHelper helper) throws InterruptedException, TimeoutException
{ | 300 CallbackHelper helper) throws InterruptedException, TimeoutException
{ |
382 int callCount = helper.getCallCount(); | 301 int callCount = helper.getCallCount(); |
383 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 302 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
384 @Override | 303 @Override |
385 public void run() { | 304 public void run() { |
386 ((EditText) mCardUnmaskPrompt.getDialogForTest().findViewById(re
sourceId)) | 305 ((EditText) mCardUnmaskPrompt.getDialogForTest().findViewById(re
sourceId)) |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 mDismissed.notifyCalled(); | 393 mDismissed.notifyCalled(); |
475 } | 394 } |
476 | 395 |
477 @Override | 396 @Override |
478 public void onPaymentRequestServiceUnableToAbort() { | 397 public void onPaymentRequestServiceUnableToAbort() { |
479 ThreadUtils.assertOnUiThread(); | 398 ThreadUtils.assertOnUiThread(); |
480 mUnableToAbort.notifyCalled(); | 399 mUnableToAbort.notifyCalled(); |
481 } | 400 } |
482 | 401 |
483 @Override | 402 @Override |
484 public void onPaymentRequestServiceBillingAddressChangeProcessed() { | |
485 ThreadUtils.assertOnUiThread(); | |
486 mBillingAddressChangeProcessed.notifyCalled(); | |
487 } | |
488 | |
489 @Override | |
490 public void onCardUnmaskPromptReadyForInput(CardUnmaskPrompt prompt) { | 403 public void onCardUnmaskPromptReadyForInput(CardUnmaskPrompt prompt) { |
491 ThreadUtils.assertOnUiThread(); | 404 ThreadUtils.assertOnUiThread(); |
492 mReadyForUnmaskInput.notifyCalled(prompt); | 405 mReadyForUnmaskInput.notifyCalled(prompt); |
493 mCardUnmaskPrompt = prompt; | 406 mCardUnmaskPrompt = prompt; |
494 } | 407 } |
495 | 408 |
496 @Override | 409 @Override |
497 public void onCardUnmaskPromptReadyToUnmask(CardUnmaskPrompt prompt) { | 410 public void onCardUnmaskPromptReadyToUnmask(CardUnmaskPrompt prompt) { |
498 ThreadUtils.assertOnUiThread(); | 411 ThreadUtils.assertOnUiThread(); |
499 mReadyToUnmask.notifyCalled(prompt); | 412 mReadyToUnmask.notifyCalled(prompt); |
(...skipping 19 matching lines...) Expand all Loading... |
519 * | 432 * |
520 * @param ui The UI that is ready for input. | 433 * @param ui The UI that is ready for input. |
521 */ | 434 */ |
522 public void notifyCalled(T target) { | 435 public void notifyCalled(T target) { |
523 ThreadUtils.assertOnUiThread(); | 436 ThreadUtils.assertOnUiThread(); |
524 mTarget = target; | 437 mTarget = target; |
525 notifyCalled(); | 438 notifyCalled(); |
526 } | 439 } |
527 } | 440 } |
528 } | 441 } |
OLD | NEW |