Commit 7bdd74a7 authored by Anton Tarasov's avatar Anton Tarasov
Browse files

Improve IconScaleTest

(cherry picked from commit bb6f5f0c)
parent c783b798
Showing with 37 additions and 30 deletions
+37 -30
......@@ -12,7 +12,6 @@ import com.intellij.util.ui.paint.AbstractPainter2DTest;
import com.intellij.util.ui.paint.PaintUtilTest;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
......@@ -21,6 +20,7 @@ import java.io.File;
import java.net.MalformedURLException;
import static com.intellij.util.ui.JBUI.ScaleType.SYS_SCALE;
import static com.intellij.util.ui.JBUI.ScaleType.USR_SCALE;
/**
* Tests that {@link CachedImageIcon#scale(float)} doesn't break the contract and scales correctly.
......@@ -49,44 +49,51 @@ public class IconScaleTest {
@Test
public void test() throws MalformedURLException {
Assume.assumeFalse("Linux doesn't support JRE-HiDPI yet", SystemInfo.isLinux);
test(1.0);
test(2.0);
test(2.5);
}
final double[] SCALES = {1, 2, 2.5};
public void test(double sysScale) throws MalformedURLException {
final int BASE_SIZE = 16;
final float ICON_SCALE = 1.75f;
//
// 1) JRE-HiDPI
//
PaintUtilTest.overrideJreHiDPIEnabled(true);
if (!SystemInfo.isLinux) { // Linux doesn't support JRE-HiDPI yet
for (double s : SCALES) test(1, s);
}
//
// 2) IDE-HiDPI
//
PaintUtilTest.overrideJreHiDPIEnabled(false);
for (double s : SCALES) test(s, 1);
}
public void test(double usrScale, double sysScale) throws MalformedURLException {
JBUI.setUserScaleFactor((float)usrScale);
ScaleContext ctx = ScaleContext.create(SYS_SCALE.of(sysScale), USR_SCALE.of(usrScale));
final int ICON_BASE_SIZE = 16;
final int ICON_USER_SIZE = (int)Math.round(ICON_BASE_SIZE * ctx.getScale(USR_SCALE));
final int ICON_REAL_SIZE = (int)Math.round(ICON_USER_SIZE * ctx.getScale(SYS_SCALE));
PaintUtilTest.overrideJreHiDPIEnabled(true);
JBUI.setUserScaleFactor(1);
final float ICON_SCALE = 1.75f;
final int ICON_SCALED_USER_SIZE = Math.round(ICON_USER_SIZE * ICON_SCALE);
final int ICON_SCALED_REAL_SIZE = Math.round(ICON_REAL_SIZE * ICON_SCALE);
CachedImageIcon icon = new CachedImageIcon(new File(getIconPath()).toURI().toURL());
icon.updateScale(SYS_SCALE.of(sysScale));
ScaleContext originalCtx = icon.getScaleContext().copy();
icon.updateScaleContext(ctx);
TestCase.assertEquals("unexpected icon user width", BASE_SIZE, icon.getIconWidth());
TestCase.assertEquals("unexpected icon user height", BASE_SIZE, icon.getIconHeight());
TestCase.assertEquals("unexpected icon real width", 0,
Double.compare(BASE_SIZE * sysScale, ImageUtil.getRealWidth(IconUtil.toImage(icon))));
TestCase.assertEquals("unexpected icon real height", 0,
Double.compare(BASE_SIZE * sysScale, ImageUtil.getRealHeight(IconUtil.toImage(icon))));
TestCase.assertEquals("unexpected icon user width", ICON_USER_SIZE, icon.getIconWidth());
TestCase.assertEquals("unexpected icon user height", ICON_USER_SIZE, icon.getIconHeight());
TestCase.assertEquals("unexpected icon real width", ICON_REAL_SIZE, ImageUtil.getRealWidth(IconUtil.toImage(icon)));
TestCase.assertEquals("unexpected icon real height", ICON_REAL_SIZE, ImageUtil.getRealHeight(IconUtil.toImage(icon)));
Icon scaledIcon = icon.scale(ICON_SCALE);
TestCase.assertFalse("new instance of the icon is expected", icon == scaledIcon);
TestCase.assertEquals("ScaleContext of the original icon changed", originalCtx, icon.getScaleContext());
TestCase.assertEquals("unexpected icon user width", 0,
Double.compare(BASE_SIZE * ICON_SCALE, scaledIcon.getIconWidth()));
TestCase.assertEquals("unexpected icon user height", 0,
Double.compare(BASE_SIZE * ICON_SCALE, scaledIcon.getIconHeight()));
TestCase.assertEquals("unexpected icon real width", 0,
Double.compare(BASE_SIZE * ICON_SCALE * sysScale, ImageUtil.getRealWidth(IconUtil.toImage(scaledIcon))));
TestCase.assertEquals("unexpected icon real height", 0,
Double.compare(BASE_SIZE * ICON_SCALE * sysScale, ImageUtil.getRealHeight(IconUtil.toImage(scaledIcon))));
TestCase.assertNotSame("new instance of the icon is expected", icon, scaledIcon);
TestCase.assertEquals("ScaleContext of the original icon changed", ctx, icon.getScaleContext());
TestCase.assertEquals("unexpected scaled icon user width", ICON_SCALED_USER_SIZE, scaledIcon.getIconWidth());
TestCase.assertEquals("unexpected scaled icon user height", ICON_SCALED_USER_SIZE, scaledIcon.getIconHeight());
TestCase.assertEquals("unexpected scaled icon real width", ICON_SCALED_REAL_SIZE, ImageUtil.getRealWidth(IconUtil.toImage(scaledIcon)));
TestCase.assertEquals("unexpected scaled icon real height", ICON_SCALED_REAL_SIZE, ImageUtil.getRealHeight(IconUtil.toImage(scaledIcon)));
}
private String getIconPath() {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment