Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56a8c64c authored by Jaewoong Jung's avatar Jaewoong Jung Committed by Android (Google) Code Review
Browse files

Merge "Makes it possible to robo-test Settings app fragments."

parents b6809667 bccd6525
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -88,3 +88,4 @@ com.android.settings.notification.NotificationAccessSettings
com.android.settings.notification.ZenModeSettings
com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment
com.android.settings.applications.ConvertToFbe
com.android.settings.localepicker.LocaleListEditor
 No newline at end of file
+19 −0
Original line number Diff line number Diff line
package android.print;

import android.annotation.NonNull;
import android.content.Context;
import android.content.Loader;
import android.printservice.PrintServiceInfo;
import com.android.internal.util.Preconditions;

import java.util.List;

/**
 * A placeholder class to prevent ClassNotFound exceptions caused by lack of visibility.
 */
public class PrintServicesLoader extends Loader<List<PrintServiceInfo>> {
    public PrintServicesLoader(@NonNull PrintManager printManager, @NonNull Context context,
            int selectionFlags) {
        super(Preconditions.checkNotNull(context));
    }
}
+11 −0
Original line number Diff line number Diff line
package com.android.internal.app;

/**
 * A placeholder class to prevent ClassNotFound exceptions caused by lack of visibility.
 */
public class LocalePickerWithRegion {

    public interface LocaleSelectedListener {
        void onLocaleSelected(LocaleStore.LocaleInfo locale);
    }
}
+20 −1
Original line number Diff line number Diff line
@@ -15,15 +15,23 @@
 */
package com.android.settings;

import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import org.junit.runners.model.InitializationError;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.manifest.AndroidManifest;
import org.robolectric.res.Fs;
import org.robolectric.res.ResourcePath;
import org.robolectric.util.ActivityController;
import org.robolectric.util.ReflectionHelpers;

import java.util.List;

import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT;
import static org.robolectric.Robolectric.getShadowsAdapter;

/**
 * Custom test runner for the testing of BluetoothPairingDialogs. This is needed because the
 * default behavior for robolectric is just to grab the resource directory in the target package.
@@ -77,4 +85,15 @@ public class SettingsRobolectricTestRunner extends RobolectricTestRunner {
        manifest.setPackageName("com.android.settings");
        return manifest;
    }

    // A simple utility class to start a Settings fragment with an intent. The code here is almost
    // the same as FragmentTestUtil.startFragment except that it starts an activity with an intent.
    public static void startSettingsFragment(
            Fragment fragment, Class<? extends SettingsActivity> activityClass) {
        Intent intent = new Intent().putExtra(EXTRA_SHOW_FRAGMENT, fragment.getClass().getName());
        SettingsActivity activity = ActivityController.of(
                getShadowsAdapter(), ReflectionHelpers.callConstructor(activityClass), intent)
                .setup().get();
        activity.getFragmentManager().beginTransaction().add(fragment, null).commit();
    }
}
+61 −0
Original line number Diff line number Diff line
package com.android.settings.applications;

import android.os.Looper;
import android.os.UserManager;
import com.android.settings.Settings;
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.testutils.shadow.ShadowDynamicIndexableContentMonitor;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.SettingsShadowResources.SettingsShadowTheme;
import com.android.settingslib.applications.ApplicationsState;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;

import static org.mockito.Matchers.any;
import static org.mockito.Mockito.when;

/**
 * Tests for {@link ManageApplications}.
 */
@RunWith(SettingsRobolectricTestRunner.class)
// TODO: Consider making the shadow class set global using a robolectric.properties file.
@Config(manifest = TestConfig.MANIFEST_PATH,
        sdk = TestConfig.SDK_VERSION,
        shadows = {
                SettingsShadowResources.class,
                SettingsShadowTheme.class,
                ShadowDynamicIndexableContentMonitor.class
        })
public class ManageApplicationsTest {

    @Mock private ApplicationsState mState;
    @Mock private ApplicationsState.Session mSession;
    @Mock private UserManager mUserManager;

    private Looper mBgLooper;

    private ManageApplications mFragment;
    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        ReflectionHelpers.setStaticField(ApplicationsState.class, "sInstance", mState);
        when(mState.newSession(any())).thenReturn(mSession);
        mBgLooper = Looper.myLooper();
        when(mState.getBackgroundLooper()).thenReturn(mBgLooper);

        mFragment = new ManageApplications();
    }

    @Test
    public void launchFragment() {
        SettingsRobolectricTestRunner.startSettingsFragment(
                mFragment, Settings.ManageApplicationsActivity.class);
    }
}
Loading