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