/* * Copyright (C) 2015 Patryk Strach * * This file is part of Virtual Slide Viewer. * * Virtual Slide Viewer is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software Foundation, * either version 3 of the License, or (at your option) any later version. * * Virtual Slide Viewer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with Virtual Slide Viewer. * If not, see <http://www.gnu.org/licenses/>. */ package virtualslideviewer.ui.imagelist; import java.util.Arrays; import java.util.Collections; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import virtualslideviewer.core.VirtualSlide; import virtualslideviewer.core.VirtualSlideImage; import virtualslideviewer.testutils.InPlaceExecutingThreadMarshaller; import virtualslideviewer.ui.imagelist.ImageListPresenter; import virtualslideviewer.ui.imagelist.ImageListView; import virtualslideviewer.undo.RemoveImageAction; import virtualslideviewer.undo.RenameImageAction; import virtualslideviewer.undo.UndoableActionSystem; public class ImageListPresenterTest { private VirtualSlide mVirtualSlideMock; private UndoableActionSystem mActionSystemMock; private ImageListView mViewMock; private ImageListPresenter mTestedPresenter; @Before public void setUp() throws Exception { mVirtualSlideMock = Mockito.mock(VirtualSlide.class); mActionSystemMock = Mockito.mock(UndoableActionSystem.class); mViewMock = Mockito.mock(ImageListView.class); mTestedPresenter = new ImageListPresenter(mViewMock, mActionSystemMock, new InPlaceExecutingThreadMarshaller()); Mockito.when(mVirtualSlideMock.getImageList()).thenReturn(Collections.nCopies(5, Mockito.mock(VirtualSlideImage.class))); mTestedPresenter.onVirtualSlideLoaded(mVirtualSlideMock, null); } @Test public void testShowImageCallsListenerWithCorrectImage() { ImageListPresenter.ImageShowListener listenerMock = Mockito.mock(ImageListPresenter.ImageShowListener.class); VirtualSlideImage imageMock = Mockito.mock(VirtualSlideImage.class); Mockito.when(mVirtualSlideMock.getImageList()).thenReturn(Arrays.asList(null, null, imageMock)); Mockito.when(mViewMock.getSelectedImageIndex()).thenReturn(2); mTestedPresenter.addImageShowListener(listenerMock); mTestedPresenter.showImage(); Mockito.verify(listenerMock).onImageShowRequest(imageMock); } @Test public void testShowImageDoesNotCallListenersWhenThereIsNoSelection() { ImageListPresenter.ImageShowListener listenerMock = Mockito.mock(ImageListPresenter.ImageShowListener.class); Mockito.when(mViewMock.getSelectedImageIndex()).thenReturn(-5); mTestedPresenter.addImageShowListener(listenerMock); mTestedPresenter.showImage(); Mockito.verify(listenerMock, Mockito.never()).onImageShowRequest(Mockito.any()); } @Test public void testRenameImageStartsNameEditing() { Mockito.when(mViewMock.getSelectedImageIndex()).thenReturn(2); mTestedPresenter.renameImage(); Mockito.verify(mViewMock).showNameEditor(2); } @Test public void testRenameImageDoesNotShowNameEditorWhenThereIsNoSelection() { Mockito.when(mViewMock.getSelectedImageIndex()).thenReturn(-1); mTestedPresenter.renameImage(); Mockito.verify(mViewMock, Mockito.never()).showNameEditor(Mockito.anyInt()); } @Test public void testStopImageNameEditingClosesTheNameEditor() { Mockito.when(mViewMock.getEditedImageIndex()).thenReturn(1); Mockito.when(mViewMock.getNameEditorValue()).thenReturn("TestName"); mTestedPresenter.stopImageNameEditing(); Mockito.verify(mViewMock).closeNameEditor(); } @Test public void testStopImageNameAddsRenameActionToActionSystem() { Mockito.when(mViewMock.getEditedImageIndex()).thenReturn(1); Mockito.when(mViewMock.getNameEditorValue()).thenReturn("TestName"); mTestedPresenter.stopImageNameEditing(); Mockito.verify(mActionSystemMock).execute(Mockito.isA(RenameImageAction.class)); } @Test public void testStopImageNameEditingDisplaysErrorMessageWhenTheNameIsEmpty() { Mockito.when(mViewMock.getEditedImageIndex()).thenReturn(2); Mockito.when(mViewMock.getNameEditorValue()).thenReturn(" "); mTestedPresenter.stopImageNameEditing(); Mockito.verify(mViewMock).displayErrorMessage(Mockito.any()); Mockito.verify(mViewMock, Mockito.never()).closeNameEditor(); Mockito.verifyZeroInteractions(mActionSystemMock); } @Test public void testStopImageNameEditingDoesNothingWhenEditingHasNotBeenStarted() { Mockito.when(mViewMock.getEditedImageIndex()).thenReturn(-1); mTestedPresenter.stopImageNameEditing(); Mockito.verify(mViewMock, Mockito.never()).closeNameEditor(); Mockito.verifyZeroInteractions(mActionSystemMock); } @Test public void testStopImageNameEditingClosesNameEditorAndDoesNothingElseWhenTheNameHasNotChanged() { VirtualSlideImage imageMock = Mockito.mock(VirtualSlideImage.class); Mockito.when(mVirtualSlideMock.getImageList()).thenReturn(Arrays.asList(null, imageMock, null)); Mockito.when(imageMock.getName()).thenReturn("TestName"); Mockito.when(mViewMock.getEditedImageIndex()).thenReturn(1); Mockito.when(mViewMock.getNameEditorValue()).thenReturn("TestName"); mTestedPresenter.stopImageNameEditing(); Mockito.verify(mViewMock).closeNameEditor(); Mockito.verifyZeroInteractions(mActionSystemMock); } @Test public void testRemoveImageExecutesRemoveAction() { Mockito.when(mViewMock.getSelectedImageIndex()).thenReturn(1); mTestedPresenter.removeImage(); Mockito.verify(mActionSystemMock).execute(Mockito.isA(RemoveImageAction.class)); } @Test public void testRemoveImageDoesNothingWhenThereIsNoSelection() { Mockito.when(mViewMock.getSelectedImageIndex()).thenReturn(-1); mTestedPresenter.removeImage(); Mockito.verifyZeroInteractions(mActionSystemMock); } }