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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/util/FeatureUtilitiesTest.java

Issue 304573002: Upstreaming of FeatureUtilities (part one) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Layout fixes Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/javatests/src/org/chromium/chrome/browser/util/FeatureUtilitiesTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/util/FeatureUtilitiesTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/util/FeatureUtilitiesTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8456105459893949b253c006125b5129e66a2dd
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/util/FeatureUtilitiesTest.java
@@ -0,0 +1,247 @@
+// Copyright 2014 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.util;
+
+import android.accounts.Account;
+import android.accounts.AuthenticatorDescription;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.speech.RecognizerIntent;
+import android.test.InstrumentationTestCase;
+import android.test.mock.MockContext;
+import android.test.mock.MockPackageManager;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.AdvancedMockContext;
+import org.chromium.base.test.util.Feature;
+import org.chromium.sync.signin.AccountManagerHelper;
+import org.chromium.sync.test.util.MockAccountManager;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+
+/**
+ * Unit Test for FeatureUtilities.
+ */
+public class FeatureUtilitiesTest extends InstrumentationTestCase {
+
+ private IntentTestMockContext mContextWithSpeech;
+ private IntentTestMockContext mContextWithoutSpeech;
+ private MockAuthenticationAccountManager mAccountManager;
+ private AdvancedMockContext mAccountTestingContext;
+ private Account mTestAccount;
+
+ public FeatureUtilitiesTest() {
+ mContextWithSpeech = new IntentTestMockContext(
+ RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
+
+ mContextWithoutSpeech = new IntentTestMockContext(
+ RecognizerIntent.ACTION_WEB_SEARCH);
+
+ mTestAccount = AccountManagerHelper.createAccountFromName("Dummy");
+ }
+
+ @Override
+ public void setUp() {
+ // GetInstrumentation().getTargetContext() cannot be called in
+ // constructor due to external dependencies.
+ mAccountTestingContext = new AdvancedMockContext(
+ getInstrumentation().getTargetContext());
+ }
+
+ private static class IntentTestPackageManager extends MockPackageManager {
+
+ private final String mAction;
+
+ public IntentTestPackageManager(String recognizesAction) {
+ super();
+ mAction = recognizesAction;
+ }
+
+ @Override
+ public List<ResolveInfo>queryIntentActivities(Intent intent, int flags) {
+ List<ResolveInfo>resolveInfoList = new ArrayList<ResolveInfo>();
+
+ if (intent.getAction().equals(mAction)) {
+ // Add an entry to the returned list as the action
+ // being queried exists.
+ ResolveInfo resolveInfo = new ResolveInfo();
+ resolveInfoList.add(resolveInfo);
+ }
+
+ return resolveInfoList;
+ }
+ }
+
+ private static class IntentTestMockContext extends MockContext {
+
+ private final String mAction;
+
+ public IntentTestMockContext(String recognizesAction) {
+ super();
+ mAction = recognizesAction;
+ }
+
+ @Override
+ public IntentTestPackageManager getPackageManager() {
+ return new IntentTestPackageManager(mAction);
+ }
+ }
+
+ private static class MockAuthenticationAccountManager extends MockAccountManager {
+
+ private final String mAccountType;
+
+ public MockAuthenticationAccountManager(Context localContext,
+ Context testContext,
+ String accountType,
+ Account... accounts) {
+ super(localContext, testContext, accounts);
+ mAccountType = accountType;
+ }
+
+ @Override
+ public Account[] getAccountsByType(String accountType) {
+ if (accountType.equals(mAccountType)) {
+ // Calling function uses length of array to determine if
+ // accounts of the requested type are available, so return
+ // a non-empty array to indicate the account type is correct.
+ return new Account[] {
+ AccountManagerHelper.createAccountFromName("Dummy")
+ };
+ }
+
+ return new Account[0];
+ }
+
+ @Override
+ public AuthenticatorDescription[] getAuthenticatorTypes() {
+ AuthenticatorDescription googleAuthenticator =
+ new AuthenticatorDescription(mAccountType, "p1", 0, 0, 0, 0);
+
+ return new AuthenticatorDescription[] { googleAuthenticator };
+ }
+ }
+
+ private static boolean isRecognitionIntentPresent(
+ final IntentTestMockContext context,
+ final boolean useCachedResult) {
+ // Context can only be queried on a UI Thread.
+ return ThreadUtils.runOnUiThreadBlockingNoException(
+ new Callable<Boolean>() {
+ @Override
+ public Boolean call() {
+ return FeatureUtilities.isRecognitionIntentPresent(
+ context,
+ useCachedResult);
+ }
+ });
+ }
+
+ private void setUpAccount(final String accountType) {
+ mAccountManager = new MockAuthenticationAccountManager(
+ mAccountTestingContext,
+ getInstrumentation().getContext(),
+ accountType,
+ mTestAccount);
+
+ AccountManagerHelper.overrideAccountManagerHelperForTests(
+ mAccountTestingContext,
+ mAccountManager);
+ }
+
+ @SmallTest
+ @Feature({"FeatureUtilities", "Speech"})
+ public void testSpeechFeatureAvailable() {
+
+ final boolean doNotUseCachedResult = false;
+ final boolean recognizesSpeech = isRecognitionIntentPresent(
+ mContextWithSpeech,
+ doNotUseCachedResult);
+
+ assertTrue(recognizesSpeech);
+ }
+
+ @SmallTest
+ @Feature({"FeatureUtilities", "Speech"})
+ public void testSpeechFeatureUnavailable() {
+
+ final boolean doNotUseCachedResult = false;
+ final boolean recognizesSpeech = isRecognitionIntentPresent(
+ mContextWithoutSpeech,
+ doNotUseCachedResult);
+
+ assertFalse(recognizesSpeech);
+ }
+
+ @SmallTest
+ @Feature({"FeatureUtilities", "Speech"})
+ public void testCachedSpeechFeatureAvailability() {
+
+ // Initial call will cache the fact that speech is recognized.
+ final boolean doNotUseCachedResult = false;
+ isRecognitionIntentPresent(
+ mContextWithSpeech,
+ doNotUseCachedResult);
+
+ // Pass a context that does not recognize speech, but use cached result
+ // which does recognize speech.
+ final boolean useCachedResult = true;
+ final boolean recognizesSpeech = isRecognitionIntentPresent(
+ mContextWithoutSpeech,
+ useCachedResult);
+
+ // Check that we still recognize speech as we're using cached result.
+ assertTrue(recognizesSpeech);
+
+ // Check if we can turn cached result off again.
+ final boolean RecognizesSpeechUncached = isRecognitionIntentPresent(
+ mContextWithoutSpeech,
+ doNotUseCachedResult);
+
+ assertFalse(RecognizesSpeechUncached);
+ }
+
+ @SmallTest
+ @Feature({"FeatureUtilities", "GoogleAccounts"})
+ public void testHasGoogleAccountCorrectlyDetected() {
+
+ // Set up an account manager mock that returns Google account types
+ // when queried.
+ setUpAccount(AccountManagerHelper.GOOGLE_ACCOUNT_TYPE);
+
+ boolean hasAccounts = FeatureUtilities.hasGoogleAccounts(
+ mAccountTestingContext);
+
+ assertTrue(hasAccounts);
+
+ boolean hasAuthenticator = FeatureUtilities.hasGoogleAccountAuthenticator(
+ mAccountTestingContext);
+
+ assertTrue(hasAuthenticator);
+ }
+
+ @SmallTest
+ @Feature({"FeatureUtilities", "GoogleAccounts"})
+ public void testHasNoGoogleAccountCorrectlyDetected() {
+
+ // Set up an account manager mock that doesn't return Google account
+ // types when queried.
+ setUpAccount("Not A Google Account");
+
+ boolean hasAccounts = FeatureUtilities.hasGoogleAccounts(
+ mAccountTestingContext);
+
+ assertFalse(hasAccounts);
+
+ boolean hasAuthenticator = FeatureUtilities.hasGoogleAccountAuthenticator(
+ mAccountTestingContext);
+
+ assertFalse(hasAuthenticator);
+ }
+}
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698