aboutsummaryrefslogtreecommitdiff
path: root/robolectric/src/main/java/org/robolectric/plugins/GraphicsModeConfigurer.java
blob: 8ff0f6196e3f2ce0404f721d28affe94fefc4a7d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package org.robolectric.plugins;

import com.google.auto.service.AutoService;
import java.lang.reflect.Method;
import java.util.Properties;
import javax.annotation.Nonnull;
import org.robolectric.annotation.GraphicsMode;
import org.robolectric.annotation.GraphicsMode.Mode;
import org.robolectric.pluginapi.config.Configurer;

/** Provides configuration to Robolectric for its @{@link GraphicsMode} annotation. */
@AutoService(Configurer.class)
public class GraphicsModeConfigurer implements Configurer<GraphicsMode.Mode> {

  private final Properties systemProperties;

  public GraphicsModeConfigurer(Properties systemProperties) {
    this.systemProperties = systemProperties;
  }

  @Override
  public Class<GraphicsMode.Mode> getConfigClass() {
    return GraphicsMode.Mode.class;
  }

  @Nonnull
  @Override
  public GraphicsMode.Mode defaultConfig() {
    return GraphicsMode.Mode.valueOf(
        systemProperties.getProperty("robolectric.graphicsMode", "LEGACY"));
  }

  @Override
  public GraphicsMode.Mode getConfigFor(@Nonnull String packageName) {
    try {
      Package pkg = Class.forName(packageName + ".package-info").getPackage();
      return valueFrom(pkg.getAnnotation(GraphicsMode.class));
    } catch (ClassNotFoundException e) {
      // ignore
    }
    return null;
  }

  @Override
  public GraphicsMode.Mode getConfigFor(@Nonnull Class<?> testClass) {
    return valueFrom(testClass.getAnnotation(GraphicsMode.class));
  }

  @Override
  public GraphicsMode.Mode getConfigFor(@Nonnull Method method) {
    return valueFrom(method.getAnnotation(GraphicsMode.class));
  }

  @Nonnull
  @Override
  public GraphicsMode.Mode merge(
      @Nonnull GraphicsMode.Mode parentConfig, @Nonnull GraphicsMode.Mode childConfig) {
    // just take the childConfig - since GraphicsMode only has a single 'value' attribute
    return childConfig;
  }

  private Mode valueFrom(GraphicsMode graphicsMode) {
    return graphicsMode == null ? null : graphicsMode.value();
  }
}