package org.apache.commons.io.monitor; import java.io.File; import java.io.FileFilter; import org.apache.commons.io.filefilter.HiddenFileFilter; import org.apache.commons.io.filefilter.IOFileFilter; import junit.framework.TestCase; /** * {@link FileAlterationObserver} Test Case. */ public abstract class AbstractMonitorTestCase extends TestCase { /** * File observer */ protected FileAlterationObserver observer; /** * Listener which collects file changes */ protected CollectionFileListener listener; /** * Test diretory name */ protected String testDirName = null; /** * Directory for test files */ protected File testDir; /** * Time in milliseconds to pause in tests */ protected long pauseTime = 100L; /** * Construct a new test case. * * @param name The name of the test */ public AbstractMonitorTestCase(String name) { super(name); } @Override protected void setUp() throws Exception { testDir = new File(new File(".") , testDirName); if (testDir.exists()) { org.apache.commons.io.FileUtils.cleanDirectory(testDir); } else { testDir.mkdir(); } IOFileFilter files = org.apache.commons.io.filefilter.FileFilterUtils.fileFileFilter(); IOFileFilter javaSuffix = org.apache.commons.io.filefilter.FileFilterUtils.suffixFileFilter(".java"); IOFileFilter fileFilter = org.apache.commons.io.filefilter.FileFilterUtils.and(files, javaSuffix); IOFileFilter directories = org.apache.commons.io.filefilter.FileFilterUtils.directoryFileFilter(); IOFileFilter visible = HiddenFileFilter.VISIBLE; IOFileFilter dirFilter = org.apache.commons.io.filefilter.FileFilterUtils.and(directories, visible); IOFileFilter filter = org.apache.commons.io.filefilter.FileFilterUtils.or(dirFilter, fileFilter); createObserver(testDir, filter); } /** * Create a {@link FileAlterationObserver}. * * @param file The directory to observe * @param fileFilter The file filter to apply */ protected void createObserver(File file, FileFilter fileFilter) { observer = new FileAlterationObserver(file , fileFilter); observer.addListener(listener); observer.addListener(new org.apache.commons.io.monitor.FileAlterationListenerAdaptor()); try { observer.initialize(); } catch (Exception e) { fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),25,("Observer init() threw " + e)); } } @Override protected void tearDown() throws Exception { org.apache.commons.io.FileUtils.deleteDirectory(testDir); } /** * Check all the Collections are empty */ protected void checkCollectionsEmpty(String label) { checkCollectionSizes(("EMPTY-" + label), 0, 0, 0, 0, 0, 0); } /** * Check all the Collections have the expected sizes. */ protected void checkCollectionSizes(String label, int dirCreate, int dirChange, int dirDelete, int fileCreate, int fileChange, int fileDelete) { label = ((((((((((((label + "[") + (listener.getCreatedDirectories().size())) + " ") + (listener.getChangedDirectories().size())) + " ") + (listener.getDeletedDirectories().size())) + " ") + (listener.getCreatedFiles().size())) + " ") + (listener.getChangedFiles().size())) + " ") + (listener.getDeletedFiles().size())) + "]"; fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1,(label + ": No. of directories created")); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),2,dirCreate); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),4,listener.getCreatedDirectories(),3,listener.getCreatedDirectories().size()); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),5,(label + ": No. of directories changed")); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),6,dirChange); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),8,listener.getChangedDirectories(),7,listener.getChangedDirectories().size()); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),9,(label + ": No. of directories deleted")); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),10,dirDelete); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),12,listener.getDeletedDirectories(),11,listener.getDeletedDirectories().size()); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),13,(label + ": No. of files created")); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),14,fileCreate); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),16,listener.getCreatedFiles(),15,listener.getCreatedFiles().size()); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),17,(label + ": No. of files changed")); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),18,fileChange); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),20,listener.getChangedFiles(),19,listener.getChangedFiles().size()); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),21,(label + ": No. of files deleted")); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),22,fileDelete); fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),24,listener.getDeletedFiles(),23,listener.getDeletedFiles().size()); } /** * Either creates a file if it doesn't exist or updates the last modified date/time * if it does. * * @param file The file to touch * @return The file */ protected File touch(File file) { long lastModified = file.exists() ? file.lastModified() : 0; try { org.apache.commons.io.FileUtils.touch(file); file = new File(file.getParent() , file.getName()); while (lastModified == (file.lastModified())) { sleepHandleInterruped(pauseTime); org.apache.commons.io.FileUtils.touch(file); file = new File(file.getParent() , file.getName()); } } catch (Exception e) { fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),0,((("Touching " + file) + ": ") + e)); } sleepHandleInterruped(pauseTime); return file; } /** * Thread.sleep(timeInMilliseconds) - ignore InterruptedException */ protected void sleepHandleInterruped(long timeInMilliseconds) { try { java.lang.Thread.sleep(timeInMilliseconds); } catch (InterruptedException ie) { } } }