| 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;
|
|
|