diff options
-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); |