Index: chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java |
diff --git a/chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java b/chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java |
index a002a794c4696b6b739cc68e2a034825ca8d8c4f..1e77656b4ab66fced3d13a2deb9f8088f3a7bf47 100644 |
--- a/chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java |
+++ b/chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java |
@@ -42,18 +42,15 @@ |
"org.chromium.webapk.shell_apk.test.dex_optimizer.DexOptimizerServiceImpl"; |
/** |
- * Name of dex files in DexOptimizer.apk. |
+ * Name of the dex file in DexOptimizer.apk. |
*/ |
private static final String DEX_ASSET_NAME = "canary.dex"; |
- private static final String DEX_ASSET_NAME2 = "canary2.dex"; |
- |
- /** |
- * Classes to load to check whether dex is valid. |
+ |
+ /** |
+ * Class to load to check whether dex is valid. |
*/ |
private static final String CANARY_CLASS_NAME = |
"org.chromium.webapk.shell_apk.test.canary.Canary"; |
- private static final String CANARY_CLASS_NAME2 = |
- "org.chromium.webapk.shell_apk.test.canary.Canary2"; |
private Context mContext; |
private Context mRemoteContext; |
@@ -220,33 +217,47 @@ |
} |
/** |
- * Test loading a dex file from a directory which was previously used for loading a different |
- * dex file. |
+ * Test that {@link DexLoader#load()} re-extracts the dex file from the APK after a call to |
+ * {@link DexLoader#deleteCachedDexes()}. |
*/ |
@MediumTest |
- public void testLoadDifferentDexInLocalDataDir() { |
+ public void testLoadAfterDeleteCachedDexes() { |
assertTrue(mLocalDexDir.mkdir()); |
- // Load canary.dex |
- ClassLoader loader1 = DexLoader.load( |
- mRemoteContext, DEX_ASSET_NAME, CANARY_CLASS_NAME, null, mLocalDexDir); |
- assertNotNull(loader1); |
- assertTrue(canLoadCanaryClass(loader1)); |
- |
- File canaryDexFile1 = new File(mLocalDexDir, DEX_ASSET_NAME); |
- assertTrue(canaryDexFile1.exists()); |
+ { |
+ // Load dex the first time. This should extract the dex file from the APK's assets and |
+ // generate the optimized dex file. |
+ FileMonitor localDexDirMonitor = new FileMonitor(mLocalDexDir); |
+ localDexDirMonitor.startWatching(); |
+ ClassLoader loader = DexLoader.load( |
+ mRemoteContext, DEX_ASSET_NAME, CANARY_CLASS_NAME, null, mLocalDexDir); |
+ localDexDirMonitor.stopWatching(); |
+ |
+ assertNotNull(loader); |
+ assertTrue(canLoadCanaryClass(loader)); |
+ |
+ assertTrue(localDexDirMonitor.mReadPaths.contains(DEX_ASSET_NAME)); |
+ assertTrue(localDexDirMonitor.mModifiedPaths.contains(DEX_ASSET_NAME)); |
+ } |
DexLoader.deleteCachedDexes(mLocalDexDir); |
- ClassLoader loader2 = DexLoader.load( |
- mRemoteContext, DEX_ASSET_NAME2, CANARY_CLASS_NAME2, null, mLocalDexDir); |
- assertNotNull(loader2); |
- assertTrue(canLoadClass(loader2, CANARY_CLASS_NAME2)); |
- |
- // canary2.dex should have been extracted and the previously extracted canary.dex file |
- // should have been deleted. |
- assertTrue(new File(mLocalDexDir, DEX_ASSET_NAME2).exists()); |
- assertFalse(canaryDexFile1.exists()); |
+ { |
+ // Load dex a second time. |
+ FileMonitor localDexDirMonitor = new FileMonitor(mLocalDexDir); |
+ localDexDirMonitor.startWatching(); |
+ ClassLoader loader = DexLoader.load( |
+ mRemoteContext, DEX_ASSET_NAME, CANARY_CLASS_NAME, null, mLocalDexDir); |
+ localDexDirMonitor.stopWatching(); |
+ |
+ // The returned ClassLoader should be valid. |
+ assertNotNull(loader); |
+ assertTrue(canLoadCanaryClass(loader)); |
+ |
+ // We should have re-extracted the dex from the APK's assets. |
+ assertTrue(localDexDirMonitor.mReadPaths.contains(DEX_ASSET_NAME)); |
+ assertTrue(localDexDirMonitor.mModifiedPaths.contains(DEX_ASSET_NAME)); |
+ } |
} |
/** |
@@ -314,13 +325,8 @@ |
/** Returns whether the ClassLoader can load {@link CANARY_CLASS_NAME} */ |
private boolean canLoadCanaryClass(ClassLoader loader) { |
- return canLoadClass(loader, CANARY_CLASS_NAME); |
- } |
- |
- /** Returns whether the ClassLoader can load a class */ |
- private boolean canLoadClass(ClassLoader loader, String className) { |
- try { |
- loader.loadClass(className); |
+ try { |
+ loader.loadClass(CANARY_CLASS_NAME); |
return true; |
} catch (Exception e) { |
return false; |