diff options
author | Narayan Kamath <narayan@google.com> | 2012-08-14 12:54:17 +0100 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2012-08-14 13:05:28 +0100 |
commit | e028ec166b5a270d0c330800d12a270494176fdf (patch) | |
tree | a3b4fe35f0b3b71511d381a5c6e15c5942fa4bc5 | |
parent | 39909902f8225d886e40f929aaa25a2ef2aa58ec (diff) | |
download | littlemock-e028ec166b5a270d0c330800d12a270494176fdf.tar.gz |
Fix app cache dir guessing.
A change to BaseDexClassLoader changed the format of
its toString output which we rely upon (yuck) to figure
out what the cache dir should be.
Change-Id: I0f28e3eff9eba70a1f5e6c538aa8da32c264515b
-rw-r--r-- | README | 3 | ||||
-rw-r--r-- | src/com/google/testing/littlemock/AppDataDirGuesser.java | 19 | ||||
-rw-r--r-- | tests/com/google/testing/littlemock/AppDataDirGuesserTest.java | 9 |
3 files changed, 28 insertions, 3 deletions
@@ -12,5 +12,6 @@ Has a number of restrictions. Can mock concrete classes, requires dexmaker.jar on classpath. Local Modifications: -No modifications. +- Change to AppDataDirGuesser to handle the new class loader toString + format introduced in JB. diff --git a/src/com/google/testing/littlemock/AppDataDirGuesser.java b/src/com/google/testing/littlemock/AppDataDirGuesser.java index e661ed6..254ed7e 100644 --- a/src/com/google/testing/littlemock/AppDataDirGuesser.java +++ b/src/com/google/testing/littlemock/AppDataDirGuesser.java @@ -75,7 +75,7 @@ public class AppDataDirGuesser { } // Parsing toString() method: yuck. But no other way to get the path. - // Strip out the bit between angle brackets, that's our path. + // Strip out the bit between square brackets, that's our path. String result = classLoader.toString(); int index = result.lastIndexOf('['); result = (index == -1) ? result : result.substring(index + 1); @@ -86,7 +86,7 @@ public class AppDataDirGuesser { // @VisibleForTesting File[] guessPath(String input) { List<File> results = new ArrayList<File>(); - for (String potential : input.split(":")) { + for (String potential : splitPathList(input)) { if (!potential.startsWith("/data/app/")) { continue; } @@ -110,10 +110,25 @@ public class AppDataDirGuesser { } } } + return results.toArray(new File[results.size()]); } // @VisibleForTesting + static String[] splitPathList(String input) { + String trimmed = input; + if (input.startsWith("dexPath=")) { + int start = "dexPath=".length(); + int end = input.indexOf(','); + + trimmed = (end == -1) ? input.substring(start) : + input.substring(start, end); + } + + return trimmed.split(":"); + } + + // @VisibleForTesting boolean fileOrDirExists(File file) { return file.exists(); } diff --git a/tests/com/google/testing/littlemock/AppDataDirGuesserTest.java b/tests/com/google/testing/littlemock/AppDataDirGuesserTest.java index 3ab38b2..191a608 100644 --- a/tests/com/google/testing/littlemock/AppDataDirGuesserTest.java +++ b/tests/com/google/testing/littlemock/AppDataDirGuesserTest.java @@ -67,6 +67,15 @@ public class AppDataDirGuesserTest extends TestCase { .shouldGive("/data/data/com.google.android.voicesearch/cache"); } + public void testSplitPathList() { + final String[] expected = { "foo", "bar" }; + assertTrue(Arrays.equals(expected, AppDataDirGuesser.splitPathList("foo:bar"))); + assertTrue(Arrays.equals(expected, + AppDataDirGuesser.splitPathList("dexPath=foo:bar"))); + assertTrue(Arrays.equals(expected, + AppDataDirGuesser.splitPathList("dexPath=foo:bar,bazPath=bar:bar2"))); + } + private interface TestCondition { TestCondition withNonWriteable(String... files); void shouldGive(String... files); |