1 /******************************************************************************* 2 * Copyright (c) 2008, 2017 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 * Karsten Stoeckmann <ngc2997@gmx.net> - Test case for Bug 220766 14 * [JFace] ImageRegistry.get does not work as expected (crashes with NullPointerException) 15 ******************************************************************************/ 16 17 package org.eclipse.jface.tests.images; 18 19 import java.io.IOException; 20 import java.net.URL; 21 import java.util.ArrayList; 22 import java.util.Enumeration; 23 import java.util.Iterator; 24 25 import org.eclipse.core.runtime.FileLocator; 26 import org.eclipse.core.runtime.Path; 27 import org.eclipse.jface.resource.ImageDescriptor; 28 import org.eclipse.swt.graphics.Image; 29 import org.osgi.framework.Bundle; 30 import org.osgi.framework.FrameworkUtil; 31 32 import junit.framework.TestCase; 33 34 /** 35 * Test loading a directory full of images. 36 * 37 * @since 3.4 38 * 39 */ 40 public class FileImageDescriptorTest extends TestCase { 41 42 protected static final String IMAGES_DIRECTORY = "/icons/imagetests"; 43 44 /** 45 * Create a new instance of the receiver. 46 * 47 * @param name 48 */ FileImageDescriptorTest(String name)49 public FileImageDescriptorTest(String name) { 50 super(name); 51 } 52 53 /** 54 * Test loading the image descriptors. 55 */ testFileImageDescriptorWorkbench()56 public void testFileImageDescriptorWorkbench() { 57 58 Class<?> missing = null; 59 ArrayList<Image> images = new ArrayList<>(); 60 61 Bundle bundle = FrameworkUtil.getBundle(FileImageDescriptorTest.class); 62 Enumeration<String> bundleEntries = bundle.getEntryPaths(IMAGES_DIRECTORY); 63 64 while (bundleEntries.hasMoreElements()) { 65 ImageDescriptor descriptor; 66 String localImagePath = bundleEntries.nextElement(); 67 URL[] files = FileLocator.findEntries(bundle, new Path(localImagePath)); 68 69 for (URL file : files) { 70 71 // Skip any subdirectories added by version control 72 if (file.getPath().lastIndexOf('.') < 0) { 73 continue; 74 } 75 76 try { 77 descriptor = ImageDescriptor.createFromFile(missing, FileLocator.toFileURL(file).getFile()); 78 } catch (IOException e) { 79 fail(e.getLocalizedMessage()); 80 continue; 81 } 82 83 Image image = descriptor.createImage(); 84 images.add(image); 85 86 } 87 88 } 89 90 Iterator<Image> imageIterator = images.iterator(); 91 while (imageIterator.hasNext()) { 92 imageIterator.next().dispose(); 93 } 94 95 } 96 97 /** 98 * Test the file image descriptor. 99 */ testFileImageDescriptorLocal()100 public void testFileImageDescriptorLocal() { 101 102 ImageDescriptor descriptor = ImageDescriptor.createFromFile(FileImageDescriptorTest.class, "anything.gif"); 103 104 Image image = descriptor.createImage(); 105 assertTrue("Could not find image", image != null); 106 image.dispose(); 107 108 } 109 110 /** 111 * Test for a missing file image descriptor. 112 */ testFileImageDescriptorMissing()113 public void testFileImageDescriptorMissing() { 114 115 ImageDescriptor descriptor = ImageDescriptor.createFromFile(FileImageDescriptorTest.class, "missing.gif"); 116 117 Image image = descriptor.createImage(false); 118 assertTrue("Found an image but should be null", image == null); 119 } 120 121 /** 122 * Test for a missing file image descriptor. 123 */ testFileImageDescriptorMissingWithDefault()124 public void testFileImageDescriptorMissingWithDefault() { 125 126 ImageDescriptor descriptor = ImageDescriptor.createFromFile(FileImageDescriptorTest.class, "missing.gif"); 127 128 Image image = descriptor.createImage(true); 129 assertTrue("Did not find default image", image != null); 130 } 131 132 } 133