diff --git a/utils/src/main/java/org/robolectric/util/TempDirectory.java b/utils/src/main/java/org/robolectric/util/TempDirectory.java index b45438a054a..cffcbcb59d1 100644 --- a/utils/src/main/java/org/robolectric/util/TempDirectory.java +++ b/utils/src/main/java/org/robolectric/util/TempDirectory.java @@ -13,10 +13,8 @@ import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; -import java.util.Arrays; import java.util.Collections; import java.util.HashSet; -import java.util.List; import java.util.Locale; import java.util.Set; import java.util.concurrent.ExecutorService; @@ -35,15 +33,6 @@ public class TempDirectory { */ private static final int DELETE_THREAD_POOL_SIZE = 5; - /** - * Assets related to the Robolectric Native Runtime (shared object files, ICU dat file, fonts) are - * extracted from a Jar file into a TempDirectory during runtime in order to be used. On Windows, - * it is not possible for the current JVM process to delete certain files due to OS constraints. - */ - @SuppressWarnings("ConstantCaseForConstants") - private static final List KNOWN_WINDOWS_UNDELETEABLE_FILES = - Collections.unmodifiableList(Arrays.asList("robolectric-nativeruntime.dll", "icudt68l.dat")); - private static final String TEMP_DIR_PREFIX = "robolectric-"; static final String OBSOLETE_MARKER_FILE_NAME = ".obsolete"; @@ -153,15 +142,15 @@ public void destroy() { Files.delete(basePath); } catch (IOException e) { if (isWindows()) { + // Windows is much more protective of files that have been opened in native code. For + // instance, unlike in Mac and Linux, it's not possible to delete nativeruntime files + // (dlls, fonts, icu data) in the same process where they were opened. Because of + // this, we need extra cleanup logic for Windows, and we avoid logging to prevent noise + // and confusion. createFile(OBSOLETE_MARKER_FILE_NAME, ""); - // Avoid spurious logging. - for (String s : KNOWN_WINDOWS_UNDELETEABLE_FILES) { - if (e.getLocalizedMessage().contains(s)) { - return; - } - } + } else { + Logger.error("Failed to destroy temp directory", e); } - Logger.error("Failed to destroy temp directory", e); } } diff --git a/utils/src/test/java/org/robolectric/util/TempDirectoryTest.kt b/utils/src/test/java/org/robolectric/util/TempDirectoryTest.kt index 5692400c155..f9b17231828 100644 --- a/utils/src/test/java/org/robolectric/util/TempDirectoryTest.kt +++ b/utils/src/test/java/org/robolectric/util/TempDirectoryTest.kt @@ -69,7 +69,6 @@ class TempDirectoryTest { if (!Files.exists(path)) { latch.countDown() } else { - System.err.println("DSP rescheduling") val ignored = service.schedule( { waitForDirectoryDeletion(path, latch, service) },