package com.bc.util.watch; import junit.framework.TestCase; import java.io.File; import com.bc.util.io.UnitTestFile; public class FileWatchTest extends TestCase { private FileWatch fileWatch; protected void setUp() { fileWatch = new FileWatch(); } public void testAddFile() { UnitTestFile file = new UnitTestFile("somewhere"); assertEquals(0, fileWatch.getNumFiles()); fileWatch.add(file); assertEquals(1, fileWatch.getNumFiles()); fileWatch.add(null); assertEquals(1, fileWatch.getNumFiles()); } public void testThatSameFileCannotBeAddedTwice() { UnitTestFile file = new UnitTestFile("somewhere"); assertEquals(0, fileWatch.getNumFiles()); fileWatch.add(file); assertEquals(1, fileWatch.getNumFiles()); fileWatch.add(file); assertEquals(1, fileWatch.getNumFiles()); } public void testAddingNonExistingFileOrDirectoryFails() { UnitTestFile file = new UnitTestFile("this/file.ile"); file.setIsFile(false); try { fileWatch.add(file); fail("IllegalArgumentException expected"); } catch (IllegalArgumentException expected) { } } public void testRemoveFile() { UnitTestFile file = new UnitTestFile("/not/in/here/but/there"); fileWatch.add(file); assertEquals(1, fileWatch.getNumFiles()); fileWatch.remove(file); assertEquals(0, fileWatch.getNumFiles()); } public void testRemoveIllegalFiles() { UnitTestFile file = new UnitTestFile("C:\\nasenmann.org"); UnitTestFile file_2 = new UnitTestFile("/usr/loca/blasgt"); fileWatch.add(file); assertEquals(1, fileWatch.getNumFiles()); fileWatch.remove(null); assertEquals(1, fileWatch.getNumFiles()); fileWatch.remove(file_2); assertEquals(1, fileWatch.getNumFiles()); } public void testNoChangesOnCheck() { UnitTestFile file = new UnitTestFile("C:\\nasenmann.org"); fileWatch.add(file); File[] changedFiles = fileWatch.getChangedFiles(); assertEquals(0, changedFiles.length); } public void testChangesAreDetectedAndReset() { UnitTestFile file = new UnitTestFile("C:\\nasenmann.org"); UnitTestFile file_2 = new UnitTestFile("/usr/loca/blasgt"); fileWatch.add(file); fileWatch.add(file_2); File[] changedFiles = fileWatch.getChangedFiles(); assertEquals(0, changedFiles.length); file.setLastModified(file.lastModified() + 3); changedFiles = fileWatch.getChangedFiles(); assertEquals(1, changedFiles.length); changedFiles = fileWatch.getChangedFiles(); assertEquals(0, changedFiles.length); file.setLastModified(file.lastModified() + 3); file_2.setLastModified(file_2.lastModified() + 3); changedFiles = fileWatch.getChangedFiles(); assertEquals(2, changedFiles.length); changedFiles = fileWatch.getChangedFiles(); assertEquals(0, changedFiles.length); } public void testThatListenerCanBeAttachedAndRemoved() { UnitTestFileListener listener_1 = new UnitTestFileListener(); UnitTestFileListener listener_2 = new UnitTestFileListener(); assertEquals(0, fileWatch.getNumListeners()); fileWatch.addListener(listener_1); assertEquals(1, fileWatch.getNumListeners()); fileWatch.addListener(listener_2); assertEquals(2, fileWatch.getNumListeners()); fileWatch.removeListener(listener_1); assertEquals(1, fileWatch.getNumListeners()); fileWatch.removeListener(listener_2); assertEquals(0, fileWatch.getNumListeners()); } public void testNullCannotBeUsedAsListener() { UnitTestFileListener listener = new UnitTestFileListener(); assertEquals(0, fileWatch.getNumListeners()); fileWatch.addListener(null); assertEquals(0, fileWatch.getNumListeners()); fileWatch.addListener(listener); assertEquals(1, fileWatch.getNumListeners()); fileWatch.removeListener(null); assertEquals(1, fileWatch.getNumListeners()); } public void testThatSameListenerCannotAttachTwice() { UnitTestFileListener listener = new UnitTestFileListener(); assertEquals(0, fileWatch.getNumListeners()); fileWatch.addListener(listener); assertEquals(1, fileWatch.getNumListeners()); fileWatch.addListener(listener); assertEquals(1, fileWatch.getNumListeners()); } /** @noinspection MagicNumber*/ public void testThatListenerIsNotifiedWhenChangesOccured() { UnitTestFile file = new UnitTestFile("C:\\hier\\isses.org"); UnitTestFileListener listener_1 = new UnitTestFileListener(); UnitTestFileListener listener_2 = new UnitTestFileListener(); assertEquals(0, listener_1.getNumChangedFiles()); assertEquals(0, listener_2.getNumChangedFiles()); fileWatch.addListener(listener_1); fileWatch.addListener(listener_2); fileWatch.add(file); fileWatch.checkForModifiedFiles(); assertEquals(0, listener_1.getNumChangedFiles()); assertEquals(0, listener_2.getNumChangedFiles()); file.setLastModified(file.lastModified() + 23); fileWatch.checkForModifiedFiles(); assertEquals(1, listener_1.getNumChangedFiles()); assertEquals(1, listener_2.getNumChangedFiles()); } public void testThatListenersAreNotifiedOnMultipleFilesChanged() { UnitTestFile file_1 = new UnitTestFile("C:\\hier\\isses.org"); UnitTestFile file_2 = new UnitTestFile("C:\\da\\auch.hup"); UnitTestFile file_3 = new UnitTestFile("/usr/home/test.file"); fileWatch.add(file_1); fileWatch.add(file_2); fileWatch.add(file_3); assertEquals(3, fileWatch.getNumFiles()); UnitTestFileListener listener = new UnitTestFileListener(); fileWatch.addListener(listener); assertEquals(0, listener.getNumChangedFiles()); file_2.setLastModified(file_2.lastModified() + 4); file_3.setLastModified(file_3.lastModified() + 4); fileWatch.checkForModifiedFiles(); assertEquals(2, listener.getNumChangedFiles()); fileWatch.checkForModifiedFiles(); assertEquals(0, listener.getNumChangedFiles()); file_1.setLastModified(file_1.lastModified() + 4); fileWatch.checkForModifiedFiles(); assertEquals(1, listener.getNumChangedFiles()); } /** @noinspection MagicNumber*/ public void testTimerWorks() { UnitTestFile file = new UnitTestFile("C:\\hier\\a.file"); fileWatch.add(file); UnitTestFileListener listener = new UnitTestFileListener(); fileWatch.addListener(listener); fileWatch.start(50); file.setLastModified(file.lastModified() + 25); try { Thread.sleep(60); } catch (InterruptedException ignore) { } assertEquals(1, listener.getNumChangedFiles()); fileWatch.stop(); } /** @noinspection MagicNumber*/ public void testTimerStopDoesNotFailWhenClickedTwice() { fileWatch.start(50); fileWatch.stop(); fileWatch.stop(); } }