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