/******************************************************************************* * Copyright (c) 2013, 2013 Andrew Gvozdev and others. * 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: * Andrew Gvozdev - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.make.ui.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.net.URL; import org.eclipse.cdt.make.internal.ui.MakeUIImages; import org.eclipse.cdt.make.internal.ui.MakeUIPlugin; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.swt.graphics.Image; import org.junit.Test; public class MakeUIImagesTest { private static final ImageDescriptor MISSING_IMAGE_DESCRIPTOR = ImageDescriptor.getMissingImageDescriptor(); // sample image (IMG_ETOOL_MAKEFILE) from MakeUIPlugin bundle private static final String KEY_ETOOL_MAKEFILE = MakeUIImages.IMG_ETOOL_MAKEFILE; private static final IPath PATH_ETOOL_MAKEFILE = new Path("icons/etool16/makefile.gif"); private static final URL URL_ETOOL_MAKEFILE= FileLocator.find(MakeUIPlugin.getDefault().getBundle(), PATH_ETOOL_MAKEFILE, null); /** * Handling of missing keys. */ @Test public void testNoImage() throws Exception { ImageDescriptor descriptor = MakeUIImages.getImageDescriptor("missing key 1"); assertSame(MISSING_IMAGE_DESCRIPTOR, descriptor); Image image1 = MakeUIImages.getImage("missing key 1"); Image image2 = MakeUIImages.getImage("missing key 2"); assertSame(image1, image2); } /** * Test regular images. */ @Test public void testImage() throws Exception { // create descriptor from MakeUIImages key ImageDescriptor descriptorFromKey = MakeUIImages.getImageDescriptor(KEY_ETOOL_MAKEFILE); assertNotSame(MISSING_IMAGE_DESCRIPTOR, descriptorFromKey); // create descriptor from registered bundle URL as a key MakeUIImages.register(URL_ETOOL_MAKEFILE); ImageDescriptor descriptorFromUrl = MakeUIImages.getImageDescriptor(URL_ETOOL_MAKEFILE.toString()); assertNotSame(MISSING_IMAGE_DESCRIPTOR, descriptorFromUrl); assertSame(descriptorFromKey, descriptorFromUrl); // verify that it is the same image Image imageFromKey = MakeUIImages.getImage(KEY_ETOOL_MAKEFILE); Image imageFromUrl = MakeUIImages.getImage(URL_ETOOL_MAKEFILE.toString()); assertSame(imageFromKey, imageFromUrl); // verify that no leaks on second access Image imageFromKey2 = MakeUIImages.getImage(KEY_ETOOL_MAKEFILE); assertSame(imageFromKey, imageFromKey2); } /** * Test images with overlays. */ @Test public void testOverlays() throws Exception { { Image image1 = MakeUIImages.getImageOverlaid(KEY_ETOOL_MAKEFILE, new String[5]); Image image2 = MakeUIImages.getImage(KEY_ETOOL_MAKEFILE); assertSame(image1, image2); } { String[] overlayKeys = new String[5]; overlayKeys[IDecoration.BOTTOM_LEFT] = MakeUIImages.IMG_OVR_AUTOMATIC; Image imageOver1 = MakeUIImages.getImageOverlaid(KEY_ETOOL_MAKEFILE, overlayKeys); Image imageOver2 = MakeUIImages.getImageOverlaid(KEY_ETOOL_MAKEFILE, MakeUIImages.IMG_OVR_AUTOMATIC, IDecoration.BOTTOM_LEFT); assertSame(imageOver1, imageOver2); } } /** * Verify that MakeUIImages constants define existing images. */ @Test public void testVerifyFields() throws Exception { Class<MakeUIImages> clazz = MakeUIImages.class; Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { String name = field.getName(); if (name.startsWith("IMG_")) { assertEquals("MakeUIImages."+name+" is not a String", String.class, field.getType()); assertTrue("MakeUIImages."+name+" is not a static field", (field.getModifiers() & Modifier.STATIC) != 0); assertTrue("MakeUIImages."+name+" is not a public field", (field.getModifiers() & Modifier.PUBLIC) != 0); String imageKey = (String) field.get(null); ImageDescriptor descriptor = MakeUIImages.getImageDescriptor(imageKey); assertTrue("Missing image MakeUIImages."+name+"=\""+imageKey+"\"", descriptor!=MISSING_IMAGE_DESCRIPTOR); } } } }