/*
- * Copyright 2007 the original author or authors.
+ * Copyright 2005-2010 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.
* 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;
-import org.wamblee.test.ResettableMock;
-
public class DirectoryMonitorTest extends TestCase {
-
- private static final String REGEX = "^.*\\.txt$";
- private static final String FILE1 = "file1.txt";
-
- private TestData _data;
- private ResettableMock<DirectoryMonitor.Listener> _listener;
-
- private DirectoryMonitor _monitor;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- _data = new TestData(this);
- _data.clean();
- _listener = new ResettableMock<DirectoryMonitor.Listener>(
- DirectoryMonitor.Listener.class);
- _monitor = new DirectoryMonitor(_data.getRoot(), new AwkFilenameFilter(
- REGEX), _listener.getProxy());
- }
-
- public void testEmptyDir() {
- // Nothing is expected to be called.
- for (int i = 0; i < 10; i++) {
- _monitor.poll();
- verifyNoMoreInteractions(_listener.getMock());
- }
- }
-
- public void testFileCreated() {
- _data.createFile(FILE1, "hello");
- _monitor.poll();
- verify(_listener.getMock()).fileCreated(_data.getFile(FILE1));
- }
-
- public void testFileDeleted() {
- _data.createFile(FILE1, "hello");
- _monitor.poll();
- _listener.reset();
-
- _data.deleteFile(FILE1);
- _monitor.poll();
-
- verify(_listener.getMock()).fileDeleted(_data.getFile(FILE1));
- verifyNoMoreInteractions(_listener.getMock());
- }
-
- public void testFileChanged() throws InterruptedException {
- _data.createFile(FILE1, "hello");
- _monitor.poll();
- _listener.reset();
-
- Thread.sleep(2000);
- _data.deleteFile(FILE1);
- _data.createFile(FILE1, "bla");
-
- _monitor.poll();
- verify(_listener.getMock()).fileChanged(_data.getFile(FILE1));
- verifyNoMoreInteractions(_listener.getMock());
- }
-
- public void testFileFilterIsUsed() {
- _monitor.poll();
-
- _data.createFile("file.xml", "hello");
- _monitor.poll();
- verifyNoMoreInteractions(_listener.getMock());
- }
-
- public void testDirectoryIsIgnored() {
- _monitor.poll();
- _data.createDir(FILE1);
- _monitor.poll();
- verifyNoMoreInteractions(_listener.getMock());
- }
-
- public void testExceptionsWIllLeadToRepeatedNotifications() {
- _monitor.poll();
- _data.createFile(FILE1, "hello");
-
- stubVoid(_listener.getMock()).toThrow(new RuntimeException()).on().
- fileCreated(_data.getFile(FILE1));
-
- try {
- _monitor.poll();
- } catch (RuntimeException e) {
- _listener.reset();
-
- // polling again should lead to the same filecreated call.
- // this time no exception is thrown.
-
- _monitor.poll();
- verify(_listener.getMock()).fileCreated(_data.getFile(FILE1));
- verifyNoMoreInteractions(_listener.getMock());
- return;
- }
- fail(); // should not get here.
-
-
- }
+ 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 RegexFilenameFilter(
+ 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.
+ }
}