1 19 20 package unit.org.openide.filesystems; 21 22 import java.io.File ; 23 import java.io.IOException ; 24 import java.net.URL ; 25 import java.util.Enumeration ; 26 import java.util.Properties ; 27 import org.netbeans.junit.NbTestCase; 28 import org.netbeans.junit.NbTestSuite; 29 import org.openide.filesystems.FileChangeAdapter; 30 import org.openide.filesystems.FileEvent; 31 import org.openide.filesystems.FileObject; 32 import org.openide.filesystems.FileSystem; 33 import org.openide.filesystems.FileUtil; 34 import org.openide.filesystems.JarFileSystem; 35 import org.openide.filesystems.LocalFileSystem; 36 import org.openide.filesystems.MultiFileSystem; 37 import org.openide.filesystems.Repository; 38 import org.openide.filesystems.URLMapper; 39 import org.openide.filesystems.XMLFileSystem; 40 import org.openide.util.Lookup; 41 42 46 public class FilesystemBugs extends NbTestCase { 47 final String FOLDER1 = "F"; 48 final String FO1 ="testNFOADelete"; 49 private int counter; 50 51 public FilesystemBugs(String name) { 52 super(name); 53 } 54 60 61 public void testNotifyOfSubFoldersAfterDelete23929 () throws IOException { 62 counter = 0; 63 if (canGenWriteFolder()) { 64 FileObject folder = getWriteFolder(); 67 log(folder.toString()); 68 folder = getSubFolder(folder, FOLDER1); 69 FileObject tmpFolder = folder; 70 System.out.println(folder); 71 for (int i = 0 ; i < 10 ; i++ ) { 72 FileObject subFolder = getSubFolder(tmpFolder,FOLDER1 + i); 73 subFolder.addFileChangeListener(new TestFileChangeListener()); 74 for (int j = 0 ; j < 10 ; j++ ) { 75 FileObject fo = getFileObject(tmpFolder, FO1 + j); 76 fo.addFileChangeListener(new TestFileChangeListener()); 77 } 78 tmpFolder = subFolder; 79 } 80 try { 83 folder.delete(); 84 assertTrue ("test failed, deleted " + counter + " != 209" , counter == 209); 85 } catch (Exception e) { 86 assertTrue("cannot delete folder",false); 87 } 88 89 } else { 90 log ("[OK] cannot get write folder on " + getFSType()); 91 } 92 } 93 95 protected FileObject getSubFolder(FileObject folder, String name) { 96 try { 97 FileObject fo = folder.getFileObject(name); 98 if (fo == null) { 99 return folder.createFolder(name); 100 } 101 return fo; 102 } catch (IOException e) { 103 e.printStackTrace(); 104 assertTrue("cannot get subFolder " + name + " in " + folder.toString(),false); 105 } 106 return null; 107 } 108 110 protected FileObject getFileObject(FileObject folder, String name) { 111 try { 112 FileObject fo = folder.getFileObject(name); 113 if (fo == null) { 114 return folder.createData(name); 115 } 116 return fo; 117 } catch (Exception e) { 118 assertTrue("cannot get subFolder " + name + " in " + folder.toString(),false); 119 } 120 return null; 121 } 122 123 private class TestFileChangeListener extends FileChangeAdapter { 124 public void fileDeleted(FileEvent ev) { 125 log("Delete: " + ev.getFile().getPath()); 126 counter++; 127 } 128 } 129 130 131 132 protected boolean canGenWriteFolder() { 133 return true; 134 } 135 protected FileObject getWriteFolder() throws IOException { 136 String folderName = "unit/org/openide/filesystems/"; 137 FileObject folder = Repository.getDefault().findResource(folderName); 138 assertNotNull("folder : " + folder + " doesn't exists.",folder); 139 FileObject myFolder = folder.getFileObject("data"); 140 if (myFolder == null) { 141 myFolder = folder.createFolder("data"); 142 } 143 return folder; 144 } 145 146 protected String getFSType() { 147 return "LocalFileSystem"; 148 } 149 150 155 public void testDeleteAttrsFileAfterDeleteAttrib() throws IOException { 156 FileObject folder = getWriteFolder(); 157 FileObject fo = folder.getFileObject("testAttr"); 158 if (fo == null) { 159 fo = folder.createData("testAttr"); 160 } 161 fo.setAttribute("blbost","blbost"); 163 System.gc(); 165 System.gc(); 166 FileObject fos[] = folder.getChildren(); 168 for (int i = 0 ; i < fos.length ; i++ ) { 169 Enumeration keys = fos[i].getAttributes(); 170 while (keys.hasMoreElements()) { 171 fos[i].setAttribute((String )keys.nextElement(),null); 172 } 173 } 174 System.gc(); 176 System.gc(); 177 File nbattrs = new File (FileUtil.toFile(folder),".nbattrs"); 179 assertTrue("Empty nbattrs exists in folder:" + FileUtil.toFile(folder) , nbattrs.exists() == false); 180 181 182 } 183 191 192 public void testURLContract() throws IOException { 193 FileObject fo = getWriteFolder(); 194 URL u = fo.getURL(); 195 assertEquals(u, new URL (u.toExternalForm())); 196 } 197 208 209 public void testFindFOfromURL() throws IOException { 210 FileObject fo = getWriteFolder(); 211 URL u = fo.getURL(); 212 URLMapper urlMapper = (URLMapper) Lookup.getDefault().lookup(URLMapper.class); 213 FileObject fos[] = urlMapper.findFileObjects(u); 214 assertTrue("url " + u + " must to only one FileObject",fos.length==1); 215 assertTrue("The references must be equal.", fo == fos[0]); 216 217 } 218 234 public void testMultiAttrsBug26400() throws Exception { 235 File f1,f2; 236 File dir = new File (File.createTempFile("fsdf","eew").getParentFile(),"aret"); 237 dir.mkdirs(); 238 assertTrue(dir.isDirectory()); 239 f1 = new File (dir,"tm26400a"); 240 f2 = new File (dir,"tm26400b"); 241 f1.mkdir(); 242 f2.mkdir(); 243 LocalFileSystem lfs1 = new LocalFileSystem(); 244 LocalFileSystem lfs2 = new LocalFileSystem(); 245 lfs1.setRootDirectory(f1); 246 lfs2.setRootDirectory(f2); 247 249 MultiFileSystem mfs = new MultiFileSystem(new FileSystem[]{lfs1,lfs2}); 250 FileObject rootMfs = mfs.getRoot(); 251 FileObject folder = getSubFolder(rootMfs,"a"); 253 FileObject fo = getFileObject(folder, "b"); 254 fo.setAttribute("attr","value"); 255 assertTrue("folder contains attribute", folder.getAttributes().hasMoreElements() == false); 256 assertTrue("FileObject doesn't contain attribute attr.", fo.getAttribute("attr").equals("value")); 257 } 258 266 267 268 public void testFolderSlashUrl () throws Exception { 269 URL u = getWriteFolder().getURL(); 270 assertTrue("invalid url of directory",u.getPath().endsWith("/")); 271 } 272 273 275 public void testOpenJarManifestAsResource() throws Exception { 276 Repository repo = Repository.getDefault (); 277 JarFileSystem jfs = new JarFileSystem (); 278 File nbHome = new File (System.getProperty("netbeans.home")); 279 File jarName = new File (new File (nbHome,"lib"), "openide.jar"); 280 jfs.setJarFile (jarName); 281 repo.addFileSystem (jfs); 282 repo.removeFileSystem (jfs); 283 FileObject fo = jfs.findResource ("org/openide/filesystems/Repository.class"); 286 assertTrue("FileObject must to be valid", fo.isValid ()); 287 try { 288 assertNotNull("FileObject must to have InputStream (fo.getInputStream ()"); 289 } catch (Exception e) { 290 e.printStackTrace(getLog()); 291 fail("Exception " + e); 292 } 293 294 298 } 299 public void testBackSlashAttribute33459() throws IOException { 300 FileObject fo = getWriteFolder(); 301 String attribName = "y\\u2dasfas"; 302 System.gc(); 303 System.gc(); 304 try { 305 fo.setAttribute(attribName,attribName); 306 System.gc(); 307 System.gc(); 308 assertTrue("Attribute is not equal", fo.getAttribute(attribName).equals(attribName)); 309 System.out.println("ok"); 310 } catch (Exception e) { 311 log(e.toString()); 312 e.printStackTrace(); 313 fail("Exception :" + e ) ; 314 } 315 } 316 317 public static NbTestSuite suite() { 318 NbTestSuite suite = new NbTestSuite(); 319 suite.addTest(new FilesystemBugs("testDeleteAttrsFileAfterDeleteAttrib")); 320 suite.addTest(new FilesystemBugs("testMultiAttrsBug26400")); 321 suite.addTest(new FilesystemBugs("testNotifyOfSubFoldersAfterDelete23929")); 322 suite.addTest(new FilesystemBugs("testURLContract")); 323 suite.addTest(new FilesystemBugs("testFindFOfromURL")); 324 suite.addTest(new FilesystemBugs("testOpenJarManifestAsResource")); 325 suite.addTest(new FilesystemBugs("testFolderSlashUrl")); 326 suite.addTest(new FilesystemBugs("testBackSlashAttribute33459")); 327 return suite; 328 } 329 330 public void testMultiLayers19725() throws Exception { 331 XMLFileSystem origFs = new XMLFileSystem(FilesystemBugs.class.getResource("layer1.xml")); 332 XMLFileSystem brandedFs = new XMLFileSystem(FilesystemBugs.class.getResource("layer2.xml")); 333 MultiFileSystem mfs = new MultiFileSystem(new FileSystem[]{brandedFs,origFs}); 334 FileObject fo = mfs.findResource("myfolder"); 335 log("file1/file2 = " + fo.getAttribute("file1/file2").toString()); 336 log("file2/file1 = " + fo.getAttribute("file2/file1").toString()); 337 assertTrue(fo.getAttribute("file1/file2").equals(Boolean.FALSE)); 338 assertTrue(fo.getAttribute("file2/file1").equals(Boolean.TRUE)); 339 } 340 341 344 public static void main(String [] args) { 345 junit.textui.TestRunner.run(new FilesystemBugs("testMultiLayers19725")); 346 } 347 348 } 349 | Popular Tags |