diff options
author | Googler <noreply@google.com> | 2024-04-02 13:12:28 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-04-02 13:13:21 -0700 |
commit | 36c75fb8a7c511b00def718ae4d7df0c562a52b8 (patch) | |
tree | 3abc44424eda9c90f938e16b6c7a19716e834d65 | |
parent | 4e4c42736629db94c1f9abddb0f8fae3c0f9477b (diff) | |
download | robolectric-36c75fb8a7c511b00def718ae4d7df0c562a52b8.tar.gz |
Move AndroidVersions to annotations sub project and always read build.prop directly.
Due to lazy application loading being capable of changing runtime version detection via ShadowBuild.
PiperOrigin-RevId: 621272794
-rw-r--r-- | annotations/build.gradle | 6 | ||||
-rw-r--r-- | annotations/src/main/java/org/robolectric/versioning/AndroidVersionInitTools.java (renamed from shadows/versioning/src/main/java/org/robolectric/versioning/AndroidVersionInitTools.java) | 0 | ||||
-rw-r--r-- | annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java (renamed from shadows/versioning/src/main/java/org/robolectric/versioning/AndroidVersions.java) | 497 | ||||
-rw-r--r-- | annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java (renamed from shadows/versioning/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java) | 0 | ||||
-rw-r--r-- | annotations/src/test/java/org/robolectric/versioning/AndroidVersionsTest.java | 169 | ||||
-rw-r--r-- | integration_tests/versioning/build.gradle (renamed from shadows/versioning/build.gradle) | 1 | ||||
-rw-r--r-- | integration_tests/versioning/src/test/java/org/robolectric/versioning/AndroidVersionsTest.java (renamed from shadows/versioning/src/test/java/org/robolectric/versioning/AndroidVersionsTest.java) | 69 | ||||
-rw-r--r-- | integration_tests/versioning/src/test/resources/AndroidManifest.xml (renamed from shadows/versioning/src/test/resources/AndroidManifest.xml) | 0 | ||||
-rw-r--r-- | preinstrumented/build.gradle | 1 | ||||
-rw-r--r-- | processor/build.gradle | 1 | ||||
-rw-r--r-- | shadows/framework/build.gradle | 1 |
11 files changed, 572 insertions, 173 deletions
diff --git a/annotations/build.gradle b/annotations/build.gradle index d8bd113c5..c26efdb25 100644 --- a/annotations/build.gradle +++ b/annotations/build.gradle @@ -6,5 +6,11 @@ apply plugin: DeployedRoboJavaModulePlugin dependencies { compileOnly libs.findbugs.jsr305 + compileOnly libs.javax.annotation.api compileOnly AndroidSdk.MAX_SDK.coordinates + testImplementation libs.truth + testImplementation libs.junit4 + testImplementation libs.javax.annotation.api + testCompileOnly AndroidSdk.MAX_SDK.coordinates // compile against latest Android SDK + testRuntimeOnly AndroidSdk.MAX_SDK.coordinates // run against whatever this JDK supports } diff --git a/shadows/versioning/src/main/java/org/robolectric/versioning/AndroidVersionInitTools.java b/annotations/src/main/java/org/robolectric/versioning/AndroidVersionInitTools.java index 316365b39..316365b39 100644 --- a/shadows/versioning/src/main/java/org/robolectric/versioning/AndroidVersionInitTools.java +++ b/annotations/src/main/java/org/robolectric/versioning/AndroidVersionInitTools.java diff --git a/shadows/versioning/src/main/java/org/robolectric/versioning/AndroidVersions.java b/annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java index e5431eb97..71cc48042 100644 --- a/shadows/versioning/src/main/java/org/robolectric/versioning/AndroidVersions.java +++ b/annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java @@ -19,7 +19,7 @@ package org.robolectric.versioning; import static java.util.Arrays.asList; import java.io.IOException; -import java.lang.reflect.Field; +import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Modifier; import java.util.AbstractMap; @@ -29,12 +29,11 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.Properties; import java.util.jar.JarFile; import java.util.zip.ZipEntry; import javax.annotation.Nullable; -import org.robolectric.util.Logger; -import org.robolectric.util.ReflectionHelpers; /** * Android versioning is complicated.<br> @@ -63,17 +62,13 @@ public final class AndroidVersions { * true if this release has already occurred, false otherwise. If unreleased, the getSdkInt may * still be that of the prior release. */ - public int getSdkInt() { - return ReflectionHelpers.getStaticField(this.getClass(), "SDK_INT"); - } + public abstract int getSdkInt(); /** * single character short code for the release, multiple characters for minor releases (only * minor version numbers increment - usually within the same year). */ - public String getShortCode() { - return ReflectionHelpers.getStaticField(this.getClass(), "SHORT_CODE"); - } + public abstract String getShortCode(); /** * true if this release has already occurred, false otherwise. If unreleased, the getSdkInt will @@ -81,26 +76,22 @@ public final class AndroidVersions { * including most modern build tools; bazle, soong all are full build systems - and as such * organizations using them have no concerns. */ - public boolean isReleased() { - return ReflectionHelpers.getStaticField(this.getClass(), "RELEASED"); - } + public abstract boolean isReleased(); /** major.minor version number as String. */ - public String getVersion() { - return ReflectionHelpers.getStaticField(this.getClass(), "VERSION"); - } + public abstract String getVersion(); /** * Implements comparable. * * @param other the object to be compared. * @return 1 if this is greater than other, 0 if equal, -1 if less - * @throws RuntimeException if other is not an instance of AndroidRelease. + * @throws IllegalStateException if other is not an instance of AndroidRelease. */ @Override public int compareTo(AndroidRelease other) { if (other == null) { - throw new RuntimeException( + throw new IllegalStateException( "Only " + AndroidVersions.class.getName() + " should define Releases, illegal class " @@ -123,21 +114,80 @@ public final class AndroidVersions { } } + /** A released version of Android */ + public abstract static class AndroidReleased extends AndroidRelease { + @Override + public boolean isReleased() { + return true; + } + } + + /** An in-development version of Android */ + public abstract static class AndroidUnreleased extends AndroidRelease { + @Override + public boolean isReleased() { + return false; + } + } + + /** + * Version: -1 <br> + * ShortCode: "" <br> + * SDK API Level: "" <br> + * release: false <br> + */ + public static final class Unbound extends AndroidUnreleased { + + public static final int SDK_INT = -1; + + public static final String SHORT_CODE = "_"; + + public static final String VERSION = "_"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } + } + /** * Version: 4.1 <br> * ShortCode: J <br> * SDK API Level: 16 <br> * release: true <br> */ - public static final class J extends AndroidRelease { + public static final class J extends AndroidReleased { public static final int SDK_INT = 16; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "J"; public static final String VERSION = "4.1"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -146,15 +196,28 @@ public final class AndroidVersions { * SDK API Level: 17 <br> * release: true <br> */ - public static final class JMR1 extends AndroidRelease { + public static final class JMR1 extends AndroidReleased { public static final int SDK_INT = 17; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "JMR1"; public static final String VERSION = "4.2"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -163,15 +226,28 @@ public final class AndroidVersions { * SDK API Level: 18 <br> * release: true <br> */ - public static final class JMR2 extends AndroidRelease { + public static final class JMR2 extends AndroidReleased { public static final int SDK_INT = 18; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "JMR2"; public static final String VERSION = "4.3"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -180,15 +256,28 @@ public final class AndroidVersions { * SDK API Level: 19 <br> * release: true <br> */ - public static final class K extends AndroidRelease { + public static final class K extends AndroidReleased { public static final int SDK_INT = 19; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "K"; public static final String VERSION = "4.4"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } // Skipping K Watch release, which was 20. @@ -199,15 +288,28 @@ public final class AndroidVersions { * SDK API Level: 21 <br> * release: true <br> */ - public static final class L extends AndroidRelease { + public static final class L extends AndroidReleased { public static final int SDK_INT = 21; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "L"; public static final String VERSION = "5.0"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -216,15 +318,28 @@ public final class AndroidVersions { * SDK API Level: 22 <br> * release: true <br> */ - public static final class LMR1 extends AndroidRelease { + public static final class LMR1 extends AndroidReleased { public static final int SDK_INT = 22; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "LMR1"; public static final String VERSION = "5.1"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -233,15 +348,28 @@ public final class AndroidVersions { * SDK API Level: 23 <br> * release: true <br> */ - public static final class M extends AndroidRelease { + public static final class M extends AndroidReleased { public static final int SDK_INT = 23; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "M"; public static final String VERSION = "6.0"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -250,15 +378,28 @@ public final class AndroidVersions { * SDK API Level: 24 <br> * release: true <br> */ - public static final class N extends AndroidRelease { + public static final class N extends AndroidReleased { public static final int SDK_INT = 24; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "N"; public static final String VERSION = "7.0"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -267,15 +408,28 @@ public final class AndroidVersions { * SDK Framework: 25 <br> * release: true <br> */ - public static final class NMR1 extends AndroidRelease { + public static final class NMR1 extends AndroidReleased { public static final int SDK_INT = 25; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "NMR1"; - private static final String VERSION = "7.1"; + public static final String VERSION = "7.1"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -284,15 +438,28 @@ public final class AndroidVersions { * SDK API Level: 26 <br> * release: true <br> */ - public static final class O extends AndroidRelease { + public static final class O extends AndroidReleased { public static final int SDK_INT = 26; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "O"; public static final String VERSION = "8.0"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -301,15 +468,28 @@ public final class AndroidVersions { * SDK API Level: 27 <br> * release: true <br> */ - public static final class OMR1 extends AndroidRelease { + public static final class OMR1 extends AndroidReleased { public static final int SDK_INT = 27; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "OMR1"; public static final String VERSION = "8.1"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -318,15 +498,28 @@ public final class AndroidVersions { * SDK API Level: 28 <br> * release: true <br> */ - public static final class P extends AndroidRelease { + public static final class P extends AndroidReleased { public static final int SDK_INT = 28; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "P"; public static final String VERSION = "9.0"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -335,15 +528,28 @@ public final class AndroidVersions { * SDK API Level: 29 <br> * release: true <br> */ - public static final class Q extends AndroidRelease { + public static final class Q extends AndroidReleased { public static final int SDK_INT = 29; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "Q"; public static final String VERSION = "10.0"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -352,15 +558,28 @@ public final class AndroidVersions { * SDK API Level: 30 <br> * release: true <br> */ - public static final class R extends AndroidRelease { + public static final class R extends AndroidReleased { public static final int SDK_INT = 30; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "R"; public static final String VERSION = "11.0"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -369,15 +588,28 @@ public final class AndroidVersions { * SDK API Level: 31 <br> * release: true <br> */ - public static final class S extends AndroidRelease { + public static final class S extends AndroidReleased { public static final int SDK_INT = 31; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "S"; public static final String VERSION = "12.0"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -387,15 +619,28 @@ public final class AndroidVersions { * release: true <br> */ @SuppressWarnings("UPPER_SNAKE_CASE") - public static final class Sv2 extends AndroidRelease { + public static final class Sv2 extends AndroidReleased { public static final int SDK_INT = 32; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "Sv2"; public static final String VERSION = "12.1"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -404,15 +649,28 @@ public final class AndroidVersions { * SDK API Level: 33 <br> * release: true <br> */ - public static final class T extends AndroidRelease { + public static final class T extends AndroidReleased { public static final int SDK_INT = 33; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "T"; public static final String VERSION = "13.0"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -421,15 +679,28 @@ public final class AndroidVersions { * SDK API Level: 34 <br> * release: false <br> */ - public static final class U extends AndroidRelease { + public static final class U extends AndroidReleased { public static final int SDK_INT = 34; - public static final boolean RELEASED = true; - public static final String SHORT_CODE = "U"; public static final String VERSION = "14.0"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** @@ -438,15 +709,28 @@ public final class AndroidVersions { * SDK API Level: 34+ <br> * release: false <br> */ - public static final class V extends AndroidRelease { + public static final class V extends AndroidUnreleased { public static final int SDK_INT = 35; - public static final boolean RELEASED = false; - public static final String SHORT_CODE = "V"; public static final String VERSION = "15"; + + @Override + public int getSdkInt() { + return SDK_INT; + } + + @Override + public String getShortCode() { + return SHORT_CODE; + } + + @Override + public String getVersion() { + return VERSION; + } } /** The current release this process is running on. */ @@ -574,7 +858,7 @@ public final class AndroidVersions { } } if (errors.length() > 0) { - throw new RuntimeException( + throw new IllegalStateException( errors .append("Please check the AndroidReleases defined ") .append("in ") @@ -587,18 +871,13 @@ public final class AndroidVersions { public AndroidRelease computeCurrentSdk( int reportedVersion, String releaseName, String codename, List<String> activeCodeNames) { - Logger.info("Reported Version: " + reportedVersion); - Logger.info("Release Name: " + releaseName); - Logger.info("Code Name: " + codename); - Logger.info("Active Code Names: " + String.join(",", activeCodeNames)); - AndroidRelease current = null; // Special case "REL", which means the build is not a pre-release build. - if ("REL".equals(codename)) { + if (Objects.equals(codename, "REL")) { // the first letter of the code name equal to the release number. current = sdkIntToAllReleases.get(reportedVersion); if (current != null && !current.isReleased()) { - throw new RuntimeException( + throw new IllegalStateException( "The current sdk " + current.getShortCode() + " has been released. Please update the contents of " @@ -657,7 +936,7 @@ public final class AndroidVersions { .append("contents of current sdk jar to the released version.\n"); } if (detectedProblems.length() > 0) { - throw new RuntimeException(detectedProblems.toString()); + throw new IllegalStateException(detectedProblems.toString()); } } } @@ -670,7 +949,7 @@ public final class AndroidVersions { * the shortCode, sdkInt, and release information. * * <p>All errors are stored and can be reported at once by asking the SdkInformation to throw a - * runtime exception after it has been populated. + * IllegalStateException after it has been populated. */ static SdkInformation gatherStaticSdkInformationFromThisClass() { List<AndroidRelease> allReleases = new ArrayList<>(); @@ -678,7 +957,8 @@ public final class AndroidVersions { for (Class<?> clazz : AndroidVersions.class.getClasses()) { if (AndroidRelease.class.isAssignableFrom(clazz) && !clazz.isInterface() - && !Modifier.isAbstract(clazz.getModifiers())) { + && !Modifier.isAbstract(clazz.getModifiers()) + && clazz != Unbound.class) { try { AndroidRelease rel = (AndroidRelease) clazz.getDeclaredConstructor().newInstance(); allReleases.add(rel); @@ -691,7 +971,7 @@ public final class AndroidVersions { | IllegalArgumentException | IllegalAccessException | InvocationTargetException ex) { - throw new RuntimeException( + throw new IllegalStateException( "Classes " + clazz.getName() + "should be accessible via " @@ -731,50 +1011,19 @@ public final class AndroidVersions { return information.computeCurrentSdk(sdk, release, codename, asList(activeCodeNames)); } - /** - * If we are working in android source, this code detects the list of active code names if any. - */ - private static List<String> getActiveCodeNamesIfAny(Class<?> targetClass) { - try { - Field activeCodeFields = targetClass.getDeclaredField("ACTIVE_CODENAMES"); - String[] activeCodeNames = (String[]) activeCodeFields.get(null); - if (activeCodeNames == null) { - return new ArrayList<>(); - } - return asList(activeCodeNames); - } catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException ex) { - return new ArrayList<>(); - } - } - private static final SdkInformation information; static { AndroidRelease currentRelease = null; information = gatherStaticSdkInformationFromThisClass(); try { - Class<?> buildClass = - Class.forName("android.os.Build", false, Thread.currentThread().getContextClassLoader()); - System.out.println("build class " + buildClass); - Class<?> versionClass = null; - for (Class<?> c : buildClass.getClasses()) { - if (c.getSimpleName().equals("VERSION")) { - versionClass = c; - System.out.println("Version class " + versionClass); - break; - } - } - if (versionClass != null) { - // 33, 34, etc.... - int sdkInt = (int) ReflectionHelpers.getStaticField(versionClass, "SDK_INT"); - // Either unset, or 13, 14, etc.... - String release = ReflectionHelpers.getStaticField(versionClass, "RELEASE"); - // Either REL if release is set, or Tiramasu, UpsideDownCake, etc - String codename = ReflectionHelpers.getStaticField(versionClass, "CODENAME"); - List<String> activeCodeNames = getActiveCodeNamesIfAny(versionClass); - currentRelease = information.computeCurrentSdk(sdkInt, release, codename, activeCodeNames); + InputStream is = AndroidVersions.class.getClassLoader().getResourceAsStream("build.prop"); + if (is != null) { + Properties buildProps = new Properties(); + buildProps.load(is); + currentRelease = computeCurrentSdkFromBuildProps(buildProps); } - } catch (ClassNotFoundException | IllegalArgumentException | UnsatisfiedLinkError e) { + } catch (IOException ioe) { // No op, this class should be usable outside of a Robolectric sandbox. } CURRENT = currentRelease; diff --git a/shadows/versioning/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java b/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java index 95b2c4266..95b2c4266 100644 --- a/shadows/versioning/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java +++ b/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java diff --git a/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsTest.java b/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsTest.java new file mode 100644 index 000000000..670e695a3 --- /dev/null +++ b/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsTest.java @@ -0,0 +1,169 @@ +package org.robolectric.versioning; + +import static com.google.common.truth.Truth.assertThat; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Check versions information aligns with runtime information. Primarily, selected SDK with + * internally detected version number. + */ +@RunWith(JUnit4.class) +public final class AndroidVersionsTest { + + @Test + public void testStandardInitializationT() { + assertThat(AndroidVersions.T.SDK_INT).isEqualTo(33); + assertThat(AndroidVersions.T.SHORT_CODE).isEqualTo("T"); + assertThat(AndroidVersions.T.VERSION).isEqualTo("13.0"); + assertThat(new AndroidVersions.T().getSdkInt()).isEqualTo(33); + assertThat(new AndroidVersions.T().getShortCode()).isEqualTo("T"); + assertThat(new AndroidVersions.T().getVersion()).isEqualTo("13.0"); + assertThat(new AndroidVersions.T().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationSv2() { + assertThat(AndroidVersions.Sv2.SDK_INT).isEqualTo(32); + assertThat(AndroidVersions.Sv2.SHORT_CODE).isEqualTo("Sv2"); + assertThat(AndroidVersions.Sv2.VERSION).isEqualTo("12.1"); + assertThat(new AndroidVersions.Sv2().getSdkInt()).isEqualTo(32); + assertThat(new AndroidVersions.Sv2().getShortCode()).isEqualTo("Sv2"); + assertThat(new AndroidVersions.Sv2().getVersion()).isEqualTo("12.1"); + assertThat(new AndroidVersions.Sv2().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationS() { + assertThat(AndroidVersions.S.SDK_INT).isEqualTo(31); + assertThat(AndroidVersions.S.SHORT_CODE).isEqualTo("S"); + assertThat(AndroidVersions.S.VERSION).isEqualTo("12.0"); + assertThat(new AndroidVersions.S().getSdkInt()).isEqualTo(31); + assertThat(new AndroidVersions.S().getShortCode()).isEqualTo("S"); + assertThat(new AndroidVersions.S().getVersion()).isEqualTo("12.0"); + assertThat(new AndroidVersions.S().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationR() { + assertThat(AndroidVersions.R.SDK_INT).isEqualTo(30); + assertThat(AndroidVersions.R.SHORT_CODE).isEqualTo("R"); + assertThat(AndroidVersions.R.VERSION).isEqualTo("11.0"); + assertThat(new AndroidVersions.R().getSdkInt()).isEqualTo(30); + assertThat(new AndroidVersions.R().getShortCode()).isEqualTo("R"); + assertThat(new AndroidVersions.R().getVersion()).isEqualTo("11.0"); + assertThat(new AndroidVersions.R().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationQ() { + assertThat(AndroidVersions.Q.SDK_INT).isEqualTo(29); + assertThat(AndroidVersions.Q.SHORT_CODE).isEqualTo("Q"); + assertThat(AndroidVersions.Q.VERSION).isEqualTo("10.0"); + assertThat(new AndroidVersions.Q().getSdkInt()).isEqualTo(29); + assertThat(new AndroidVersions.Q().getShortCode()).isEqualTo("Q"); + assertThat(new AndroidVersions.Q().getVersion()).isEqualTo("10.0"); + assertThat(new AndroidVersions.Q().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationP() { + assertThat(AndroidVersions.P.SDK_INT).isEqualTo(28); + assertThat(AndroidVersions.P.SHORT_CODE).isEqualTo("P"); + assertThat(AndroidVersions.P.VERSION).isEqualTo("9.0"); + assertThat(new AndroidVersions.P().getSdkInt()).isEqualTo(28); + assertThat(new AndroidVersions.P().getShortCode()).isEqualTo("P"); + assertThat(new AndroidVersions.P().getVersion()).isEqualTo("9.0"); + assertThat(new AndroidVersions.P().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationOMR1() { + assertThat(AndroidVersions.OMR1.SDK_INT).isEqualTo(27); + assertThat(AndroidVersions.OMR1.SHORT_CODE).isEqualTo("OMR1"); + assertThat(AndroidVersions.OMR1.VERSION).isEqualTo("8.1"); + assertThat(new AndroidVersions.OMR1().getSdkInt()).isEqualTo(27); + assertThat(new AndroidVersions.OMR1().getShortCode()).isEqualTo("OMR1"); + assertThat(new AndroidVersions.OMR1().getVersion()).isEqualTo("8.1"); + assertThat(new AndroidVersions.OMR1().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationO() { + assertThat(AndroidVersions.O.SDK_INT).isEqualTo(26); + assertThat(AndroidVersions.O.SHORT_CODE).isEqualTo("O"); + assertThat(AndroidVersions.O.VERSION).isEqualTo("8.0"); + assertThat(new AndroidVersions.O().getSdkInt()).isEqualTo(26); + assertThat(new AndroidVersions.O().getShortCode()).isEqualTo("O"); + assertThat(new AndroidVersions.O().getVersion()).isEqualTo("8.0"); + assertThat(new AndroidVersions.O().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationNMR1() { + assertThat(AndroidVersions.NMR1.SDK_INT).isEqualTo(25); + assertThat(AndroidVersions.NMR1.SHORT_CODE).isEqualTo("NMR1"); + assertThat(AndroidVersions.NMR1.VERSION).isEqualTo("7.1"); + assertThat(new AndroidVersions.NMR1().getSdkInt()).isEqualTo(25); + assertThat(new AndroidVersions.NMR1().getShortCode()).isEqualTo("NMR1"); + assertThat(new AndroidVersions.NMR1().getVersion()).isEqualTo("7.1"); + assertThat(new AndroidVersions.NMR1().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationN() { + assertThat(AndroidVersions.N.SDK_INT).isEqualTo(24); + assertThat(AndroidVersions.N.SHORT_CODE).isEqualTo("N"); + assertThat(AndroidVersions.N.VERSION).isEqualTo("7.0"); + assertThat(new AndroidVersions.N().getSdkInt()).isEqualTo(24); + assertThat(new AndroidVersions.N().getShortCode()).isEqualTo("N"); + assertThat(new AndroidVersions.N().getVersion()).isEqualTo("7.0"); + assertThat(new AndroidVersions.N().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationM() { + assertThat(AndroidVersions.M.SDK_INT).isEqualTo(23); + assertThat(AndroidVersions.M.SHORT_CODE).isEqualTo("M"); + assertThat(AndroidVersions.M.VERSION).isEqualTo("6.0"); + assertThat(new AndroidVersions.M().getSdkInt()).isEqualTo(23); + assertThat(new AndroidVersions.M().getShortCode()).isEqualTo("M"); + assertThat(new AndroidVersions.M().getVersion()).isEqualTo("6.0"); + assertThat(new AndroidVersions.M().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationLMR1() { + assertThat(AndroidVersions.LMR1.SDK_INT).isEqualTo(22); + assertThat(AndroidVersions.LMR1.SHORT_CODE).isEqualTo("LMR1"); + assertThat(AndroidVersions.LMR1.VERSION).isEqualTo("5.1"); + assertThat(new AndroidVersions.LMR1().getSdkInt()).isEqualTo(22); + assertThat(new AndroidVersions.LMR1().getShortCode()).isEqualTo("LMR1"); + assertThat(new AndroidVersions.LMR1().getVersion()).isEqualTo("5.1"); + assertThat(new AndroidVersions.LMR1().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationL() { + assertThat(AndroidVersions.L.SDK_INT).isEqualTo(21); + assertThat(AndroidVersions.L.SHORT_CODE).isEqualTo("L"); + assertThat(AndroidVersions.L.VERSION).isEqualTo("5.0"); + assertThat(new AndroidVersions.L().getSdkInt()).isEqualTo(21); + assertThat(new AndroidVersions.L().getShortCode()).isEqualTo("L"); + assertThat(new AndroidVersions.L().getVersion()).isEqualTo("5.0"); + assertThat(new AndroidVersions.L().isReleased()).isEqualTo(true); + } + + @Test + public void testStandardInitializationK() { + assertThat(AndroidVersions.K.SDK_INT).isEqualTo(19); + assertThat(AndroidVersions.K.SHORT_CODE).isEqualTo("K"); + assertThat(AndroidVersions.K.VERSION).isEqualTo("4.4"); + assertThat(new AndroidVersions.K().getSdkInt()).isEqualTo(19); + assertThat(new AndroidVersions.K().getShortCode()).isEqualTo("K"); + assertThat(new AndroidVersions.K().getVersion()).isEqualTo("4.4"); + assertThat(new AndroidVersions.K().isReleased()).isEqualTo(true); + } +} diff --git a/shadows/versioning/build.gradle b/integration_tests/versioning/build.gradle index 68a8fb769..8ae425b51 100644 --- a/shadows/versioning/build.gradle +++ b/integration_tests/versioning/build.gradle @@ -9,7 +9,6 @@ configurations { } dependencies { - api project(":shadowapi") compileOnly AndroidSdk.MAX_SDK.coordinates // compile against latest Android SDK (AndroidSdk.s.coordinates) { force = true } testImplementation project(":robolectric") testImplementation libs.truth diff --git a/shadows/versioning/src/test/java/org/robolectric/versioning/AndroidVersionsTest.java b/integration_tests/versioning/src/test/java/org/robolectric/versioning/AndroidVersionsTest.java index 4666c6a0e..09b394a1a 100644 --- a/shadows/versioning/src/test/java/org/robolectric/versioning/AndroidVersionsTest.java +++ b/integration_tests/versioning/src/test/java/org/robolectric/versioning/AndroidVersionsTest.java @@ -2,12 +2,11 @@ package org.robolectric.versioning; import static com.google.common.truth.Truth.assertThat; -import android.os.Build.VERSION; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import org.robolectric.versioning.AndroidVersions.T; +import org.robolectric.shadows.ShadowBuild; /** * Check versions information aligns with runtime information. Primarily, selected SDK with @@ -17,11 +16,17 @@ import org.robolectric.versioning.AndroidVersions.T; public final class AndroidVersionsTest { @Test - @Config(sdk = T.SDK_INT) + @Config(sdk = 33) + public void ignoreShadowBuildValues() { + ShadowBuild.setVersionCodename("_*&^%%&"); + assertThat(AndroidVersions.T.SDK_INT).isEqualTo(33); + assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("T"); + } + + @Test + @Config(sdk = 33) public void testStandardInitializationT() { - assertThat(VERSION.SDK_INT).isEqualTo(33); - assertThat(VERSION.RELEASE).isEqualTo("13"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.T.SDK_INT).isEqualTo(33); assertThat(AndroidVersions.T.SHORT_CODE).isEqualTo("T"); assertThat(new AndroidVersions.T().getVersion()).isEqualTo("13.0"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("T"); @@ -30,9 +35,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 32) public void testStandardInitializationSv2() { - assertThat(VERSION.SDK_INT).isEqualTo(32); - assertThat(VERSION.RELEASE).isEqualTo("12"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.Sv2.SDK_INT).isEqualTo(32); assertThat(AndroidVersions.Sv2.SHORT_CODE).isEqualTo("Sv2"); assertThat(new AndroidVersions.Sv2().getVersion()).isEqualTo("12.1"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("Sv2"); @@ -41,9 +44,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 31) public void testStandardInitializationS() { - assertThat(VERSION.SDK_INT).isEqualTo(31); - assertThat(VERSION.RELEASE).isEqualTo("12"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.S.SDK_INT).isEqualTo(31); assertThat(AndroidVersions.S.SHORT_CODE).isEqualTo("S"); assertThat(new AndroidVersions.S().getVersion()).isEqualTo("12.0"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("S"); @@ -52,9 +53,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 30) public void testStandardInitializationR() { - assertThat(VERSION.SDK_INT).isEqualTo(30); - assertThat(VERSION.RELEASE).isEqualTo("11"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.R.SDK_INT).isEqualTo(30); assertThat(AndroidVersions.R.SHORT_CODE).isEqualTo("R"); assertThat(new AndroidVersions.R().getVersion()).isEqualTo("11.0"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("R"); @@ -63,9 +62,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 29) public void testStandardInitializationQ() { - assertThat(VERSION.SDK_INT).isEqualTo(29); - assertThat(VERSION.RELEASE).isEqualTo("10"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.Q.SDK_INT).isEqualTo(29); assertThat(AndroidVersions.Q.SHORT_CODE).isEqualTo("Q"); assertThat(new AndroidVersions.Q().getVersion()).isEqualTo("10.0"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("Q"); @@ -74,9 +71,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 28) public void testStandardInitializationP() { - assertThat(VERSION.SDK_INT).isEqualTo(28); - assertThat(VERSION.RELEASE).isEqualTo("9"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.P.SDK_INT).isEqualTo(28); assertThat(AndroidVersions.P.SHORT_CODE).isEqualTo("P"); assertThat(new AndroidVersions.P().getVersion()).isEqualTo("9.0"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("P"); @@ -85,9 +80,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 27) public void testStandardInitializationOMR1() { - assertThat(VERSION.SDK_INT).isEqualTo(27); - assertThat(VERSION.RELEASE).isEqualTo("8.1.0"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.OMR1.SDK_INT).isEqualTo(27); assertThat(AndroidVersions.OMR1.SHORT_CODE).isEqualTo("OMR1"); assertThat(new AndroidVersions.OMR1().getVersion()).isEqualTo("8.1"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("OMR1"); @@ -96,9 +89,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 26) public void testStandardInitializationO() { - assertThat(VERSION.SDK_INT).isEqualTo(26); - assertThat(VERSION.RELEASE).isEqualTo("8.0.0"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.O.SDK_INT).isEqualTo(26); assertThat(AndroidVersions.O.SHORT_CODE).isEqualTo("O"); assertThat(new AndroidVersions.O().getVersion()).isEqualTo("8.0"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("O"); @@ -107,9 +98,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 25) public void testStandardInitializationNMR1() { - assertThat(VERSION.SDK_INT).isEqualTo(25); - assertThat(VERSION.RELEASE).isEqualTo("7.1"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.NMR1.SDK_INT).isEqualTo(25); assertThat(AndroidVersions.NMR1.SHORT_CODE).isEqualTo("NMR1"); assertThat(new AndroidVersions.NMR1().getVersion()).isEqualTo("7.1"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("NMR1"); @@ -118,9 +107,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 24) public void testStandardInitializationN() { - assertThat(VERSION.SDK_INT).isEqualTo(24); - assertThat(VERSION.RELEASE).isEqualTo("7.0"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.N.SDK_INT).isEqualTo(24); assertThat(AndroidVersions.N.SHORT_CODE).isEqualTo("N"); assertThat(new AndroidVersions.N().getVersion()).isEqualTo("7.0"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("N"); @@ -129,9 +116,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 23) public void testStandardInitializationM() { - assertThat(VERSION.SDK_INT).isEqualTo(23); - assertThat(VERSION.RELEASE).isEqualTo("6.0.1"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.M.SDK_INT).isEqualTo(23); assertThat(AndroidVersions.M.SHORT_CODE).isEqualTo("M"); assertThat(new AndroidVersions.M().getVersion()).isEqualTo("6.0"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("M"); @@ -140,9 +125,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 22) public void testStandardInitializationLMR1() { - assertThat(VERSION.SDK_INT).isEqualTo(22); - assertThat(VERSION.RELEASE).isEqualTo("5.1.1"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.LMR1.SDK_INT).isEqualTo(22); assertThat(AndroidVersions.LMR1.SHORT_CODE).isEqualTo("LMR1"); assertThat(new AndroidVersions.LMR1().getVersion()).isEqualTo("5.1"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("LMR1"); @@ -151,9 +134,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 21) public void testStandardInitializationL() { - assertThat(VERSION.SDK_INT).isEqualTo(21); - assertThat(VERSION.RELEASE).isEqualTo("5.0.2"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.L.SDK_INT).isEqualTo(21); assertThat(AndroidVersions.L.SHORT_CODE).isEqualTo("L"); assertThat(new AndroidVersions.L().getVersion()).isEqualTo("5.0"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("L"); @@ -162,9 +143,7 @@ public final class AndroidVersionsTest { @Test @Config(sdk = 19) public void testStandardInitializationK() { - assertThat(VERSION.SDK_INT).isEqualTo(19); - assertThat(VERSION.RELEASE).isEqualTo("4.4"); - assertThat(VERSION.CODENAME).isEqualTo("REL"); + assertThat(AndroidVersions.K.SDK_INT).isEqualTo(19); assertThat(AndroidVersions.K.SHORT_CODE).isEqualTo("K"); assertThat(new AndroidVersions.K().getVersion()).isEqualTo("4.4"); assertThat(AndroidVersions.CURRENT.getShortCode()).isEqualTo("K"); diff --git a/shadows/versioning/src/test/resources/AndroidManifest.xml b/integration_tests/versioning/src/test/resources/AndroidManifest.xml index 65383ac0b..65383ac0b 100644 --- a/shadows/versioning/src/test/resources/AndroidManifest.xml +++ b/integration_tests/versioning/src/test/resources/AndroidManifest.xml diff --git a/preinstrumented/build.gradle b/preinstrumented/build.gradle index 673d55d9c..8e6481622 100644 --- a/preinstrumented/build.gradle +++ b/preinstrumented/build.gradle @@ -19,7 +19,6 @@ java { dependencies { implementation libs.guava implementation project(":sandbox") - implementation project(":shadows:versioning") testImplementation libs.junit4 testImplementation libs.mockito diff --git a/processor/build.gradle b/processor/build.gradle index 063720748..695bc8182 100644 --- a/processor/build.gradle +++ b/processor/build.gradle @@ -37,7 +37,6 @@ tasks.named("classes").configure { task -> dependencies { api project(":annotations") api project(":shadowapi") - implementation project(":shadows:versioning") compileOnly libs.findbugs.jsr305 api libs.asm diff --git a/shadows/framework/build.gradle b/shadows/framework/build.gradle index bc4915528..492f86502 100644 --- a/shadows/framework/build.gradle +++ b/shadows/framework/build.gradle @@ -51,7 +51,6 @@ dependencies { api project(":pluginapi") api project(":sandbox") api project(":shadowapi") - api project(":shadows:versioning") api project(":utils") api project(":utils:reflector") |