chromium/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeBrowserTestRule.java

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.test;

import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

import org.chromium.chrome.test.util.browser.signin.SigninTestRule;
import org.chromium.components.signin.base.CoreAccountInfo;
import org.chromium.content_public.browser.test.NativeLibraryTestUtils;

/**
 * JUnit test rule that takes care of important initialization for Chrome-specific tests, such as
 * initializing the AccountManagerFacade.
 */
public class ChromeBrowserTestRule implements TestRule {
    private final SigninTestRule mSigninTestRule = new SigninTestRule();

    @Override
    public Statement apply(final Statement base, Description description) {
        Statement statement =
                new Statement() {
                    @Override
                    public void evaluate() throws Throwable {
                        /**
                         * Loads the native library on the activity UI thread.  After loading the library,
                         * this will initialize the browser process if necessary.
                         */
                        NativeLibraryTestUtils.loadNativeLibraryAndInitBrowserProcess();
                        base.evaluate();
                    }
                };
        return mSigninTestRule.apply(statement, description);
    }

    /** Adds an account of the given accountName to the fake AccountManagerFacade. */
    public CoreAccountInfo addAccount(String accountName) {
        return mSigninTestRule.addAccount(accountName);
    }

    /** Adds and signs in an account with the default name without sync consent. */
    public CoreAccountInfo addTestAccountThenSignin() {
        return mSigninTestRule.addTestAccountThenSignin();
    }

    /** Add and sign in an account with the default name. */
    public CoreAccountInfo addTestAccountThenSigninAndEnableSync() {
        return mSigninTestRule.addTestAccountThenSigninAndEnableSync();
    }
}