| Index: chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
|
| diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
|
| index 4e3734b88f73f4716b54d879cfd40dcc4278d21d..7497da40f97f3f1ad8d6b9c146fe28fe99551699 100644
|
| --- a/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
|
| +++ b/chrome/android/junit/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderTest.java
|
| @@ -10,7 +10,6 @@ import android.content.pm.PackageInfo;
|
| import android.content.pm.ResolveInfo;
|
| import android.content.pm.ServiceInfo;
|
| import android.content.pm.Signature;
|
| -import android.net.Uri;
|
|
|
| import org.junit.Test;
|
| import org.junit.runner.RunWith;
|
| @@ -36,6 +35,9 @@ import java.util.Set;
|
| @RunWith(RobolectricTestRunner.class)
|
| @Config(sdk = 21, manifest = Config.NONE)
|
| public class AndroidPaymentAppFinderTest {
|
| + private static final IntentArgumentMatcher sPayIntentArgumentMatcher =
|
| + new IntentArgumentMatcher(new Intent("org.chromium.intent.action.PAY"));
|
| +
|
| public AndroidPaymentAppFinderTest() {}
|
|
|
| /**
|
| @@ -79,11 +81,10 @@ public class AndroidPaymentAppFinderTest {
|
| }
|
|
|
| @Test
|
| - public void testQueryBasicCardsWithoutApps() {
|
| + public void testQueryWithoutApps() {
|
| PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
|
| Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
|
| - ArgumentMatchers.argThat(new IntentArgumentMatcher(
|
| - new Intent(AndroidPaymentAppFinder.ACTION_PAY_BASIC_CARD)))))
|
| + ArgumentMatchers.argThat(sPayIntentArgumentMatcher)))
|
| .thenReturn(new ArrayList<ResolveInfo>());
|
| Set<String> methodNames = new HashSet<>();
|
| methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD);
|
| @@ -93,35 +94,40 @@ public class AndroidPaymentAppFinderTest {
|
| Mockito.mock(PaymentManifestDownloader.class),
|
| Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback);
|
|
|
| + Mockito.verify(packageManagerDelegate, Mockito.never())
|
| + .getStringArrayMetaData(ArgumentMatchers.anyString(), ArgumentMatchers.anyString());
|
| + Mockito.verify(packageManagerDelegate, Mockito.never())
|
| + .getStringMetaData(ArgumentMatchers.anyString(), ArgumentMatchers.anyString());
|
| Mockito.verify(callback, Mockito.never())
|
| .onPaymentAppCreated(Mockito.any(PaymentApp.class));
|
| Mockito.verify(callback).onAllPaymentAppsCreated();
|
| }
|
|
|
| @Test
|
| - public void testQueryBasicCardsWithTwoApps() {
|
| + public void testQueryWithoutMetaData() {
|
| List<ResolveInfo> activities = new ArrayList<>();
|
| ResolveInfo alicePay = new ResolveInfo();
|
| alicePay.activityInfo = new ActivityInfo();
|
| alicePay.activityInfo.packageName = "com.alicepay.app";
|
| alicePay.activityInfo.name = "com.alicepay.app.WebPaymentActivity";
|
| activities.add(alicePay);
|
| - ResolveInfo bobPay = new ResolveInfo();
|
| - bobPay.activityInfo = new ActivityInfo();
|
| - bobPay.activityInfo.packageName = "com.bobpay.app";
|
| - bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity";
|
| - activities.add(bobPay);
|
| +
|
| PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
|
| - Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.class)))
|
| - .thenReturn("A non-empty label");
|
| Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
|
| - ArgumentMatchers.argThat(new IntentArgumentMatcher(
|
| - new Intent(AndroidPaymentAppFinder.ACTION_PAY_BASIC_CARD)))))
|
| + ArgumentMatchers.argThat(sPayIntentArgumentMatcher)))
|
| .thenReturn(activities);
|
| - Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent(
|
| - ArgumentMatchers.argThat(new IntentArgumentMatcher(
|
| - new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_TO_PAY)))))
|
| - .thenReturn(new ArrayList<ResolveInfo>());
|
| + Mockito.when(packageManagerDelegate.getStringArrayMetaData(
|
| + ArgumentMatchers.matches("com.alicepay.app"),
|
| + ArgumentMatchers.matches(
|
| + AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES)))
|
| + .thenReturn(null);
|
| + Mockito.when(packageManagerDelegate.getStringMetaData(
|
| + ArgumentMatchers.matches("com.alicepay.app"),
|
| + ArgumentMatchers.matches(
|
| + AndroidPaymentAppFinder
|
| + .META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME)))
|
| + .thenReturn(null);
|
| +
|
| Set<String> methodNames = new HashSet<>();
|
| methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD);
|
| PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
|
| @@ -130,22 +136,38 @@ public class AndroidPaymentAppFinderTest {
|
| Mockito.mock(PaymentManifestDownloader.class),
|
| Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback);
|
|
|
| - Mockito.verify(callback).onPaymentAppCreated(
|
| - ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.alicepay.app")));
|
| - Mockito.verify(callback).onPaymentAppCreated(
|
| - ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.bobpay.app")));
|
| + Mockito.verify(callback, Mockito.never())
|
| + .onPaymentAppCreated(Mockito.any(PaymentApp.class));
|
| Mockito.verify(callback).onAllPaymentAppsCreated();
|
| }
|
|
|
| @Test
|
| - public void testQueryBobPayWithoutApps() {
|
| - Intent bobPayIntent = new Intent("org.chromium.intent.action.PAY");
|
| - bobPayIntent.setData(Uri.parse("https://bobpay.com"));
|
| + public void testQueryWithUnsupportedPaymentMethod() {
|
| + List<ResolveInfo> activities = new ArrayList<>();
|
| + ResolveInfo alicePay = new ResolveInfo();
|
| + alicePay.activityInfo = new ActivityInfo();
|
| + alicePay.activityInfo.packageName = "com.alicepay.app";
|
| + alicePay.activityInfo.name = "com.alicepay.app.WebPaymentActivity";
|
| + activities.add(alicePay);
|
| +
|
| PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
|
| - Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(bobPayIntent))
|
| - .thenReturn(new ArrayList<ResolveInfo>());
|
| + Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
|
| + ArgumentMatchers.argThat(sPayIntentArgumentMatcher)))
|
| + .thenReturn(activities);
|
| + Mockito.when(packageManagerDelegate.getStringArrayMetaData(
|
| + ArgumentMatchers.matches("com.alicepay.app"),
|
| + ArgumentMatchers.matches(
|
| + AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES)))
|
| + .thenReturn(null);
|
| + Mockito.when(packageManagerDelegate.getStringMetaData(
|
| + ArgumentMatchers.matches("com.alicepay.app"),
|
| + ArgumentMatchers.matches(
|
| + AndroidPaymentAppFinder
|
| + .META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME)))
|
| + .thenReturn("https://bobpay.com");
|
| +
|
| Set<String> methodNames = new HashSet<>();
|
| - methodNames.add("https://bobpay.com");
|
| + methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD);
|
| PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
|
|
|
| AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodNames, false,
|
| @@ -158,6 +180,70 @@ public class AndroidPaymentAppFinderTest {
|
| }
|
|
|
| @Test
|
| + public void testQueryBasicCardsWithTwoApps() {
|
| + List<ResolveInfo> activities = new ArrayList<>();
|
| + ResolveInfo alicePay = new ResolveInfo();
|
| + alicePay.activityInfo = new ActivityInfo();
|
| + alicePay.activityInfo.packageName = "com.alicepay.app";
|
| + alicePay.activityInfo.name = "com.alicepay.app.WebPaymentActivity";
|
| + activities.add(alicePay);
|
| + ResolveInfo bobPay = new ResolveInfo();
|
| + bobPay.activityInfo = new ActivityInfo();
|
| + bobPay.activityInfo.packageName = "com.bobpay.app";
|
| + bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity";
|
| + activities.add(bobPay);
|
| +
|
| + PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
|
| + Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.class)))
|
| + .thenReturn("A non-empty label");
|
| + Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
|
| + ArgumentMatchers.argThat(sPayIntentArgumentMatcher)))
|
| + .thenReturn(activities);
|
| + Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent(
|
| + ArgumentMatchers.argThat(new IntentArgumentMatcher(
|
| + new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_TO_PAY)))))
|
| + .thenReturn(new ArrayList<ResolveInfo>());
|
| + Mockito.when(packageManagerDelegate.getStringArrayMetaData(
|
| + ArgumentMatchers.matches("com.alicepay.app"),
|
| + ArgumentMatchers.matches(
|
| + AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES)))
|
| + .thenReturn(new String[] {
|
| + "https://alicepay.com", AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD});
|
| + Mockito.when(packageManagerDelegate.getStringMetaData(
|
| + ArgumentMatchers.matches("com.alicepay.app"),
|
| + ArgumentMatchers.matches(
|
| + AndroidPaymentAppFinder
|
| + .META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME)))
|
| + .thenReturn("https://alicepay.com");
|
| + Mockito.when(packageManagerDelegate.getStringArrayMetaData(
|
| + ArgumentMatchers.matches("com.bobpay.app"),
|
| + ArgumentMatchers.matches(
|
| + AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES)))
|
| + .thenReturn(new String[] {
|
| + "https://bobpay.com", AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD});
|
| + Mockito.when(packageManagerDelegate.getStringMetaData(
|
| + ArgumentMatchers.matches("com.bobpay.app"),
|
| + ArgumentMatchers.matches(
|
| + AndroidPaymentAppFinder
|
| + .META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME)))
|
| + .thenReturn("https://bobpay.com");
|
| +
|
| + Set<String> methodNames = new HashSet<>();
|
| + methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD);
|
| + PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class);
|
| +
|
| + AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodNames, false,
|
| + Mockito.mock(PaymentManifestDownloader.class),
|
| + Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback);
|
| +
|
| + Mockito.verify(callback).onPaymentAppCreated(
|
| + ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.alicepay.app")));
|
| + Mockito.verify(callback).onPaymentAppCreated(
|
| + ArgumentMatchers.argThat(Matches.paymentAppIdentifier("com.bobpay.app")));
|
| + Mockito.verify(callback).onAllPaymentAppsCreated();
|
| + }
|
| +
|
| + @Test
|
| public void testQueryBobPayWithOneAppThatHasIsReadyToPayService() {
|
| List<ResolveInfo> activities = new ArrayList<>();
|
| ResolveInfo bobPay = new ResolveInfo();
|
| @@ -165,14 +251,25 @@ public class AndroidPaymentAppFinderTest {
|
| bobPay.activityInfo.packageName = "com.bobpay.app";
|
| bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity";
|
| activities.add(bobPay);
|
| - Intent bobPayIntent = new Intent("org.chromium.intent.action.PAY");
|
| - bobPayIntent.setData(Uri.parse("https://bobpay.com"));
|
| +
|
| PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class);
|
| Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.class)))
|
| .thenReturn("A non-empty label");
|
| Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
|
| - ArgumentMatchers.argThat(new IntentArgumentMatcher(bobPayIntent))))
|
| + ArgumentMatchers.argThat(sPayIntentArgumentMatcher)))
|
| .thenReturn(activities);
|
| + Mockito.when(packageManagerDelegate.getStringArrayMetaData(
|
| + ArgumentMatchers.matches("com.bobpay.app"),
|
| + ArgumentMatchers.matches(
|
| + AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES)))
|
| + .thenReturn(new String[] {
|
| + "https://bobpay.com", AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD});
|
| + Mockito.when(packageManagerDelegate.getStringMetaData(
|
| + ArgumentMatchers.matches("com.bobpay.app"),
|
| + ArgumentMatchers.matches(
|
| + AndroidPaymentAppFinder
|
| + .META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME)))
|
| + .thenReturn("https://bobpay.com");
|
|
|
| List<ResolveInfo> services = new ArrayList<>();
|
| ResolveInfo isBobPayReadyToPay = new ResolveInfo();
|
| @@ -182,7 +279,7 @@ public class AndroidPaymentAppFinderTest {
|
| services.add(isBobPayReadyToPay);
|
| Intent isReadyToPayIntent = new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_TO_PAY);
|
| Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent(
|
| - ArgumentMatchers.argThat(new IntentArgumentMatcher(isReadyToPayIntent))))
|
| + ArgumentMatchers.argThat(new IntentArgumentMatcher(isReadyToPayIntent))))
|
| .thenReturn(services);
|
|
|
| PackageInfo bobPayPackageInfo = new PackageInfo();
|
|
|