package org.eclipse.riena.e4.launcher.part;
import java.net.URI;
import java.net.URL;
import junit.framework.TestCase;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory;
import org.eclipse.e4.ui.workbench.IPresentationEngine;
import org.eclipse.swt.graphics.Point;
import org.eclipse.riena.core.util.ReflectionUtils;
import org.eclipse.riena.navigation.ui.swt.views.ImageReplacer;
import org.eclipse.riena.ui.swt.lnf.LnfManager;
import org.eclipse.riena.ui.swt.lnf.rienadefault.RienaDefaultLnf;
import org.eclipse.riena.ui.swt.utils.SwtUtilities;
/**
* Tests of the class {@link E4ImageReplacer}.
*/
public class E4ImageReplacerTest extends TestCase {
/**
* Tests the method {@code getInstance()}.
*
* @throws Exception
* handled by JUnit
*/
public void testGetInstance() throws Exception {
final E4ImageReplacer replacer = E4ImageReplacer.getInstance();
assertNotNull(replacer);
assertSame(replacer, E4ImageReplacer.getInstance());
assertNotSame(replacer, ImageReplacer.getInstance());
}
/**
* Tests the <i>private</i> method {@code getDisabledIconURI}.
*
* @throws Exception
* handled by JUnit
*/
public void testGetDisabledIconURI() throws Exception {
final E4ImageReplacer replacer = E4ImageReplacer.getInstance();
final MHandledItem item = MMenuFactory.INSTANCE.createHandledMenuItem();
String uri = ReflectionUtils.invokeHidden(replacer, "getDisabledIconURI", item); //$NON-NLS-1$
assertEquals("", uri); //$NON-NLS-1$
final String dummyUri = "dummyDisabledUri"; //$NON-NLS-1$
item.getTransientData().put(IPresentationEngine.DISABLED_ICON_IMAGE_KEY, dummyUri);
uri = ReflectionUtils.invokeHidden(replacer, "getDisabledIconURI", item); //$NON-NLS-1$
assertEquals(dummyUri, uri);
}
/**
* Tests the <i>private</i> method {@code getDisabledIconURI}.
*
* @throws Exception
* handled by JUnit
*/
public void testSetDisabledIconURI() throws Exception {
final E4ImageReplacer replacer = E4ImageReplacer.getInstance();
final MHandledItem item = MMenuFactory.INSTANCE.createHandledMenuItem();
String uri = (String) item.getTransientData().get(IPresentationEngine.DISABLED_ICON_IMAGE_KEY);
assertNull(uri);
final String dummyUri = "dummyDisabledUri"; //$NON-NLS-1$
ReflectionUtils.invokeHidden(replacer, "setDisabledIconURI", item, dummyUri); //$NON-NLS-1$
uri = (String) item.getTransientData().get(IPresentationEngine.DISABLED_ICON_IMAGE_KEY);
assertEquals(dummyUri, uri);
}
/**
* Tests the <i>private</i> method {@code getReplaceUri(String)}.
*
* @throws Exception
* handled by JUnit
*/
public void testGetReplaceUri() throws Exception {
final RienaDefaultLnf originalLnf = LnfManager.getLnf();
LnfManager.setLnf(new MyLnf());
final E4ImageReplacer replacer = E4ImageReplacer.getInstance();
URL url = this.getClass().getResource("/icons/testimagea00.png"); //$NON-NLS-1$
String uri = url.toURI().toString();
String path = URI.create(uri).getPath();
String scaledUri = ReflectionUtils.invokeHidden(replacer, "getReplaceUri", uri); //$NON-NLS-1$
String scaledPath = URI.create(scaledUri).getPath();
assertEquals(scaledPath, path);
final Point dpi = SwtUtilities.getDpi();
ReflectionUtils.setHidden(SwtUtilities.class, "cachedDpi", new Point(144, 144)); //$NON-NLS-1$
scaledUri = ReflectionUtils.invokeHidden(replacer, "getReplaceUri", uri); //$NON-NLS-1$
url = this.getClass().getResource("/icons/testimagea03.png"); //$NON-NLS-1$
uri = url.toURI().toString();
path = URI.create(uri).getPath();
scaledPath = URI.create(scaledUri).getPath();
assertEquals(scaledPath, path);
ReflectionUtils.setHidden(SwtUtilities.class, "cachedDpi", dpi); //$NON-NLS-1$
LnfManager.setLnf(originalLnf);
}
private static class MyLnf extends RienaDefaultLnf {
@Override
public String getIconScaleSuffix(final Point dpi) {
if (dpi == null) {
return "00"; //$NON-NLS-1$
}
if (dpi.x <= 96) {
return "00"; //$NON-NLS-1$
}
return "03"; //$NON-NLS-1$
}
}
}