Index: FileObjectTestHid.java =================================================================== RCS file: /cvs/openide/fs/test/unit/src/org/openide/filesystems/FileObjectTestHid.java,v retrieving revision 1.13 diff -u -r1.13 FileObjectTestHid.java --- FileObjectTestHid.java 13 Sep 2006 14:50:17 -0000 1.13 +++ FileObjectTestHid.java 9 Feb 2007 10:59:37 -0000 @@ -24,8 +24,12 @@ import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.*; +import java.lang.ref.Reference; +import java.lang.ref.WeakReference; import java.util.*; import java.net.*; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -72,6 +76,129 @@ //Reference ref = new WeakReference (root); root = null; //assertGC("", ref); + } + + private static enum EventType { DATA_CREATED, FOLDER_CREATED,DELETED, MODIFIED, RENAMED}; + public void testEventDelivery() throws Exception { + checkSetUp(); + if (root.getFileSystem().isReadOnly()) { + return; + } + final FileObject testRoot = root; + FileObject testParentFolder = FileUtil.createFolder(testRoot,"/a"); + assertNotNull(testParentFolder); + FileObject testfile = FileUtil.createData(testParentFolder,"/b/c/d/"+getName()); + assertTrue(testfile.isValid()); + final URI testfileURI = testfile.getURL().toURI(); + final URI testRootURI = testRoot.getURL().toURI(); + final URI testParentFolderURI = testParentFolder.getURL().toURI(); + + + testfile.delete(); + assertFalse(testfile.isValid()); + final String testPath = testfile.getPath(); + Reference ref = new WeakReference(testfile); + testfile = null; + assertGC("", ref); + + testParentFolder.delete(); + ref = new WeakReference(testParentFolder); + testParentFolder = null; + assertGC("", ref); + + FileChangeListenerImpl fml = new FileChangeListenerImpl(testfileURI); + FileChangeListenerImpl fml2 = new FileChangeListenerImpl(testRootURI); + FileChangeListenerImpl fml3 = new FileChangeListenerImpl(testParentFolderURI); + + assertFalse(fml.called); + Repository.getDefault().addFileSystem(this.testedFS); + assertTrue(FileChangeManager.addFileChangeListener(testfileURI, true, fml)); + assertTrue(FileChangeManager.addFileChangeListener(testRootURI, true, fml2)); + assertTrue(FileChangeManager.addFileChangeListener(testParentFolderURI, true, fml3)); + try { + for (int i = 0; i < 10; i++) { + assertFalse(fml.called); + FileObject fo = FileUtil.createData(testRoot,testPath); + assertEquals(fo.getPath(), testPath); + assertTrue(fo.isValid()); + fml.asserts(testfileURI,EventType.DATA_CREATED); + fml2.asserts(testfileURI,EventType.DATA_CREATED); + + OutputStream os = fo.getOutputStream(); + try { + os.write("string".getBytes()); + } finally { + os.close(); + } + fml.asserts(testfileURI,EventType.MODIFIED); + fml2.asserts(testfileURI,EventType.MODIFIED); + + + fo.delete(); + fml.asserts(testfileURI,EventType.DELETED); + fml2.asserts(testfileURI,EventType.DELETED); + } + } finally { + assertTrue(FileChangeManager.removeFileChangeListener(testfileURI, fml)); + assertTrue(FileChangeManager.removeFileChangeListener(testRootURI, fml2)); + assertTrue(FileChangeManager.removeFileChangeListener(testParentFolderURI, fml3)); + Repository.getDefault().removeFileSystem(this.testedFS); + } + } + + private static class FileChangeListenerImpl implements FileChangeListener { + boolean called; + URI parent; + URI uri; + EventType type; + + FileChangeListenerImpl(URI parent) { + this.parent = parent; + } + + void asserts(URI uri, EventType type) { + try { + assertTrue(called); + assertEquals(this.type, type); + assertEquals(uri, this.uri); + } finally { + called = false; + } + } + + private void fileEvent(FileEvent fe, EventType type) { + called = true; + this.type = type; + try { + uri = URLMapper.findURL(fe.getFile(),URLMapper.INTERNAL).toURI(); + } catch (URISyntaxException ex) { + Logger.getLogger("global").log(Level.SEVERE, ex.getMessage(), ex); + } + } + + public void fileFolderCreated(FileEvent fe) { + fileEvent(fe, EventType.FOLDER_CREATED); + } + + public void fileDataCreated(FileEvent fe) { + fileEvent(fe, EventType.DATA_CREATED); + + } + + public void fileChanged(FileEvent fe) { + fileEvent(fe, EventType.MODIFIED); + } + + public void fileDeleted(FileEvent fe) { + fileEvent(fe, EventType.DELETED); + } + + public void fileRenamed(FileRenameEvent fe) { + fileEvent(fe, EventType.RENAMED); + } + + public void fileAttributeChanged(FileAttributeEvent fe) { + } } public void testEventsDelivery81746() throws Exception {