Search in sources :

Example 1 with Configuration

use of org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration in project robolectric by robolectric.

the class AndroidTestEnvironment method setUpApplicationState.

@Override
public void setUpApplicationState(Method method, Configuration configuration, AndroidManifest appManifest) {
    for (TestEnvironmentLifecyclePlugin e : testEnvironmentLifecyclePlugins) {
        e.onSetupApplicationState();
    }
    Config config = configuration.get(Config.class);
    ConfigurationRegistry.instance = new ConfigurationRegistry(configuration.map());
    clearEnvironment();
    RuntimeEnvironment.setTempDirectory(new TempDirectory(createTestDataDirRootPath(method)));
    if (ShadowLooper.looperMode() == LooperMode.Mode.LEGACY) {
        RuntimeEnvironment.setMasterScheduler(new Scheduler());
        RuntimeEnvironment.setMainThread(Thread.currentThread());
        ShadowLegacyLooper.internalInitializeBackgroundThreadScheduler();
    }
    if (!loggingInitialized) {
        ShadowLog.setupLogging();
        loggingInitialized = true;
    }
    if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
        Security.addProvider(new BouncyCastleProvider());
    }
    android.content.res.Configuration androidConfiguration = new android.content.res.Configuration();
    DisplayMetrics displayMetrics = new DisplayMetrics();
    Bootstrap.applyQualifiers(config.qualifiers(), apiLevel, androidConfiguration, displayMetrics);
    Locale locale = apiLevel >= VERSION_CODES.N ? androidConfiguration.getLocales().get(0) : androidConfiguration.locale;
    Locale.setDefault(locale);
    // Looper needs to be prepared before the activity thread is created
    if (Looper.myLooper() == null) {
        Looper.prepareMainLooper();
    }
    if (ShadowLooper.looperMode() == LooperMode.Mode.LEGACY) {
        ShadowLooper.getShadowMainLooper().resetScheduler();
    } else {
        RuntimeEnvironment.setMasterScheduler(new LooperDelegatingScheduler(Looper.getMainLooper()));
    }
    preloadClasses(apiLevel);
    RuntimeEnvironment.setAndroidFrameworkJarPath(sdkJarPath);
    Bootstrap.setDisplayConfiguration(androidConfiguration, displayMetrics);
    RuntimeEnvironment.setActivityThread(ReflectionHelpers.newInstance(ActivityThread.class));
    ReflectionHelpers.setStaticField(ActivityThread.class, "sMainThreadHandler", new Handler(Looper.myLooper()));
    Instrumentation instrumentation = createInstrumentation();
    InstrumentationRegistry.registerInstance(instrumentation, new Bundle());
    Supplier<Application> applicationSupplier = createApplicationSupplier(appManifest, config, androidConfiguration, displayMetrics);
    RuntimeEnvironment.setApplicationSupplier(applicationSupplier);
    if (configuration.get(LazyLoad.class) == LazyLoad.ON) {
        RuntimeEnvironment.setConfiguredApplicationClass(getApplicationClass(appManifest, config, new ApplicationInfo()));
    } else {
        // force eager load of the application
        RuntimeEnvironment.getApplication();
    }
}
Also used : Locale(java.util.Locale) Configuration(org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration) Config(org.robolectric.annotation.Config) Scheduler(org.robolectric.util.Scheduler) Bundle(android.os.Bundle) LazyLoad(org.robolectric.annotation.experimental.LazyApplication.LazyLoad) ApplicationInfo(android.content.pm.ApplicationInfo) ConfigurationRegistry(org.robolectric.config.ConfigurationRegistry) Handler(android.os.Handler) Instrumentation(android.app.Instrumentation) ShadowInstrumentation(org.robolectric.shadows.ShadowInstrumentation) ShadowActivityThread(org.robolectric.shadows.ShadowActivityThread) ActivityThread(android.app.ActivityThread) DisplayMetrics(android.util.DisplayMetrics) TestEnvironmentLifecyclePlugin(org.robolectric.pluginapi.TestEnvironmentLifecyclePlugin) TempDirectory(org.robolectric.util.TempDirectory) ShadowApplication(org.robolectric.shadows.ShadowApplication) Application(android.app.Application) BouncyCastleProvider(org.bouncycastle.jce.provider.BouncyCastleProvider)

Example 2 with Configuration

use of org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration in project robolectric by robolectric.

the class RobolectricTestRunner method getChildren.

@Override
protected List<FrameworkMethod> getChildren() {
    List<FrameworkMethod> children = new ArrayList<>();
    for (FrameworkMethod frameworkMethod : super.getChildren()) {
        try {
            Configuration configuration = getConfiguration(frameworkMethod.getMethod());
            AndroidManifest appManifest = getAppManifest(configuration);
            List<Sdk> sdksToRun = sdkPicker.selectSdks(configuration, appManifest);
            RobolectricFrameworkMethod last = null;
            for (Sdk sdk : sdksToRun) {
                if (resModeStrategy.includeLegacy(appManifest)) {
                    children.add(last = new RobolectricFrameworkMethod(frameworkMethod.getMethod(), appManifest, sdk, configuration, ResourcesMode.LEGACY, resModeStrategy, alwaysIncludeVariantMarkersInName));
                }
                if (resModeStrategy.includeBinary(appManifest)) {
                    children.add(last = new RobolectricFrameworkMethod(frameworkMethod.getMethod(), appManifest, sdk, configuration, ResourcesMode.BINARY, resModeStrategy, alwaysIncludeVariantMarkersInName));
                }
            }
            if (last != null) {
                last.dontIncludeVariantMarkersInTestName();
            }
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("failed to configure " + getTestClass().getName() + "." + frameworkMethod.getMethod().getName() + ": " + e.getMessage(), e);
        }
    }
    return children;
}
Also used : Configuration(org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration) InstrumentationConfiguration(org.robolectric.internal.bytecode.InstrumentationConfiguration) ArrayList(java.util.ArrayList) AndroidManifest(org.robolectric.manifest.AndroidManifest) Sdk(org.robolectric.pluginapi.Sdk) FrameworkMethod(org.junit.runners.model.FrameworkMethod)

