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 1e77656b4ab66fced3d13a2deb9f8088f3a7bf47..a002a794c4696b6b739cc68e2a034825ca8d8c4f 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,15 +42,18 @@ public class DexLoaderTest extends InstrumentationTestCase { |
"org.chromium.webapk.shell_apk.test.dex_optimizer.DexOptimizerServiceImpl"; |
/** |
- * Name of the dex file in DexOptimizer.apk. |
+ * Name of dex files in DexOptimizer.apk. |
*/ |
private static final String DEX_ASSET_NAME = "canary.dex"; |
+ private static final String DEX_ASSET_NAME2 = "canary2.dex"; |
/** |
- * Class to load to check whether dex is valid. |
+ * Classes 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; |
@@ -217,47 +220,33 @@ public class DexLoaderTest extends InstrumentationTestCase { |
} |
/** |
- * Test that {@link DexLoader#load()} re-extracts the dex file from the APK after a call to |
- * {@link DexLoader#deleteCachedDexes()}. |
+ * Test loading a dex file from a directory which was previously used for loading a different |
+ * dex file. |
*/ |
@MediumTest |
- public void testLoadAfterDeleteCachedDexes() { |
+ public void testLoadDifferentDexInLocalDataDir() { |
assertTrue(mLocalDexDir.mkdir()); |
- { |
- // 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)); |
+ // Load canary.dex |
+ ClassLoader loader1 = DexLoader.load( |
+ mRemoteContext, DEX_ASSET_NAME, CANARY_CLASS_NAME, null, mLocalDexDir); |
+ assertNotNull(loader1); |
+ assertTrue(canLoadCanaryClass(loader1)); |
- assertTrue(localDexDirMonitor.mReadPaths.contains(DEX_ASSET_NAME)); |
- assertTrue(localDexDirMonitor.mModifiedPaths.contains(DEX_ASSET_NAME)); |
- } |
+ File canaryDexFile1 = new File(mLocalDexDir, DEX_ASSET_NAME); |
+ assertTrue(canaryDexFile1.exists()); |
DexLoader.deleteCachedDexes(mLocalDexDir); |
- { |
- // 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(); |
+ ClassLoader loader2 = DexLoader.load( |
+ mRemoteContext, DEX_ASSET_NAME2, CANARY_CLASS_NAME2, null, mLocalDexDir); |
+ assertNotNull(loader2); |
+ assertTrue(canLoadClass(loader2, CANARY_CLASS_NAME2)); |
- // 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)); |
- } |
+ // 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()); |
} |
/** |
@@ -325,8 +314,13 @@ public class DexLoaderTest extends InstrumentationTestCase { |
/** 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(CANARY_CLASS_NAME); |
+ loader.loadClass(className); |
return true; |
} catch (Exception e) { |
return false; |