diff --git a/webapp/test/edu/cornell/mannlib/vitro/testing/AbstractTestClass.java b/webapp/test/edu/cornell/mannlib/vitro/testing/AbstractTestClass.java index 813ea6bfb..83b604cb0 100644 --- a/webapp/test/edu/cornell/mannlib/vitro/testing/AbstractTestClass.java +++ b/webapp/test/edu/cornell/mannlib/vitro/testing/AbstractTestClass.java @@ -7,6 +7,7 @@ import static junit.framework.Assert.fail; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileFilter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; @@ -148,9 +149,29 @@ public abstract class AbstractTestClass { */ protected static void deleteFile(File file) { if (file.exists()) { - if (!file.delete()) { - fail("Unable to delete file '" + file.getPath() + "'"); - } + file.delete(); + } + if (!file.exists()) { + return; + } + + /* + * If we were unable to delete the file, is it because it's a non-empty + * directory? + */ + if (!file.isDirectory()) { + final StringBuffer message = new StringBuffer( + "Unable to delete directory '" + file.getPath() + "'\n"); + file.listFiles(new FileFilter() { + @Override + public boolean accept(File pathname) { + message.append(" contains file '" + pathname + "'\n"); + return true; + } + }); + fail(message.toString().trim()); + } else { + fail("Unable to delete file '" + file.getPath() + "'"); } } @@ -225,12 +246,22 @@ public abstract class AbstractTestClass { Writer writer = null; try { File file = new File(directory, filename); + if (file.exists()) { + throw new IOException("File '" + file.getPath() + + "' already exists."); + } file.createNewFile(); writer = new FileWriter(file); writer.write(contents); return file; } finally { - writer.close(); + if (writer != null) { + try { + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } } @@ -254,11 +285,17 @@ public abstract class AbstractTestClass { protected static String readAll(Reader reader) throws IOException { StringBuilder result = new StringBuilder(); BufferedReader buffered = new BufferedReader(reader); - String line; - while (null != (line = buffered.readLine())) { - result.append(line).append('\n'); + char[] chunk = new char[4096]; + int howMany; + + try { + while (-1 != (howMany = buffered.read(chunk))) { + result.append(chunk, 0, howMany); + } + } finally { + reader.close(); } - reader.close(); + return result.toString(); }