Example 3 with Configuration

use of org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration in project robolectric by robolectric.

the class RobolectricTestRunner method createClassLoaderConfig.

/**
 * Create an {@link InstrumentationConfiguration} suitable for the provided {@link
 * FrameworkMethod}.
 *
 * <p>Adds configuration for Android using {@link AndroidConfigurer}.
 *
 * <p>Custom TestRunner subclasses may wish to override this method to provide additional
 * configuration.
 *
 * @param method the test method that's about to run
 * @return an {@link InstrumentationConfiguration}
 */
@Override
@Nonnull
protected InstrumentationConfiguration createClassLoaderConfig(final FrameworkMethod method) {
    Configuration configuration = ((RobolectricFrameworkMethod) method).getConfiguration();
    Config config = configuration.get(Config.class);
    Builder builder = new Builder(super.createClassLoaderConfig(method));
    androidConfigurer.configure(builder, getInterceptors());
    androidConfigurer.withConfig(builder, config);
    return builder.build();
}
Also used : Configuration(org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration) InstrumentationConfiguration(org.robolectric.internal.bytecode.InstrumentationConfiguration) Config(org.robolectric.annotation.Config) Builder(org.robolectric.internal.bytecode.InstrumentationConfiguration.Builder) Nonnull(javax.annotation.Nonnull)

Example 4 with Configuration

use of org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration in project robolectric by robolectric.

the class RobolectricTestRunner method getConfiguration.

/**
 * Calculate the configuration for a given test method.
 */
private Configuration getConfiguration(Method method) {
    Configuration configuration = configurationStrategy.getConfig(getTestClass().getJavaClass(), method);
    // in case #getConfig(Method) has been overridden...
    try {
        Config config = getConfig(method);
        ((ConfigurationImpl) configuration).put(Config.class, config);
    } catch (UnsupportedOperationException e) {
    // no problem
    }
    return configuration;
}
Also used : Configuration(org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration) InstrumentationConfiguration(org.robolectric.internal.bytecode.InstrumentationConfiguration) Config(org.robolectric.annotation.Config) ConfigurationImpl(org.robolectric.plugins.HierarchicalConfigurationStrategy.ConfigurationImpl)

Example 5 with Configuration

use of org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration in project robolectric by robolectric.

the class HierarchicalConfigurationStrategyTest method configFor.

private Config configFor(Class<?> testClass, String methodName, final Map<String, String> configProperties, Config.Implementation globalConfig) {
    Method info = getMethod(testClass, methodName);
    PackagePropertiesLoader packagePropertiesLoader = new PackagePropertiesLoader() {

        @Override
        InputStream getResourceAsStream(String resourceName) {
            String properties = configProperties.get(resourceName);
            return properties == null ? null : new ByteArrayInputStream(properties.getBytes(UTF_8));
        }
    };
    ConfigurationStrategy defaultConfigStrategy = new HierarchicalConfigurationStrategy(new ConfigConfigurer(packagePropertiesLoader, () -> globalConfig == null ? Config.Builder.defaults().build() : globalConfig));
    Configuration config = defaultConfigStrategy.getConfig(testClass, info);
    return config.get(Config.class);
}
Also used : ConfigurationStrategy(org.robolectric.pluginapi.config.ConfigurationStrategy) Configuration(org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration) ByteArrayInputStream(java.io.ByteArrayInputStream) Method(java.lang.reflect.Method)

Aggregations

Configuration (org.robolectric.pluginapi.config.ConfigurationStrategy.Configuration)5 Config (org.robolectric.annotation.Config)3 InstrumentationConfiguration (org.robolectric.internal.bytecode.InstrumentationConfiguration)3 ActivityThread (android.app.ActivityThread)1 Application (android.app.Application)1 Instrumentation (android.app.Instrumentation)1 ApplicationInfo (android.content.pm.ApplicationInfo)1 Bundle (android.os.Bundle)1 Handler (android.os.Handler)1 DisplayMetrics (android.util.DisplayMetrics)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 Method (java.lang.reflect.Method)1 ArrayList (java.util.ArrayList)1 Locale (java.util.Locale)1 Nonnull (javax.annotation.Nonnull)1 BouncyCastleProvider (org.bouncycastle.jce.provider.BouncyCastleProvider)1 FrameworkMethod (org.junit.runners.model.FrameworkMethod)1 LazyLoad (org.robolectric.annotation.experimental.LazyApplication.LazyLoad)1 ConfigurationRegistry (org.robolectric.config.ConfigurationRegistry)1 Builder (org.robolectric.internal.bytecode.InstrumentationConfiguration.Builder)1