/* * Copyright 2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wamblee.io; import static org.mockito.Mockito.*; import junit.framework.TestCase; import org.apache.oro.io.AwkFilenameFilter; public class DirectoryMonitorTest extends TestCase { private static final String REGEX = "^.*\\.txt$"; private static final String FILE1 = "file1.txt"; private TestData _data; private DirectoryMonitor.Listener _listener; private DirectoryMonitor _monitor; @Override protected void setUp() throws Exception { super.setUp(); _data = new TestData(this); _data.clean(); _listener = mock(DirectoryMonitor.Listener.class); _monitor = new DirectoryMonitor(_data.getRoot(), new AwkFilenameFilter( REGEX), _listener); } public void testEmptyDir() { // Nothing is expected to be called. for (int i = 0; i < 10; i++) { _monitor.poll(); verifyNoMoreInteractions(_listener); } } public void testFileCreated() { _data.createFile(FILE1, "hello"); _monitor.poll(); verify(_listener).fileCreated(_data.getFile(FILE1)); } public void testFileDeleted() { _data.createFile(FILE1, "hello"); _monitor.poll(); reset(_listener); _data.deleteFile(FILE1); _monitor.poll(); verify(_listener).fileDeleted(_data.getFile(FILE1)); verifyNoMoreInteractions(_listener); } public void testFileChanged() throws InterruptedException { _data.createFile(FILE1, "hello"); _monitor.poll(); reset(_listener); Thread.sleep(2000); _data.deleteFile(FILE1); _data.createFile(FILE1, "bla"); _monitor.poll(); verify(_listener).fileChanged(_data.getFile(FILE1)); verifyNoMoreInteractions(_listener); } public void testFileFilterIsUsed() { _monitor.poll(); _data.createFile("file.xml", "hello"); _monitor.poll(); verifyNoMoreInteractions(_listener); } public void testDirectoryIsIgnored() { _monitor.poll(); _data.createDir(FILE1); _monitor.poll(); verifyNoMoreInteractions(_listener); } public void testExceptionsWIllLeadToRepeatedNotifications() { _monitor.poll(); _data.createFile(FILE1, "hello"); stubVoid(_listener).toThrow(new RuntimeException()).on(). fileCreated(_data.getFile(FILE1)); try { _monitor.poll(); } catch (RuntimeException e) { reset(_listener); // polling again should lead to the same filecreated call. // this time no exception is thrown. _monitor.poll(); verify(_listener).fileCreated(_data.getFile(FILE1)); verifyNoMoreInteractions(_listener); return; } fail(); // should not get here. } }