23 24 /** 25 * @test 26 * @bug 4806786 27 * @summary jar -C doesn't ignore multiple // in path 28 */ 29 30 import java.io.*; 31 import java.util.*; 32 import java.util.jar.*; 33 import sun.tools.jar.Main; 34 35 public class ChangeDir { 36 private final static String jarName = "test.jar"; 37 private final static String fileName = "hello.txt"; 38 39 /** Remove dirs & files needed for test. */ 40 private static void cleanup(File dir) throws Throwable { 41 if (dir != null && dir.exists()) { 42 for (File ff : dir.listFiles()) { 43 check(ff.delete()); 44 } 45 check(dir.delete()); 46 check(new File(jarName).delete()); 47 } 48 } 49 50 public static void realMain(String[] args) throws Throwable { 51 doTest("/"); 52 doTest("//"); 53 doTest("///"); 54 doTest("////"); 55 if (System.getProperty("os.name").startsWith("Windows")) { 56 doTest("\\"); 57 doTest("\\\\"); 58 doTest("\\\\\\"); 59 doTest("\\\\\\\\"); 60 doTest("\\/"); 61 } 62 } 63 64 static void doTest(String sep) throws Throwable { 65 File testDir = null; 66 JarFile jf = null; 67 try { 68 // Create a subdirectory "a/b" 69 File f = File.createTempFile("delete", ".me"); 70 String dirName = f.getParent(); 71 testDir = new File(dirName + sep + "a" + sep + "b"); 72 cleanup(testDir); 73 check(testDir.mkdirs()); 74 75 // Create file in that subdirectory 76 File testFile = new File(testDir, fileName); 77 check(testFile.createNewFile()); 78 79 // Create a jar file from that subdirectory, but with a // in the 80 // path name. 81 List<String> argList = new ArrayList<String>(); 82 argList.add("cf"); 83 argList.add(jarName); 84 argList.add("-C"); 85 argList.add(dirName + sep + "a" + sep + sep + "b"); // Note double 'sep' is intentional 86 argList.add(fileName); 87 String jarArgs[] = new String[argList.size()]; 88 jarArgs = argList.toArray(jarArgs); 89 90 Main jarTool = new Main(System.out, System.err, "jar"); 91 if (!jarTool.run(jarArgs)) { 92 fail("Could not create jar file."); 93 } 94 95 // Check that the entry for hello.txt does *not* have a pathname. 96 jf = new JarFile(jarName); 97 for (Enumeration<JarEntry> i = jf.entries(); i.hasMoreElements();) { 98 JarEntry je = i.nextElement(); 99 String name = je.getName(); 100 if (name.indexOf(fileName) != -1) { 101 if (name.indexOf(fileName) != 0) { 102 fail(String.format( 103 "Expected '%s' but got '%s'%n", fileName, name)); 104 } 105 } 106 } 107 } finally { 108 if (jf != null) { 109 jf.close(); 110 } 111 cleanup(testDir); 112 } 113 } 114 115 //--------------------- Infrastructure --------------------------- 116 static volatile int passed = 0, failed = 0; 117 static void pass() {passed++;} 118 static void fail() {failed++; Thread.dumpStack();} 119 static void fail(String msg) {System.out.println(msg); fail();} 120 static void unexpected(Throwable t) {failed++; t.printStackTrace();} 121 static void check(boolean cond) {if (cond) pass(); else fail();} 122 static void equal(Object x, Object y) { 123 if (x == null ? y == null : x.equals(y)) pass(); 124 else fail(x + " not equal to " + y);} 125 public static void main(String[] args) throws Throwable { 126 try {realMain(args);} catch (Throwable t) {unexpected(t);} 127 System.out.println("\nPassed = " + passed + " failed = " + failed); 128 if (failed > 0) throw new AssertionError("Some tests failed");} 129 } | 23 24 /** 25 * @test 26 * @bug 4806786 27 * @summary jar -C doesn't ignore multiple // in path 28 */ 29 30 import java.io.*; 31 import java.util.*; 32 import java.util.jar.*; 33 import sun.tools.jar.Main; 34 35 public class ChangeDir { 36 private final static String jarName = "test.jar"; 37 private final static String fileName = "hello.txt"; 38 39 /** Remove dirs & files needed for test. */ 40 private static void cleanup(File dir) throws Throwable { 41 if (dir != null && dir.exists()) { 42 for (File ff : dir.listFiles()) { 43 if (ff.isDirectory()) { 44 cleanup(ff); 45 } else { 46 check(ff.delete()); 47 } 48 } 49 check(dir.delete()); 50 } 51 } 52 53 public static void realMain(String[] args) throws Throwable { 54 doTest("/"); 55 doTest("//"); 56 doTest("///"); 57 doTest("////"); 58 if (System.getProperty("os.name").startsWith("Windows")) { 59 doTest("\\"); 60 doTest("\\\\"); 61 doTest("\\\\\\"); 62 doTest("\\\\\\\\"); 63 doTest("\\/"); 64 } 65 } 66 67 static void doTest(String sep) throws Throwable { 68 File topDir = null; 69 File jarFile = new File(jarName); 70 JarFile jf = null; 71 try { 72 // Create a subdirectory "a/b" 73 topDir = File.createTempFile("delete", ".me"); 74 check(topDir.delete()); 75 76 File testDir = new File(topDir.getPath() + sep + "a" + sep + "b"); 77 cleanup(testDir); 78 jarFile.delete(); 79 check(testDir.mkdirs()); 80 81 // Create file in that subdirectory 82 File testFile = new File(testDir, fileName); 83 check(testFile.createNewFile()); 84 85 // Create a jar file from that subdirectory, but with a // in the 86 // path name. 87 List<String> argList = new ArrayList<String>(); 88 argList.add("cf"); 89 argList.add(jarName); 90 argList.add("-C"); 91 argList.add(topDir.getPath() + sep + "a" + sep + sep + "b"); // Note double 'sep' is intentional 92 argList.add(fileName); 93 String jarArgs[] = new String[argList.size()]; 94 jarArgs = argList.toArray(jarArgs); 95 96 Main jarTool = new Main(System.out, System.err, "jar"); 97 if (!jarTool.run(jarArgs)) { 98 fail("Could not create jar file."); 99 } 100 101 // Check that the entry for hello.txt does *not* have a pathname. 102 jf = new JarFile(jarName); 103 for (Enumeration<JarEntry> i = jf.entries(); i.hasMoreElements();) { 104 JarEntry je = i.nextElement(); 105 String name = je.getName(); 106 if (name.indexOf(fileName) != -1) { 107 if (name.indexOf(fileName) != 0) { 108 fail(String.format( 109 "Expected '%s' but got '%s'%n", fileName, name)); 110 } 111 } 112 } 113 } finally { 114 if (jf != null) { 115 jf.close(); 116 } 117 cleanup(topDir); 118 jarFile.delete(); 119 } 120 } 121 122 //--------------------- Infrastructure --------------------------- 123 static volatile int passed = 0, failed = 0; 124 static void pass() {passed++;} 125 static void fail() {failed++; Thread.dumpStack();} 126 static void fail(String msg) {System.out.println(msg); fail();} 127 static void unexpected(Throwable t) {failed++; t.printStackTrace();} 128 static void check(boolean cond) {if (cond) pass(); else fail();} 129 static void equal(Object x, Object y) { 130 if (x == null ? y == null : x.equals(y)) pass(); 131 else fail(x + " not equal to " + y);} 132 public static void main(String[] args) throws Throwable { 133 try {realMain(args);} catch (Throwable t) {unexpected(t);} 134 System.out.println("\nPassed = " + passed + " failed = " + failed); 135 if (failed > 0) throw new AssertionError("Some tests failed");} 136 } |