From e8ce13c5e54ae5d70cd6bfd5c7f6807794d5679c Mon Sep 17 00:00:00 2001 From: "Luigi R. Viggiano" Date: Wed, 18 Sep 2013 23:42:26 +0200 Subject: [PATCH] trying to make the save() method atomic --- .../java/org/aeonbits/owner/UtilTest.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/test/java/org/aeonbits/owner/UtilTest.java b/src/test/java/org/aeonbits/owner/UtilTest.java index c9349ddf..f258faa4 100644 --- a/src/test/java/org/aeonbits/owner/UtilTest.java +++ b/src/test/java/org/aeonbits/owner/UtilTest.java @@ -37,15 +37,16 @@ public class UtilTest { @Test(expected = UnsupportedOperationException.class) public void testConstructor() { - new Util(){}; + new Util() { + }; } @Test public void testReverse() { - Integer[] i = { 1, 2, 3, 4, 5}; + Integer[] i = {1, 2, 3, 4, 5}; Integer[] result = Util.reverse(i); - assertTrue(Arrays.equals(new Integer[]{1, 2, 3, 4, 5}, i)); - assertTrue(Arrays.equals(new Integer[]{5, 4, 3, 2, 1}, result)); + assertTrue(Arrays.equals(new Integer[] {1, 2, 3, 4, 5}, i)); + assertTrue(Arrays.equals(new Integer[] {5, 4, 3, 2, 1}, result)); } @Test @@ -58,14 +59,27 @@ public void testIgnore() { public void testUnreachable() { try { unreachable(); - } catch(AssertionError err) { + } catch (AssertionError err) { assertEquals("this code should never be reached", err.getMessage()); } } public static void save(File target, Properties p) throws IOException { - target.getParentFile().mkdirs(); - p.store(new FileWriter(target), "saved for test"); + File parent = target.getParentFile(); + parent.mkdirs(); + if (isWindows()) { + p.store(new FileWriter(target), "saved for test"); + } else { + File tempFile = File.createTempFile(target.getName(), "temp", parent); + p.store(new FileWriter(tempFile), "saved for test"); + if (!tempFile.renameTo(target)) + throw new IOException(String.format("Failed to overwrite %s to %s", tempFile.toString(), + target.toString())); + } + } + + private static boolean isWindows() { + return System.getProperty("os.name").toLowerCase().indexOf("win") >= 0; } public static void delete(File target) throws IOException {