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..b64a4f787869bc208baa4b09e5870feda98c068f 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 |
@@ -6,11 +6,13 @@ package org.chromium.chrome.browser.payments; |
import android.content.Intent; |
import android.content.pm.ActivityInfo; |
+import android.content.pm.ApplicationInfo; |
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 android.content.res.Resources; |
+import android.os.Bundle; |
import org.junit.Test; |
import org.junit.runner.RunWith; |
@@ -36,6 +38,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 +84,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))))) |
+ Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntentWithMetaData( |
+ ArgumentMatchers.argThat(sPayIntentArgumentMatcher))) |
.thenReturn(new ArrayList<ResolveInfo>()); |
Set<String> methodNames = new HashSet<>(); |
methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD); |
@@ -93,35 +97,27 @@ public class AndroidPaymentAppFinderTest { |
Mockito.mock(PaymentManifestDownloader.class), |
Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback); |
+ Mockito.verify(packageManagerDelegate, Mockito.never()) |
+ .getResourcesForApplication(ArgumentMatchers.anyObject()); |
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))))) |
+ Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntentWithMetaData( |
+ 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>()); |
+ |
Set<String> methodNames = new HashSet<>(); |
methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD); |
PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallback.class); |
@@ -130,50 +126,149 @@ 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(packageManagerDelegate, Mockito.never()) |
+ .getResourcesForApplication(ArgumentMatchers.anyObject()); |
+ 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"; |
+ Bundle activityMetaData = new Bundle(); |
+ activityMetaData.putString( |
+ AndroidPaymentAppFinder.META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME, |
+ "https://alicepay.com"); |
+ alicePay.activityInfo.metaData = activityMetaData; |
+ activities.add(alicePay); |
+ |
PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageManagerDelegate.class); |
- Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(bobPayIntent)) |
- .thenReturn(new ArrayList<ResolveInfo>()); |
+ Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntentWithMetaData( |
+ ArgumentMatchers.argThat(sPayIntentArgumentMatcher))) |
+ .thenReturn(activities); |
+ |
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, |
Mockito.mock(PaymentManifestDownloader.class), |
Mockito.mock(PaymentManifestParser.class), packageManagerDelegate, callback); |
+ Mockito.verify(packageManagerDelegate, Mockito.never()) |
+ .getResourcesForApplication(ArgumentMatchers.anyObject()); |
Mockito.verify(callback, Mockito.never()) |
.onPaymentAppCreated(Mockito.any(PaymentApp.class)); |
Mockito.verify(callback).onAllPaymentAppsCreated(); |
} |
@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"; |
+ alicePay.activityInfo.applicationInfo = new ApplicationInfo(); |
+ Bundle alicePayMetaData = new Bundle(); |
+ alicePayMetaData.putString( |
+ AndroidPaymentAppFinder.META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME, |
+ "https://alicepay.com"); |
+ alicePayMetaData.putInt(AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES, 1); |
+ alicePay.activityInfo.metaData = alicePayMetaData; |
+ activities.add(alicePay); |
+ |
+ ResolveInfo bobPay = new ResolveInfo(); |
+ bobPay.activityInfo = new ActivityInfo(); |
+ bobPay.activityInfo.packageName = "com.bobpay.app"; |
+ bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity"; |
+ bobPay.activityInfo.applicationInfo = new ApplicationInfo(); |
+ Bundle bobPayMetaData = new Bundle(); |
+ bobPayMetaData.putString( |
+ AndroidPaymentAppFinder.META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME, |
+ "https://bobpay.com"); |
+ bobPayMetaData.putInt(AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES, 2); |
+ bobPay.activityInfo.metaData = bobPayMetaData; |
+ 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.getActivitiesThatCanRespondToIntentWithMetaData( |
+ 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>()); |
+ |
+ Resources resouces = Mockito.mock(Resources.class); |
+ Mockito.when(resouces.getStringArray(ArgumentMatchers.eq(1))) |
+ .thenReturn(new String[] { |
+ "https://alicepay.com", AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD}); |
+ Mockito.when(resouces.getStringArray(ArgumentMatchers.eq(2))) |
+ .thenReturn(new String[] { |
+ "https://bobpay.com", AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD}); |
+ |
+ Mockito.when(packageManagerDelegate.getResourcesForApplication( |
+ ArgumentMatchers.eq(alicePay.activityInfo.applicationInfo))) |
+ .thenReturn(resouces); |
+ Mockito.when(packageManagerDelegate.getResourcesForApplication( |
+ ArgumentMatchers.eq(bobPay.activityInfo.applicationInfo))) |
+ .thenReturn(resouces); |
+ |
+ 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(); |
bobPay.activityInfo = new ActivityInfo(); |
bobPay.activityInfo.packageName = "com.bobpay.app"; |
bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity"; |
+ bobPay.activityInfo.applicationInfo = new ApplicationInfo(); |
+ Bundle bobPayMetaData = new Bundle(); |
+ bobPayMetaData.putString( |
+ AndroidPaymentAppFinder.META_DATA_NAME_OF_DEFAULT_PAYMENT_METHOD_NAME, |
+ "https://bobpay.com"); |
+ bobPayMetaData.putInt(AndroidPaymentAppFinder.META_DATA_NAME_OF_PAYMENT_METHOD_NAMES, 1); |
+ bobPay.activityInfo.metaData = bobPayMetaData; |
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)))) |
+ Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntentWithMetaData( |
+ ArgumentMatchers.argThat(sPayIntentArgumentMatcher))) |
.thenReturn(activities); |
+ Resources resouces = Mockito.mock(Resources.class); |
+ Mockito.when(resouces.getStringArray(ArgumentMatchers.eq(1))) |
+ .thenReturn(new String[] { |
+ "https://bobpay.com", AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD}); |
+ |
+ Mockito.when(packageManagerDelegate.getResourcesForApplication( |
+ ArgumentMatchers.eq(bobPay.activityInfo.applicationInfo))) |
+ .thenReturn(resouces); |
+ |
List<ResolveInfo> services = new ArrayList<>(); |
ResolveInfo isBobPayReadyToPay = new ResolveInfo(); |
isBobPayReadyToPay.serviceInfo = new ServiceInfo(); |
@@ -182,7 +277,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(); |