SdkConfig.java revision 875738a803eebc8d1c0606222aa53dd6c66d7620
1package org.robolectric.internal;
2
3import android.os.Build;
4import org.robolectric.internal.dependency.DependencyJar;
5
6import java.util.HashMap;
7import java.util.Map;
8
9public class SdkConfig {
10  private final int apiLevel;
11  private final String artifactVersionString;
12  private static final Map<Integer, SdkVersion> SUPPORTED_APIS;
13  public static final int FALLBACK_SDK_VERSION = Build.VERSION_CODES.JELLY_BEAN;
14
15  static {
16    SUPPORTED_APIS = new HashMap<Integer, SdkVersion>();
17    SUPPORTED_APIS.put(Build.VERSION_CODES.JELLY_BEAN, new SdkVersion("4.1.2_r1", "0"));
18    SUPPORTED_APIS.put(Build.VERSION_CODES.JELLY_BEAN_MR1, new SdkVersion("4.2.2_r1.2", "0"));
19    SUPPORTED_APIS.put(Build.VERSION_CODES.JELLY_BEAN_MR2, new SdkVersion("4.3_r2", "0"));
20    SUPPORTED_APIS.put(Build.VERSION_CODES.KITKAT, new SdkVersion("4.4_r1", "0"));
21    SUPPORTED_APIS.put(Build.VERSION_CODES.LOLLIPOP, new SdkVersion("5.0.0_r2", "0"));
22  }
23
24  public SdkConfig(int apiLevel) {
25    this.apiLevel = apiLevel;
26    SdkVersion version = SUPPORTED_APIS.get(apiLevel);
27    if (version == null) {
28      throw new UnsupportedOperationException("Robolectric does not support API level " + apiLevel + ".");
29    }
30    this.artifactVersionString = version.toString();
31  }
32
33  public int getApiLevel() {
34    return apiLevel;
35  }
36
37  public DependencyJar getSystemResourceDependency() {
38    return createDependency("org.robolectric", "android-all", artifactVersionString, null);
39  }
40
41  public DependencyJar[] getSdkClasspathDependencies() {
42    return new DependencyJar[] {
43        createDependency("org.robolectric", "android-all", artifactVersionString, null),
44        createDependency("org.robolectric", "shadows-core", "3.0-SNAPSHOT", Integer.toString(apiLevel)),
45        createDependency("org.json", "json", "20080701", null),
46        createDependency("org.ccil.cowan.tagsoup", "tagsoup", "1.2", null)
47    };
48  }
49
50  @Override
51  public boolean equals(Object o) {
52    if (this == o) return true;
53    if (o == null || getClass() != o.getClass()) return false;
54    SdkConfig sdkConfig = (SdkConfig) o;
55    return artifactVersionString.equals(sdkConfig.artifactVersionString);
56  }
57
58  @Override
59  public String toString() {
60    return "API Level " + apiLevel;
61  }
62
63  @Override
64  public int hashCode() {
65    return artifactVersionString.hashCode();
66  }
67
68  private DependencyJar createDependency(String groupId, String artifactId, String version, String classifier) {
69    return new DependencyJar(groupId, artifactId, version, classifier);
70  }
71
72  private static class SdkVersion {
73    private final String androidVersion;
74    private final String robolectricVersion;
75
76    public SdkVersion(String androidVersion, String robolectricVersion) {
77      this.androidVersion = androidVersion;
78      this.robolectricVersion = robolectricVersion;
79    }
80
81    @Override
82    public String toString() {
83      return androidVersion + "-robolectric-" + robolectricVersion;
84    }
85  }
86}
87