TestUtil.java revision 1319:5208d0c90d73
1/* 2 * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 20 * CA 95054 USA or visit www.sun.com if you need additional information or 21 * have any questions. 22 */ 23 24import java.nio.file.*; 25import java.nio.file.attribute.BasicFileAttributes; 26import java.util.Random; 27import java.io.IOException; 28 29public class TestUtil { 30 private TestUtil() { 31 } 32 33 public static Path createTemporaryDirectory() throws IOException { 34 Path tmpdir = Paths.get(System.getProperty("java.io.tmpdir")); 35 Random r = new Random(); 36 37 Path dir; 38 do { 39 dir = tmpdir.resolve("name" + r.nextInt()); 40 } while (dir.exists()); 41 return dir.createDirectory(); 42 } 43 44 static void removeAll(Path dir) { 45 Files.walkFileTree(dir, new FileVisitor<Path>() { 46 @Override 47 public FileVisitResult preVisitDirectory(Path dir) { 48 return FileVisitResult.CONTINUE; 49 } 50 @Override 51 public FileVisitResult preVisitDirectoryFailed(Path dir, IOException exc) { 52 System.err.format("Error occured accessing directory %s\n", dir, exc); 53 return FileVisitResult.CONTINUE; 54 } 55 @Override 56 public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { 57 try { 58 file.delete(); 59 } catch (IOException x) { 60 System.err.format("Unable to delete %s: %s\n", file, x); 61 } 62 return FileVisitResult.CONTINUE; 63 } 64 @Override 65 public FileVisitResult postVisitDirectory(Path dir, IOException exc) { 66 try { 67 dir.delete(); 68 } catch (IOException x) { 69 System.err.format("Unable to delete %s: %s\n", dir, x); 70 } 71 return FileVisitResult.CONTINUE; 72 } 73 @Override 74 public FileVisitResult visitFileFailed(Path file, IOException exc) { 75 System.err.format("Unable to visit %s: %s\n", file, exc); 76 return FileVisitResult.CONTINUE; 77 } 78 }); 79 } 80 81 static void deleteUnchecked(Path file) { 82 try { 83 file.delete(); 84 } catch (IOException exc) { 85 System.err.format("Unable to delete %s: %s\n", file, exc); 86 } 87 } 88 89 /** 90 * Creates a directory tree in the given directory so that the total 91 * size of the path is more than 2k in size. This is used for long 92 * path tests on Windows. 93 */ 94 static Path createDirectoryWithLongPath(Path dir) 95 throws IOException 96 { 97 StringBuilder sb = new StringBuilder(); 98 for (int i=0; i<240; i++) { 99 sb.append('A'); 100 } 101 String name = sb.toString(); 102 do { 103 dir = dir.resolve(name).resolve("."); 104 dir.createDirectory(); 105 } while (dir.toString().length() < 2048); 106 return dir; 107 } 108 109 /** 110 * Returns true if symbolic links are supported 111 */ 112 static boolean supportsLinks(Path dir) { 113 Path link = dir.resolve("testlink"); 114 Path target = dir.resolve("testtarget"); 115 try { 116 link.createSymbolicLink(target); 117 link.delete(); 118 return true; 119 } catch (UnsupportedOperationException x) { 120 return false; 121 } catch (IOException x) { 122 return false; 123 } 124 } 125} 126