Skip to content

Commit d04585a

Browse files
committed
Merge pull request #72 from scijava/windows-temp-dir
Work around Windows problems with temporary directories
2 parents 678e9fa + 297aae7 commit d04585a

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/main/java/org/scijava/test/TestUtils.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,15 @@ public static File createTemporaryDirectory(final String prefix,
120120
baseDirectory = new File(path);
121121
}
122122

123-
final File file = new File(baseDirectory, prefix + suffix);
124-
if (file.isDirectory()) FileUtils.deleteRecursively(file);
123+
File file = new File(baseDirectory, prefix + suffix);
124+
if (file.isDirectory()) {
125+
if (!FileUtils.deleteRecursively(file)) {
126+
// Oh, how I *love* Windows. Love, love, love.
127+
for (int i = -1; file.isDirectory(); i--) {
128+
file = new File(baseDirectory, prefix + i + suffix);
129+
}
130+
}
131+
}
125132
else if (file.exists() && !file.delete()) {
126133
throw new IOException("Could not remove " + file);
127134
}

src/test/java/org/scijava/util/TestUtilsTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
import static org.junit.Assert.assertTrue;
3535

3636
import java.io.File;
37+
import java.io.FileOutputStream;
3738
import java.io.IOException;
39+
import java.util.Arrays;
3840

3941
import org.junit.Test;
4042
import org.scijava.test.TestUtils;
@@ -63,4 +65,19 @@ public void testCreateTemporaryDirectory() throws IOException {
6365
assertTrue(!tmp3.getAbsolutePath().equals(tmp4.getAbsolutePath()));
6466

6567
}
68+
69+
@Test
70+
public void sameDirectoryTwice() throws IOException {
71+
final FileOutputStream[] out = new FileOutputStream[2];
72+
for (int i = 0; i < 2; i++) {
73+
final File tmp = TestUtils.createTemporaryDirectory("same-");
74+
assertTrue(tmp != null);
75+
final String[] list = tmp.list();
76+
assertTrue("Not null: " + Arrays.toString(list), list == null || list.length == 0);
77+
out[i] = new FileOutputStream(new File(tmp, "hello" + i + ".txt"));
78+
}
79+
for (final FileOutputStream stream : out) {
80+
if (stream != null) stream.close();
81+
}
82+
}
6683
}

0 commit comments

Comments
 (0)