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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestTestBase.java

Issue 2165163002: Autofill cards at the bottom of the PaymentRequest UI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Static comparator and faux-parameterized test Created 4 years, 5 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 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.os.Handler;
7 import android.view.View; 8 import android.view.View;
8 import android.view.ViewGroup; 9 import android.view.ViewGroup;
9 import android.widget.CheckBox; 10 import android.widget.CheckBox;
10 import android.widget.EditText; 11 import android.widget.EditText;
11 import android.widget.Spinner; 12 import android.widget.Spinner;
12 import android.widget.TextView; 13 import android.widget.TextView;
13 14
14 import org.chromium.base.ThreadUtils; 15 import org.chromium.base.ThreadUtils;
15 import org.chromium.base.test.util.UrlUtils; 16 import org.chromium.base.test.util.UrlUtils;
16 import org.chromium.chrome.R; 17 import org.chromium.chrome.R;
17 import org.chromium.chrome.browser.ChromeActivity; 18 import org.chromium.chrome.browser.ChromeActivity;
18 import org.chromium.chrome.browser.autofill.CardUnmaskPrompt; 19 import org.chromium.chrome.browser.autofill.CardUnmaskPrompt;
19 import org.chromium.chrome.browser.autofill.CardUnmaskPrompt.CardUnmaskObserverF orTest; 20 import org.chromium.chrome.browser.autofill.CardUnmaskPrompt.CardUnmaskObserverF orTest;
21 import org.chromium.chrome.browser.payments.PaymentAppFactory.PaymentAppFactoryA ddition;
20 import org.chromium.chrome.browser.payments.PaymentRequestImpl.PaymentRequestSer viceObserverForTest; 22 import org.chromium.chrome.browser.payments.PaymentRequestImpl.PaymentRequestSer viceObserverForTest;
21 import org.chromium.chrome.browser.payments.ui.EditorTextField; 23 import org.chromium.chrome.browser.payments.ui.EditorTextField;
22 import org.chromium.chrome.browser.payments.ui.PaymentRequestSection.OptionSecti on; 24 import org.chromium.chrome.browser.payments.ui.PaymentRequestSection.OptionSecti on;
23 import org.chromium.chrome.browser.payments.ui.PaymentRequestUI; 25 import org.chromium.chrome.browser.payments.ui.PaymentRequestUI;
24 import org.chromium.chrome.browser.payments.ui.PaymentRequestUI.PaymentRequestOb serverForTest; 26 import org.chromium.chrome.browser.payments.ui.PaymentRequestUI.PaymentRequestOb serverForTest;
25 import org.chromium.chrome.test.ChromeActivityTestCaseBase; 27 import org.chromium.chrome.test.ChromeActivityTestCaseBase;
26 import org.chromium.content.browser.ContentViewCore; 28 import org.chromium.content.browser.ContentViewCore;
27 import org.chromium.content.browser.test.util.CallbackHelper; 29 import org.chromium.content.browser.test.util.CallbackHelper;
28 import org.chromium.content.browser.test.util.Criteria; 30 import org.chromium.content.browser.test.util.Criteria;
29 import org.chromium.content.browser.test.util.CriteriaHelper; 31 import org.chromium.content.browser.test.util.CriteriaHelper;
30 import org.chromium.content.browser.test.util.DOMUtils; 32 import org.chromium.content.browser.test.util.DOMUtils;
31 import org.chromium.content_public.browser.WebContents; 33 import org.chromium.content_public.browser.WebContents;
34 import org.chromium.mojom.payments.PaymentItem;
35 import org.json.JSONObject;
32 36
37 import java.util.ArrayList;
38 import java.util.HashSet;
33 import java.util.List; 39 import java.util.List;
40 import java.util.Set;
34 import java.util.concurrent.Callable; 41 import java.util.concurrent.Callable;
35 import java.util.concurrent.ExecutionException; 42 import java.util.concurrent.ExecutionException;
36 import java.util.concurrent.TimeoutException; 43 import java.util.concurrent.TimeoutException;
37 import java.util.concurrent.atomic.AtomicReference; 44 import java.util.concurrent.atomic.AtomicReference;
38 45
39 /** 46 /**
40 * A base integration test for payments. 47 * A base integration test for payments.
41 */ 48 */
42 abstract class PaymentRequestTestBase extends ChromeActivityTestCaseBase<ChromeA ctivity> 49 abstract class PaymentRequestTestBase extends ChromeActivityTestCaseBase<ChromeA ctivity>
43 implements PaymentRequestObserverForTest, PaymentRequestServiceObserverF orTest, 50 implements PaymentRequestObserverForTest, PaymentRequestServiceObserverF orTest,
44 CardUnmaskObserverForTest { 51 CardUnmaskObserverForTest {
52 /** Flag for installing a payment app without instruments. */
53 protected static final int NO_INSTRUMENTS = 0;
54
55 /** Flag for installing a payment app with instruments. */
56 protected static final int HAVE_INSTRUMENTS = 1;
57
58 /** Flag for installing a fast payment app. */
59 protected static final int IMMEDIATE_RESPONSE = 0;
60
61 /** Flag for installing a slow payment app. */
62 protected static final int DELAYED_RESPONSE = 1;
63
45 protected final PaymentsCallbackHelper<PaymentRequestUI> mReadyForInput; 64 protected final PaymentsCallbackHelper<PaymentRequestUI> mReadyForInput;
46 protected final PaymentsCallbackHelper<PaymentRequestUI> mReadyToPay; 65 protected final PaymentsCallbackHelper<PaymentRequestUI> mReadyToPay;
47 protected final PaymentsCallbackHelper<PaymentRequestUI> mReadyToClose; 66 protected final PaymentsCallbackHelper<PaymentRequestUI> mReadyToClose;
48 protected final PaymentsCallbackHelper<PaymentRequestUI> mResultReady; 67 protected final PaymentsCallbackHelper<PaymentRequestUI> mResultReady;
49 protected final PaymentsCallbackHelper<CardUnmaskPrompt> mReadyForUnmaskInpu t; 68 protected final PaymentsCallbackHelper<CardUnmaskPrompt> mReadyForUnmaskInpu t;
50 protected final PaymentsCallbackHelper<CardUnmaskPrompt> mReadyToUnmask; 69 protected final PaymentsCallbackHelper<CardUnmaskPrompt> mReadyToUnmask;
51 protected final CallbackHelper mReadyToEdit; 70 protected final CallbackHelper mReadyToEdit;
52 protected final CallbackHelper mEditorValidationError; 71 protected final CallbackHelper mEditorValidationError;
53 protected final CallbackHelper mEditorTextUpdate; 72 protected final CallbackHelper mEditorTextUpdate;
54 protected final CallbackHelper mDismissed; 73 protected final CallbackHelper mDismissed;
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 protected String getAddressSectionLabel() throws ExecutionException { 252 protected String getAddressSectionLabel() throws ExecutionException {
234 return ThreadUtils.runOnUiThreadBlocking(new Callable<String>() { 253 return ThreadUtils.runOnUiThreadBlocking(new Callable<String>() {
235 @Override 254 @Override
236 public String call() { 255 public String call() {
237 return ((TextView) mUI.getShippingSummarySectionForTest().findVi ewById( 256 return ((TextView) mUI.getShippingSummarySectionForTest().findVi ewById(
238 R.id.payments_left_summary_label)).getText().toString(); 257 R.id.payments_left_summary_label)).getText().toString();
239 } 258 }
240 }); 259 });
241 } 260 }
242 261
262 /** Returns the label corresponding to the payment instrument at the specif ied |index|. */
263 protected String getPaymentInstrumentLabel(final int index) throws Execution Exception {
264 return ThreadUtils.runOnUiThreadBlocking(new Callable<String>() {
265 @Override
266 public String call() {
267 return ((OptionSection) mUI.getPaymentMethodSectionForTest())
268 .getOptionLabelsForTest(index).getText().toString();
269 }
270 });
271 }
272
243 /** 273 /**
244 * Returns the label corresponding to the contact detail suggestion at the specified 274 * Returns the label corresponding to the contact detail suggestion at the specified
245 * |suggestionIndex|. 275 * |suggestionIndex|.
246 */ 276 */
247 protected String getContactDetailsSuggestionLabel(final int suggestionIndex) 277 protected String getContactDetailsSuggestionLabel(final int suggestionIndex)
248 throws ExecutionException { 278 throws ExecutionException {
249 assert (suggestionIndex < getNumberOfContactDetailSuggestions());
250
251 return ThreadUtils.runOnUiThreadBlocking(new Callable<String>() { 279 return ThreadUtils.runOnUiThreadBlocking(new Callable<String>() {
252 @Override 280 @Override
253 public String call() { 281 public String call() {
254 return ((OptionSection) mUI.getContactDetailsSectionForTest()) 282 return ((OptionSection) mUI.getContactDetailsSectionForTest())
255 .getOptionLabelsForTest(suggestionIndex).getText().toStr ing(); 283 .getOptionLabelsForTest(suggestionIndex).getText().toStr ing();
256 } 284 }
257 }); 285 });
258 } 286 }
259 287
260 /** 288 /** Returns the the number of payment instruments. */
261 * Returns the the number of contact detail suggestions, 289 protected int getNumberOfPaymentInstruments() throws ExecutionException {
262 */ 290 return ThreadUtils.runOnUiThreadBlocking(new Callable<Integer>() {
291 @Override
292 public Integer call() {
293 return ((OptionSection) mUI.getPaymentMethodSectionForTest())
294 .getNumberOfOptionLabelsForTest();
295 }
296 });
297 }
298
299 /** Returns the the number of contact detail suggestions. */
263 protected int getNumberOfContactDetailSuggestions() throws ExecutionExceptio n { 300 protected int getNumberOfContactDetailSuggestions() throws ExecutionExceptio n {
264 return ThreadUtils.runOnUiThreadBlocking(new Callable<Integer>() { 301 return ThreadUtils.runOnUiThreadBlocking(new Callable<Integer>() {
265 @Override 302 @Override
266 public Integer call() { 303 public Integer call() {
267 return ((OptionSection) mUI.getContactDetailsSectionForTest()) 304 return ((OptionSection) mUI.getContactDetailsSectionForTest())
268 .getNumberOfOptionLabelsForTest(); 305 .getNumberOfOptionLabelsForTest();
269 } 306 }
270 }); 307 });
271 } 308 }
272 309
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 * Called when the UI is ready for input. 558 * Called when the UI is ready for input.
522 * 559 *
523 * @param ui The UI that is ready for input. 560 * @param ui The UI that is ready for input.
524 */ 561 */
525 public void notifyCalled(T target) { 562 public void notifyCalled(T target) {
526 ThreadUtils.assertOnUiThread(); 563 ThreadUtils.assertOnUiThread();
527 mTarget = target; 564 mTarget = target;
528 notifyCalled(); 565 notifyCalled();
529 } 566 }
530 } 567 }
568
569 /**
570 * Installs a payment app for testing.
571 *
572 * @param instrumentPresence Whether the app has any payment instruments. Ei ther NO_INSTRUMENTS
573 * or HAVE_INSTRUMENTS.
574 * @param responseSpeed How quickly the app will respond to "get instru ments" query. Either
575 * IMMEDIATE_RESPONSE or DELAYED_RESPONSE.
576 */
577 protected void installPaymentApp(final int instrumentPresence, final int res ponseSpeed) {
578 PaymentAppFactory.setAdditionalFactory(new PaymentAppFactoryAddition() {
579 @Override
580 public List<PaymentApp> create(WebContents webContents) {
581 List<PaymentApp> additionalApps = new ArrayList<>();
582 additionalApps.add(new BobPay(instrumentPresence, responseSpeed) );
583 return additionalApps;
584 }
585 });
586 }
587
588 /** A payment app implementation for test. */
589 private static class BobPay implements PaymentApp {
590 private final int mInstrumentPresence;
591 private final int mResponseSpeed;
592
593 BobPay(int instrumentPresence, int responseSpeed) {
594 mInstrumentPresence = instrumentPresence;
595 mResponseSpeed = responseSpeed;
596 }
597
598 @Override
599 public void getInstruments(JSONObject details, final InstrumentsCallback
600 instrumentsCallback) {
601 final List<PaymentInstrument> instruments = new ArrayList<>();
602 if (mInstrumentPresence == HAVE_INSTRUMENTS) instruments.add(new Bob PayInstrument());
603 Runnable instrumentsReady = new Runnable() {
604 @Override
605 public void run() {
606 ThreadUtils.assertOnUiThread();
607 instrumentsCallback.onInstrumentsReady(BobPay.this, instrume nts);
608 }
609 };
610 if (mResponseSpeed == IMMEDIATE_RESPONSE) {
611 instrumentsReady.run();
612 } else {
613 new Handler().postDelayed(instrumentsReady, 100);
614 }
615 }
616
617 @Override
618 public Set<String> getSupportedMethodNames() {
619 Set<String> methodNames = new HashSet<>();
620 methodNames.add("https://bobpay.com");
621 return methodNames;
622 }
623
624 @Override
625 public String getIdentifier() {
626 return "https://bobpay.com";
627 }
628 }
629
630 /** A payment instrument implementation for test. */
631 private static class BobPayInstrument extends PaymentInstrument {
632 BobPayInstrument() {
633 super("https://bobpay.com", "Bob Pay", null, NO_ICON);
634 }
635
636 @Override
637 public String getMethodName() {
638 return "https://bobpay.com";
639 }
640
641 @Override
642 public void getDetails(String merchantName, String origin, PaymentItem t otal,
643 List<PaymentItem> cart, JSONObject details, DetailsCallback deta ilsCallback) {
644 detailsCallback.onInstrumentDetailsReady(
645 "https://bobpay.com", "{\"transaction\": 1337}");
646 }
647
648 @Override
649 public void dismiss() {}
650 }
531 } 651 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698