package com.codeaffine.extras.imageviewer.internal; import static com.codeaffine.extras.imageviewer.internal.ImageViewerEditor.ID; import static com.codeaffine.extras.imageviewer.internal.Images.GIF_IMAGE; import static com.codeaffine.extras.imageviewer.internal.Images.PNG_IMAGE; import static org.assertj.core.api.Assertions.assertThat; import static org.eclipse.core.resources.IResource.NONE; import java.io.File; import java.io.InputStream; import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.ImageData; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPersistableElement; import org.eclipse.ui.IStorageEditorInput; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.part.FileEditorInput; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import com.codeaffine.extras.test.util.ProjectHelper; public class ImageViewerEditorPDETest { @Rule public final ProjectHelper projectHelper = new ProjectHelper(); @Rule public final TemporaryFolder tempFolder = new TemporaryFolder(); private IWorkbenchPage activePage; @Before public void setUp() { activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); } @Test public void testOpenFromJaredImage() throws PartInitException { ImageViewerEditor editor = openImageViewerEditor( new ImageEditorInput() ); assertThat( editor.imageCanvas.getImageDatas() ).isNotEmpty(); } @Test public void testOpenFromWorkspaceImage() throws CoreException { IFile file = projectHelper.getProject().getFile( "image.gif" ); file.create( getClass().getResourceAsStream( GIF_IMAGE ), NONE, null ); IEditorInput editorInput = new FileEditorInput( file ); ImageViewerEditor editor = openImageViewerEditor( editorInput ); assertThat( editor.imageCanvas.getImageDatas() ).isNotEmpty(); } @Test public void testOpenFromFilesystemFile() throws Exception { Path file = new File( tempFolder.getRoot(), "image.gif" ).toPath(); Files.copy( getClass().getResourceAsStream( GIF_IMAGE ), file ); URI uri = file.toUri(); ImageViewerEditor editor = openImageViewerEditor( uri ); assertThat( editor.imageCanvas.getImageDatas() ).isNotEmpty(); } @Test public void testOpenWithUnsupportedEditorInput() throws PartInitException { IEditorInput editorInput = new UnsupportedEditorInput(); IEditorPart editor = IDE.openEditor( activePage, editorInput, ID, true ); assertThat( editor ).isNotInstanceOf( ImageViewerEditor.class ); } @Test public void testReopen() throws CoreException { IFile file1 = projectHelper.getProject().getFile( "image.gif" ); file1.create( getClass().getResourceAsStream( GIF_IMAGE ), NONE, null ); IFile file2 = projectHelper.getProject().getFile( "image.png" ); file2.create( getClass().getResourceAsStream( PNG_IMAGE ), NONE, null ); ImageViewerEditor editor = openImageViewerEditor( new FileEditorInput( file1 ) ); ImageData[] imageDatas1 = editor.imageCanvas.getImageDatas(); editor.getSite().getPage().reuseEditor( editor, new FileEditorInput( file2 ) ); ImageData[] imageDatas2 = editor.imageCanvas.getImageDatas(); assertThat( imageDatas1 ).isNotEqualTo( imageDatas2 ); } private ImageViewerEditor openImageViewerEditor( URI uri ) throws PartInitException { return ( ImageViewerEditor )IDE.openEditor( activePage, uri, ID, true ); } private ImageViewerEditor openImageViewerEditor( IEditorInput editorInput ) throws PartInitException { return ( ImageViewerEditor )IDE.openEditor( activePage, editorInput, ID, true ); } private static class UnsupportedEditorInput implements IEditorInput { @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public Object getAdapter( Class adapter ) { return null; } @Override public String getToolTipText() { return ""; } @Override public IPersistableElement getPersistable() { return null; } @Override public String getName() { return "Unsuported"; } @Override public ImageDescriptor getImageDescriptor() { return null; } @Override public boolean exists() { return false; } } private static class ImageEditorInput implements IStorageEditorInput { @Override public boolean exists() { return true; } @Override public ImageDescriptor getImageDescriptor() { return null; } @Override public String getName() { return GIF_IMAGE; } @Override public IPersistableElement getPersistable() { return null; } @Override public String getToolTipText() { return ""; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public Object getAdapter( Class adapter ) { return Platform.getAdapterManager().getAdapter( this, adapter ); } @Override public IStorage getStorage() throws CoreException { return new ImageStorage(); } } private static class ImageStorage implements IStorage { @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public Object getAdapter( Class adapter ) { return Platform.getAdapterManager().getAdapter( this, adapter ); } @Override public boolean isReadOnly() { return true; } @Override public String getName() { return GIF_IMAGE; } @Override public IPath getFullPath() { return null; } @Override public InputStream getContents() { return getClass().getResourceAsStream( GIF_IMAGE ); } } }