Merge "Add APIs for improved MTS testing"
am: 65c8f94fe4

Change-Id: I79098fb87eb2abb0136c47a6f16dfbc4bbbff1f1
diff --git a/luni/src/main/java/libcore/timezone/TimeZoneDataFiles.java b/luni/src/main/java/libcore/timezone/TimeZoneDataFiles.java
index d95ff50..b4c8976 100644
--- a/luni/src/main/java/libcore/timezone/TimeZoneDataFiles.java
+++ b/luni/src/main/java/libcore/timezone/TimeZoneDataFiles.java
@@ -55,6 +55,7 @@
         return System.getenv(ANDROID_DATA_ENV) + "/misc/zoneinfo/";
     }
 
+    // Remove from CorePlatformApi when all users in platform code are removed. http://b/123398797
     @libcore.api.CorePlatformApi
     public static String getDataTimeZoneFile(String fileName) {
         return getDataTimeZoneRootDir() + "current/" + fileName;
diff --git a/luni/src/main/java/libcore/timezone/TzDataSetVersion.java b/luni/src/main/java/libcore/timezone/TzDataSetVersion.java
index c2e7d7b..a404551 100644
--- a/luni/src/main/java/libcore/timezone/TzDataSetVersion.java
+++ b/luni/src/main/java/libcore/timezone/TzDataSetVersion.java
@@ -102,13 +102,17 @@
                     + REVISION_PATTERN.pattern()
                     + ".*" /* ignore trailing */);
 
+    @libcore.api.CorePlatformApi
     public final int formatMajorVersion;
+
+    @libcore.api.CorePlatformApi
     public final int formatMinorVersion;
 
     // Remove from CorePlatformApi when all users in platform code are removed. http://b/123398797
     @libcore.api.CorePlatformApi
     public final String rulesVersion;
 
+    @libcore.api.CorePlatformApi
     public final int revision;
 
     @libcore.api.CorePlatformApi
@@ -155,6 +159,17 @@
         return fromBytes(versionBytes);
     }
 
+    /**
+     * Reads the version of time zone data supplied by the time zone data module.
+     */
+    @libcore.api.CorePlatformApi
+    public static TzDataSetVersion readTimeZoneModuleVersion()
+            throws IOException, TzDataSetException {
+        String tzVersionFileName =
+                TimeZoneDataFiles.getTimeZoneModuleTzFile(TzDataSetVersion.DEFAULT_FILE_NAME);
+        return readFromFile(new File(tzVersionFileName));
+    }
+
     // Remove from CorePlatformApi when all users in platform code are removed. http://b/123398797
     @libcore.api.CorePlatformApi
     public byte[] toBytes() {
diff --git a/luni/src/main/java/libcore/util/CoreLibraryDebug.java b/luni/src/main/java/libcore/util/CoreLibraryDebug.java
index 8ba3853..dc1012f 100644
--- a/luni/src/main/java/libcore/util/CoreLibraryDebug.java
+++ b/luni/src/main/java/libcore/util/CoreLibraryDebug.java
@@ -17,6 +17,7 @@
 package libcore.util;
 
 import com.android.icu.util.Icu4cMetadata;
+
 import libcore.timezone.TimeZoneDataFiles;
 import libcore.timezone.TzDataSetVersion;
 import libcore.timezone.TzDataSetVersion.TzDataSetException;
diff --git a/luni/src/test/java/libcore/libcore/timezone/TimeZoneDataFilesTest.java b/luni/src/test/java/libcore/libcore/timezone/TimeZoneDataFilesTest.java
index 282b18e..a74ba30 100644
--- a/luni/src/test/java/libcore/libcore/timezone/TimeZoneDataFilesTest.java
+++ b/luni/src/test/java/libcore/libcore/timezone/TimeZoneDataFilesTest.java
@@ -28,10 +28,12 @@
 
     private static final String ANDROID_TZDATA_ROOT_ENV = "ANDROID_TZDATA_ROOT";
     private static final String ANDROID_I18N_ROOT_ENV = "ANDROID_I18N_ROOT";
+    private static final String ANDROID_DATA_ENV = "ANDROID_DATA";
 
     @Test
     public void expectedEnvironmentVariables() {
         // These environment variables are required to locate data files used by libcore / ICU.
+        assertNotNull(System.getenv(ANDROID_DATA_ENV));
         assertNotNull(System.getenv(ANDROID_TZDATA_ROOT_ENV));
         assertNotNull(System.getenv(ANDROID_I18N_ROOT_ENV));
     }
@@ -41,6 +43,7 @@
         String[] paths = TimeZoneDataFiles.getTimeZoneFilePaths("foo");
         assertEquals(2, paths.length);
 
+        assertTrue(paths[0].startsWith(System.getenv(ANDROID_DATA_ENV)));
         assertTrue(paths[0].contains("/misc/zoneinfo/current/"));
         assertTrue(paths[0].endsWith("/foo"));
 
@@ -58,6 +61,7 @@
         assertEquals(3, paths.length);
 
         String dataDirPath = paths[0];
+        assertTrue(dataDirPath.startsWith(System.getenv(ANDROID_DATA_ENV)));
         assertTrue(dataDirPath + " invalid", dataDirPath.contains("/misc/zoneinfo/current/icu"));
 
         String tzdataModulePath = paths[1];
diff --git a/mmodules/core_platform_api/api/platform/current-api.txt b/mmodules/core_platform_api/api/platform/current-api.txt
index 366ca67..8a984ce 100644
--- a/mmodules/core_platform_api/api/platform/current-api.txt
+++ b/mmodules/core_platform_api/api/platform/current-api.txt
@@ -1177,8 +1177,12 @@
     method public static int currentFormatMinorVersion();
     method public static boolean isCompatibleWithThisDevice(libcore.timezone.TzDataSetVersion);
     method public static libcore.timezone.TzDataSetVersion readFromFile(java.io.File) throws java.io.IOException, libcore.timezone.TzDataSetVersion.TzDataSetException;
+    method public static libcore.timezone.TzDataSetVersion readTimeZoneModuleVersion() throws java.io.IOException, libcore.timezone.TzDataSetVersion.TzDataSetException;
     method public byte[] toBytes();
     field public static final String DEFAULT_FILE_NAME = "tz_version";
+    field public final int formatMajorVersion;
+    field public final int formatMinorVersion;
+    field public final int revision;
     field public final String rulesVersion;
   }
 
diff --git a/non_openjdk_java_files.bp b/non_openjdk_java_files.bp
index 8fc3607..e76142d 100644
--- a/non_openjdk_java_files.bp
+++ b/non_openjdk_java_files.bp
@@ -447,6 +447,7 @@
     srcs: [
         "luni/src/main/java/libcore/api/CorePlatformApi.java",
         "luni/src/main/java/libcore/api/IntraCoreApi.java",
+        "luni/src/main/java/libcore/timezone/TimeZoneDataFiles.java",
         "luni/src/main/java/libcore/timezone/TzDataSetVersion.java",
     ],
 }