Index: chrome/android/junit/src/org/chromium/chrome/browser/payments/ManifestParserUnitTest.java |
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/payments/ManifestParserUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/payments/ManifestParserUnitTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..02539bcf83051c534248e887a35c5612b31b25b5 |
--- /dev/null |
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/payments/ManifestParserUnitTest.java |
@@ -0,0 +1,263 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.payments; |
+ |
+import org.junit.Assert; |
+import org.junit.Test; |
+import org.junit.runner.RunWith; |
+import org.robolectric.annotation.Config; |
+ |
+import org.chromium.chrome.browser.payments.ManifestParser.Manifest; |
+import org.chromium.chrome.browser.payments.ManifestParser.ManifestParseCallback; |
+import org.chromium.testing.local.LocalRobolectricTestRunner; |
+ |
+import java.util.HashSet; |
+import java.util.List; |
+import java.util.Set; |
+ |
+/** |
+ * Unit tests for parsing manifests of native Android payment apps. |
+ */ |
+@RunWith(LocalRobolectricTestRunner.class) |
+@Config(manifest = Config.NONE) |
+public class ManifestParserUnitTest { |
+ private static class Callback implements ManifestParseCallback { |
+ public List<Manifest> manifests; |
+ public boolean success; |
+ |
+ @Override |
+ public void onManifestParseSuccess(List<Manifest> manifests) { |
+ success = true; |
+ this.manifests = manifests; |
+ } |
+ |
+ @Override |
+ public void onManifestParseFailure() { |
+ success = false; |
+ } |
+ } |
+ |
+ @Test |
+ public void testEmptyString() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("", callback); |
+ |
+ Assert.assertFalse(callback.success); |
+ } |
+ |
+ @Test |
+ public void testInvalidJson() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{[", callback); |
+ |
+ Assert.assertFalse(callback.success); |
+ } |
+ |
+ @Test |
+ public void testEmptyJsonObject() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{}", callback); |
+ |
+ Assert.assertFalse(callback.success); |
+ } |
+ |
+ @Test |
+ public void testAndroidIsNotAnArray() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": 1}", callback); |
+ |
+ Assert.assertFalse(callback.success); |
+ } |
+ |
+ @Test |
+ public void testAndroidIsEmptyArray() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": []}", callback); |
+ |
+ Assert.assertFalse(callback.success); |
+ } |
+ |
+ @Test |
+ public void testAndroidListItemIsNotObject() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": [\"yes\"]}", callback); |
+ |
+ Assert.assertFalse(callback.success); |
+ } |
+ |
+ @Test |
+ public void testAndroidListItemIsEmptyObject() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": [{}]}", callback); |
+ |
+ Assert.assertFalse(callback.success); |
+ } |
+ |
+ @Test |
+ public void testAnyPackageAllowed() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": [{\"package\": \"*\"}]}", callback); |
+ |
+ Assert.assertTrue(callback.success); |
+ Assert.assertNotNull(callback.manifests); |
+ Assert.assertFalse(callback.manifests.isEmpty()); |
+ Assert.assertEquals(callback.manifests.size(), 1); |
+ |
+ Manifest manifest = callback.manifests.get(0); |
+ |
+ Assert.assertNotNull(manifest); |
+ Assert.assertNotNull(manifest.packageName); |
+ Assert.assertEquals(manifest.packageName, "*"); |
+ } |
+ |
+ @Test |
+ public void testNoFingerprints() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\"," |
+ + "\"version\": 1}]}", callback); |
+ |
+ Assert.assertFalse(callback.success); |
+ } |
+ |
+ @Test |
+ public void testFingerprintsIsNotArray() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\", \"version\": 1," |
+ + "\"sha256_cert_fingerprints\": 0}]}", callback); |
+ |
+ Assert.assertFalse(callback.success); |
+ } |
+ |
+ @Test |
+ public void testFingerprintsIsEmptyArray() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\", \"version\": 1," |
+ + "\"sha256_cert_fingerprints\": []}]}", callback); |
+ |
+ Assert.assertFalse(callback.success); |
+ } |
+ |
+ @Test |
+ public void testFingerprintsAreNotStrings() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\", \"version\": 1," |
+ + "\"sha256_cert_fingerprints\": [0]}]}", callback); |
+ |
+ Assert.assertTrue(callback.success); |
+ Assert.assertNotNull(callback.manifests); |
+ Assert.assertFalse(callback.manifests.isEmpty()); |
+ Assert.assertEquals(callback.manifests.size(), 1); |
+ |
+ Manifest manifest = callback.manifests.get(0); |
+ |
+ Assert.assertNotNull(manifest); |
+ Assert.assertNotNull(manifest.packageName); |
+ Assert.assertEquals(manifest.packageName, "com.bobpay"); |
+ Assert.assertEquals(manifest.version, 1); |
+ Assert.assertNotNull(manifest.sha256CertFingerprints); |
+ Assert.assertFalse(manifest.sha256CertFingerprints.isEmpty()); |
+ Assert.assertEquals(manifest.sha256CertFingerprints.size(), 1); |
+ |
+ String fingerprint = manifest.sha256CertFingerprints.iterator().next(); |
+ |
+ Assert.assertEquals(fingerprint, "0"); // Built-in JSON parser coerces the value to string. |
+ } |
+ |
+ @Test |
+ public void testOneFingerprint() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\", \"version\": 1," |
+ + "\"sha256_cert_fingerprints\": [\"1234567890\"]}]}", callback); |
+ |
+ Assert.assertTrue(callback.success); |
+ Assert.assertNotNull(callback.manifests); |
+ Assert.assertFalse(callback.manifests.isEmpty()); |
+ Assert.assertEquals(callback.manifests.size(), 1); |
+ |
+ Manifest manifest = callback.manifests.get(0); |
+ |
+ Assert.assertNotNull(manifest); |
+ Assert.assertNotNull(manifest.packageName); |
+ Assert.assertEquals(manifest.packageName, "com.bobpay"); |
+ Assert.assertEquals(manifest.version, 1); |
+ Assert.assertNotNull(manifest.sha256CertFingerprints); |
+ Assert.assertFalse(manifest.sha256CertFingerprints.isEmpty()); |
+ Assert.assertEquals(manifest.sha256CertFingerprints.size(), 1); |
+ |
+ String fingerprint = manifest.sha256CertFingerprints.iterator().next(); |
+ |
+ Assert.assertEquals(fingerprint, "1234567890"); |
+ } |
+ |
+ @Test |
+ public void testTwoFingerprints() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\", \"version\": 1," |
+ + "\"sha256_cert_fingerprints\": [\"1234567890\", \"0987654321\"]}]}", callback); |
+ |
+ Assert.assertTrue(callback.success); |
+ Assert.assertNotNull(callback.manifests); |
+ Assert.assertFalse(callback.manifests.isEmpty()); |
+ Assert.assertEquals(callback.manifests.size(), 1); |
+ |
+ Manifest manifest = callback.manifests.get(0); |
+ |
+ Assert.assertNotNull(manifest); |
+ Assert.assertNotNull(manifest.packageName); |
+ Assert.assertEquals(manifest.packageName, "com.bobpay"); |
+ Assert.assertEquals(manifest.version, 1); |
+ Assert.assertNotNull(manifest.sha256CertFingerprints); |
+ Assert.assertFalse(manifest.sha256CertFingerprints.isEmpty()); |
+ Assert.assertEquals(manifest.sha256CertFingerprints.size(), 2); |
+ |
+ Set<String> expected = new HashSet<>(); |
+ expected.add("1234567890"); |
+ expected.add("0987654321"); |
+ |
+ Assert.assertEquals(manifest.sha256CertFingerprints, expected); |
+ } |
+ |
+ @Test |
+ public void testTwoSections() { |
+ Callback callback = new Callback(); |
+ ManifestParser.parse("{\"android\": [" |
+ + "{" |
+ + " \"package\": \"com.bobpay\"," |
+ + " \"version\": 321," |
+ + " \"sha256_cert_fingerprints\": [\"1234567890\"]" |
+ + "}, {" |
+ + " \"package\": \"com.alicepay\"," |
+ + " \"version\": 123," |
+ + " \"sha256_cert_fingerprints\": [\"1357913579\"]" |
+ + "}]}", callback); |
+ |
+ Assert.assertTrue(callback.success); |
+ Assert.assertNotNull(callback.manifests); |
+ Assert.assertFalse(callback.manifests.isEmpty()); |
+ Assert.assertEquals(callback.manifests.size(), 2); |
+ |
+ Manifest manifest = callback.manifests.get(0); |
+ |
+ Assert.assertNotNull(manifest); |
+ Assert.assertNotNull(manifest.packageName); |
+ Assert.assertEquals(manifest.packageName, "com.bobpay"); |
+ Assert.assertEquals(manifest.version, 321); |
+ Assert.assertNotNull(manifest.sha256CertFingerprints); |
+ Assert.assertFalse(manifest.sha256CertFingerprints.isEmpty()); |
+ Assert.assertEquals(manifest.sha256CertFingerprints.size(), 1); |
+ Assert.assertEquals(manifest.sha256CertFingerprints.iterator().next(), "1234567890"); |
+ |
+ manifest = callback.manifests.get(1); |
+ |
+ Assert.assertNotNull(manifest); |
+ Assert.assertNotNull(manifest.packageName); |
+ Assert.assertEquals(manifest.packageName, "com.alicepay"); |
+ Assert.assertEquals(manifest.version, 123); |
+ Assert.assertNotNull(manifest.sha256CertFingerprints); |
+ Assert.assertFalse(manifest.sha256CertFingerprints.isEmpty()); |
+ Assert.assertEquals(manifest.sha256CertFingerprints.size(), 1); |
+ Assert.assertEquals(manifest.sha256CertFingerprints.iterator().next(), "1357913579"); |
+ } |
+} |