/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.api.vfs.impl.file; import org.eclipse.che.api.vfs.Path; import org.eclipse.che.api.vfs.VirtualFile; import org.eclipse.che.api.vfs.VirtualFileSystemProvider; import org.eclipse.che.commons.lang.NameGenerator; import org.junit.Before; import org.junit.Test; import java.io.File; import static org.eclipse.che.api.project.shared.dto.event.FileWatcherEventType.CREATED; import static org.eclipse.che.api.project.shared.dto.event.FileWatcherEventType.DELETED; import static org.eclipse.che.api.project.shared.dto.event.FileWatcherEventType.MODIFIED; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * @author andrew00x */ public class DefaultFileWatcherNotificationHandlerTest { private File testDirectory; private FileWatcherNotificationListener notificationListener; private LocalVirtualFileSystem virtualFileSystem; private Path virtualFilePath; private VirtualFile virtualFile; private DefaultFileWatcherNotificationHandler notificationHandler; @Before public void setUp() throws Exception { File targetDir = new File(Thread.currentThread().getContextClassLoader().getResource(".").getPath()).getParentFile(); testDirectory = new File(targetDir, NameGenerator.generate("watcher-notifications-", 4)); virtualFileSystem = mock(LocalVirtualFileSystem.class, RETURNS_DEEP_STUBS); VirtualFileSystemProvider virtualFileSystemProvider = mock(VirtualFileSystemProvider.class); when(virtualFileSystemProvider.getVirtualFileSystem(true)).thenReturn(virtualFileSystem); notificationListener = mock(FileWatcherNotificationListener.class); notificationHandler = new DefaultFileWatcherNotificationHandler(virtualFileSystemProvider); notificationHandler.addNotificationListener(notificationListener); virtualFilePath = Path.of("/a/b/c"); virtualFile = new LocalVirtualFile(testDirectory, virtualFilePath, virtualFileSystem); when(virtualFileSystem.getRoot().getChild(virtualFilePath)).thenReturn(virtualFile); when(notificationListener.shouldBeNotifiedFor(virtualFile)).thenReturn(true); } @Test public void notifiesFileWatcherNotificationListenersWhenPathIsCreated() throws Exception { notificationHandler.handleFileWatcherEvent(CREATED, testDirectory, "/a/b/c", true); verify(notificationListener).shouldBeNotifiedFor(virtualFile); verify(notificationListener).onFileWatcherEvent(virtualFile, CREATED); } @Test public void notifiesFileWatcherNotificationListenersWhenPathIsDeleted() throws Exception { VirtualFile _viVirtualFile = virtualFile; deleteFile(); notificationHandler.handleFileWatcherEvent(DELETED, testDirectory, "/a/b/c", true); verify(notificationListener).shouldBeNotifiedFor(eq(_viVirtualFile)); verify(notificationListener).onFileWatcherEvent(eq(_viVirtualFile), eq(DELETED)); } private void deleteFile() { virtualFile = null; } @Test public void notifiesFileWatcherNotificationListenersWhenPathIsModified() throws Exception { notificationHandler.handleFileWatcherEvent(MODIFIED, testDirectory, "/a/b/c", true); verify(notificationListener).shouldBeNotifiedFor(virtualFile); verify(notificationListener).onFileWatcherEvent(virtualFile, MODIFIED); } }