OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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.content.Intent; | 7 import android.content.Intent; |
8 import android.content.pm.ActivityInfo; | 8 import android.content.pm.ActivityInfo; |
9 import android.content.pm.PackageInfo; | 9 import android.content.pm.PackageInfo; |
10 import android.content.pm.ResolveInfo; | 10 import android.content.pm.ResolveInfo; |
(...skipping 20 matching lines...) Expand all Loading... |
31 import java.util.HashSet; | 31 import java.util.HashSet; |
32 import java.util.List; | 32 import java.util.List; |
33 import java.util.Set; | 33 import java.util.Set; |
34 | 34 |
35 /** Tests for the native Android payment app finder. */ | 35 /** Tests for the native Android payment app finder. */ |
36 @RunWith(RobolectricTestRunner.class) | 36 @RunWith(RobolectricTestRunner.class) |
37 @Config(sdk = 21, manifest = Config.NONE) | 37 @Config(sdk = 21, manifest = Config.NONE) |
38 public class AndroidPaymentAppFinderTest { | 38 public class AndroidPaymentAppFinderTest { |
39 public AndroidPaymentAppFinderTest() {} | 39 public AndroidPaymentAppFinderTest() {} |
40 | 40 |
| 41 /** |
| 42 * Argument matcher that matches Intents using |filterEquals| method. |
| 43 */ |
| 44 private static class IntentArgumentMatcher implements ArgumentMatcher<Intent
> { |
| 45 |
| 46 private final Intent mIntent; |
| 47 |
| 48 public IntentArgumentMatcher(Intent intent) { |
| 49 mIntent = intent; |
| 50 } |
| 51 |
| 52 @Override |
| 53 public boolean matches(Intent other) { |
| 54 return mIntent.filterEquals(other); |
| 55 } |
| 56 |
| 57 @Override |
| 58 public String toString() { |
| 59 return mIntent.toString(); |
| 60 } |
| 61 } |
| 62 |
41 @Test | 63 @Test |
42 public void testNoValidPaymentMethodNames() { | 64 public void testNoValidPaymentMethodNames() { |
43 Set<String> methodNames = new HashSet<>(); | 65 Set<String> methodNames = new HashSet<>(); |
44 methodNames.add("unknown-payment-method-name"); | 66 methodNames.add("unknown-payment-method-name"); |
45 methodNames.add("http://not.secure.payment.method.name.com"); | 67 methodNames.add("http://not.secure.payment.method.name.com"); |
46 methodNames.add("https://"); // Invalid URI. | 68 methodNames.add("https://"); // Invalid URI. |
47 PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallb
ack.class); | 69 PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallb
ack.class); |
48 | 70 |
49 AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodName
s, false, | 71 AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodName
s, false, |
50 Mockito.mock(PaymentManifestDownloader.class), | 72 Mockito.mock(PaymentManifestDownloader.class), |
51 Mockito.mock(PaymentManifestParser.class), | 73 Mockito.mock(PaymentManifestParser.class), |
52 Mockito.mock(PackageManagerDelegate.class), callback); | 74 Mockito.mock(PackageManagerDelegate.class), callback); |
53 | 75 |
54 Mockito.verify(callback, Mockito.never()) | 76 Mockito.verify(callback, Mockito.never()) |
55 .onPaymentAppCreated(Mockito.any(PaymentApp.class)); | 77 .onPaymentAppCreated(Mockito.any(PaymentApp.class)); |
56 Mockito.verify(callback).onAllPaymentAppsCreated(); | 78 Mockito.verify(callback).onAllPaymentAppsCreated(); |
57 } | 79 } |
58 | 80 |
59 @Test | 81 @Test |
60 public void testQueryBasicCardsWithoutApps() { | 82 public void testQueryBasicCardsWithoutApps() { |
61 PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageMana
gerDelegate.class); | 83 PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageMana
gerDelegate.class); |
62 Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent( | 84 Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent( |
63 new Intent(AndroidPaymentAppFinder.ACTION_PAY_BASIC
_CARD))) | 85 ArgumentMatchers.argThat(new IntentArgumentMatcher( |
| 86 new Intent(AndroidPaymentAppFinder.ACTION_PAY_BASIC_CARD
))))) |
64 .thenReturn(new ArrayList<ResolveInfo>()); | 87 .thenReturn(new ArrayList<ResolveInfo>()); |
65 Set<String> methodNames = new HashSet<>(); | 88 Set<String> methodNames = new HashSet<>(); |
66 methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD); | 89 methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD); |
67 PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallb
ack.class); | 90 PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallb
ack.class); |
68 | 91 |
69 AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodName
s, false, | 92 AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodName
s, false, |
70 Mockito.mock(PaymentManifestDownloader.class), | 93 Mockito.mock(PaymentManifestDownloader.class), |
71 Mockito.mock(PaymentManifestParser.class), packageManagerDelegat
e, callback); | 94 Mockito.mock(PaymentManifestParser.class), packageManagerDelegat
e, callback); |
72 | 95 |
73 Mockito.verify(callback, Mockito.never()) | 96 Mockito.verify(callback, Mockito.never()) |
(...skipping 11 matching lines...) Expand all Loading... |
85 activities.add(alicePay); | 108 activities.add(alicePay); |
86 ResolveInfo bobPay = new ResolveInfo(); | 109 ResolveInfo bobPay = new ResolveInfo(); |
87 bobPay.activityInfo = new ActivityInfo(); | 110 bobPay.activityInfo = new ActivityInfo(); |
88 bobPay.activityInfo.packageName = "com.bobpay.app"; | 111 bobPay.activityInfo.packageName = "com.bobpay.app"; |
89 bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity"; | 112 bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity"; |
90 activities.add(bobPay); | 113 activities.add(bobPay); |
91 PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageMana
gerDelegate.class); | 114 PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageMana
gerDelegate.class); |
92 Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.
class))) | 115 Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.
class))) |
93 .thenReturn("A non-empty label"); | 116 .thenReturn("A non-empty label"); |
94 Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent( | 117 Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent( |
95 new Intent(AndroidPaymentAppFinder.ACTION_PAY_BASIC
_CARD))) | 118 ArgumentMatchers.argThat(new IntentArgumentMatcher( |
| 119 new Intent(AndroidPaymentAppFinder.ACTION_PAY_BASIC_CARD
))))) |
96 .thenReturn(activities); | 120 .thenReturn(activities); |
97 Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent( | 121 Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent( |
98 new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_
TO_PAY))) | 122 ArgumentMatchers.argThat(new IntentArgumentMatcher( |
| 123 new Intent(AndroidPaymentAppFinder.ACTION_IS_READY_TO_PA
Y))))) |
99 .thenReturn(new ArrayList<ResolveInfo>()); | 124 .thenReturn(new ArrayList<ResolveInfo>()); |
100 Set<String> methodNames = new HashSet<>(); | 125 Set<String> methodNames = new HashSet<>(); |
101 methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD); | 126 methodNames.add(AndroidPaymentAppFinder.BASIC_CARD_PAYMENT_METHOD); |
102 PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallb
ack.class); | 127 PaymentAppCreatedCallback callback = Mockito.mock(PaymentAppCreatedCallb
ack.class); |
103 | 128 |
104 AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodName
s, false, | 129 AndroidPaymentAppFinder.find(Mockito.mock(WebContents.class), methodName
s, false, |
105 Mockito.mock(PaymentManifestDownloader.class), | 130 Mockito.mock(PaymentManifestDownloader.class), |
106 Mockito.mock(PaymentManifestParser.class), packageManagerDelegat
e, callback); | 131 Mockito.mock(PaymentManifestParser.class), packageManagerDelegat
e, callback); |
107 | 132 |
108 Mockito.verify(callback).onPaymentAppCreated( | 133 Mockito.verify(callback).onPaymentAppCreated( |
(...skipping 29 matching lines...) Expand all Loading... |
138 ResolveInfo bobPay = new ResolveInfo(); | 163 ResolveInfo bobPay = new ResolveInfo(); |
139 bobPay.activityInfo = new ActivityInfo(); | 164 bobPay.activityInfo = new ActivityInfo(); |
140 bobPay.activityInfo.packageName = "com.bobpay.app"; | 165 bobPay.activityInfo.packageName = "com.bobpay.app"; |
141 bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity"; | 166 bobPay.activityInfo.name = "com.bobpay.app.WebPaymentActivity"; |
142 activities.add(bobPay); | 167 activities.add(bobPay); |
143 Intent bobPayIntent = new Intent("org.chromium.intent.action.PAY"); | 168 Intent bobPayIntent = new Intent("org.chromium.intent.action.PAY"); |
144 bobPayIntent.setData(Uri.parse("https://bobpay.com")); | 169 bobPayIntent.setData(Uri.parse("https://bobpay.com")); |
145 PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageMana
gerDelegate.class); | 170 PackageManagerDelegate packageManagerDelegate = Mockito.mock(PackageMana
gerDelegate.class); |
146 Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.
class))) | 171 Mockito.when(packageManagerDelegate.getAppLabel(Mockito.any(ResolveInfo.
class))) |
147 .thenReturn("A non-empty label"); | 172 .thenReturn("A non-empty label"); |
148 Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent(
bobPayIntent)) | 173 Mockito.when(packageManagerDelegate.getActivitiesThatCanRespondToIntent( |
| 174 ArgumentMatchers.argThat(new IntentArgumentMatcher(bobPayIntent)
))) |
149 .thenReturn(activities); | 175 .thenReturn(activities); |
150 | 176 |
151 List<ResolveInfo> services = new ArrayList<>(); | 177 List<ResolveInfo> services = new ArrayList<>(); |
152 ResolveInfo isBobPayReadyToPay = new ResolveInfo(); | 178 ResolveInfo isBobPayReadyToPay = new ResolveInfo(); |
153 isBobPayReadyToPay.serviceInfo = new ServiceInfo(); | 179 isBobPayReadyToPay.serviceInfo = new ServiceInfo(); |
154 isBobPayReadyToPay.serviceInfo.packageName = "com.bobpay.app"; | 180 isBobPayReadyToPay.serviceInfo.packageName = "com.bobpay.app"; |
155 isBobPayReadyToPay.serviceInfo.name = "com.bobpay.app.IsReadyToWebPay"; | 181 isBobPayReadyToPay.serviceInfo.name = "com.bobpay.app.IsReadyToWebPay"; |
156 services.add(isBobPayReadyToPay); | 182 services.add(isBobPayReadyToPay); |
157 Intent isReadyToPayIntent = new Intent(AndroidPaymentAppFinder.ACTION_IS
_READY_TO_PAY); | 183 Intent isReadyToPayIntent = new Intent(AndroidPaymentAppFinder.ACTION_IS
_READY_TO_PAY); |
158 Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent(is
ReadyToPayIntent)) | 184 Mockito.when(packageManagerDelegate.getServicesThatCanRespondToIntent( |
| 185 ArgumentMatchers.argThat(new IntentArgumentMatcher(isReadyToPayI
ntent)))) |
159 .thenReturn(services); | 186 .thenReturn(services); |
160 | 187 |
161 PackageInfo bobPayPackageInfo = new PackageInfo(); | 188 PackageInfo bobPayPackageInfo = new PackageInfo(); |
162 bobPayPackageInfo.versionCode = 10; | 189 bobPayPackageInfo.versionCode = 10; |
163 bobPayPackageInfo.signatures = new Signature[1]; | 190 bobPayPackageInfo.signatures = new Signature[1]; |
164 bobPayPackageInfo.signatures[0] = new Signature("01020304050607080900"); | 191 bobPayPackageInfo.signatures[0] = new Signature("01020304050607080900"); |
165 Mockito.when(packageManagerDelegate.getPackageInfoWithSignatures("com.bo
bpay.app")) | 192 Mockito.when(packageManagerDelegate.getPackageInfoWithSignatures("com.bo
bpay.app")) |
166 .thenReturn(bobPayPackageInfo); | 193 .thenReturn(bobPayPackageInfo); |
167 | 194 |
168 PaymentManifestDownloader downloader = new PaymentManifestDownloader(nul
l) { | 195 PaymentManifestDownloader downloader = new PaymentManifestDownloader(nul
l) { |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 public static ArgumentMatcher<PaymentApp> paymentAppIdentifier( | 252 public static ArgumentMatcher<PaymentApp> paymentAppIdentifier( |
226 String expectedAppIdentifier) { | 253 String expectedAppIdentifier) { |
227 return new Matches(expectedAppIdentifier); | 254 return new Matches(expectedAppIdentifier); |
228 } | 255 } |
229 | 256 |
230 @Override | 257 @Override |
231 public boolean matches(PaymentApp app) { | 258 public boolean matches(PaymentApp app) { |
232 return app.getAppIdentifier().equals(mExpectedAppIdentifier); | 259 return app.getAppIdentifier().equals(mExpectedAppIdentifier); |
233 } | 260 } |
234 } | 261 } |
235 } | 262 } |
OLD | NEW |