/******************************************************************************* * Copyright (c) 2014, 2016 Original authors 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: * Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation ******************************************************************************/ package org.eclipse.nebula.widgets.nattable.layer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.eclipse.nebula.widgets.nattable.util.GUIHelper; import org.junit.Before; import org.junit.Test; public class SizeConfigScalingTest { private static final int DEFAULT_SIZE = 100; private SizeConfig sizeConfig; @Before public void setup() { this.sizeConfig = new SizeConfig(DEFAULT_SIZE); this.sizeConfig.setDpiConverter(new AbstractDpiConverter() { @Override protected void readDpiFromDisplay() { // use dpi of 144 which will result in a dpi factor of 1.5 this.dpi = 144; } }); } @Test public void getAggregateSize() throws Exception { assertEquals(1500, this.sizeConfig.getAggregateSize(10)); } @Test public void sizeOverride() throws Exception { this.sizeConfig.setSize(5, 120); // width of 120 pixels is upscaled to 180 assertEquals(180, this.sizeConfig.getSize(5)); } @Test public void getAggregateSizeWithSizeOverrides() throws Exception { this.sizeConfig.setSize(5, 120); this.sizeConfig.setSize(0, 10); // rounding issue with downscaling and upscaling assertEquals(15, this.sizeConfig.getAggregateSize(1)); // 10 + 400 + 120 assertEquals(795, this.sizeConfig.getAggregateSize(6)); // 10 + 800 + 120 assertEquals(1395, this.sizeConfig.getAggregateSize(10)); } @Test public void setIndexResizable() throws Exception { this.sizeConfig.setResizableByDefault(false); this.sizeConfig.setPositionResizable(2, true); this.sizeConfig.setSize(2, 120); assertEquals(480, this.sizeConfig.getAggregateSize(3)); } @Test public void ingnoreResizeForNonResizableColumns() throws Exception { this.sizeConfig.setResizableByDefault(false); this.sizeConfig.setSize(2, 120); assertEquals(450, this.sizeConfig.getAggregateSize(3)); } @Test public void allIndexesSameSize() throws Exception { assertTrue(this.sizeConfig.isAllPositionsSameSize()); this.sizeConfig.setSize(2, 120); assertFalse(this.sizeConfig.isAllPositionsSameSize()); } @Test public void testAggregateSize() { final SizeConfig sc = new SizeConfig(50); // Global default of 50 sc.setDpiConverter(new AbstractDpiConverter() { @Override protected void readDpiFromDisplay() { // use dpi of 144 which will result in a dpi factor of 1.5 this.dpi = 144; } }); sc.setSize(0, 30); sc.setSize(1, 30); // use global default for 3rd and 4th position assertEquals(240, sc.getAggregateSize(4)); } @Test public void testAggregateSizeWithPositionDefaults() { final SizeConfig sc = new SizeConfig(50); // Global default of 50 sc.setDpiConverter(new AbstractDpiConverter() { @Override protected void readDpiFromDisplay() { // use dpi of 144 which will result in a dpi factor of 1.5 this.dpi = 144; } }); sc.setSize(0, 30); sc.setSize(1, 30); // must not be considered as there is a size // set on 1st position sc.setDefaultSize(0, 10); // must be considered as there is no size // setting on 3rd position sc.setDefaultSize(2, 10); // use global default for 4th position // 30 + 30 + 10 + 50 assertEquals(180, sc.getAggregateSize(4)); } @Test public void testAggregateSizeCache() { final SizeConfig sc = new SizeConfig(100); sc.setDpiConverter(new AbstractDpiConverter() { @Override protected void readDpiFromDisplay() { // use dpi of 144 which will result in a dpi factor of 1.5 this.dpi = 144; } }); assertEquals(750, sc.getAggregateSize(5)); sc.setSize(0, 75); assertEquals(713, sc.getAggregateSize(5)); sc.setSize(1, 75); assertEquals(676, sc.getAggregateSize(5)); sc.setSize(2, 75); assertEquals(639, sc.getAggregateSize(5)); sc.setDefaultSize(75); assertEquals(565, sc.getAggregateSize(5)); sc.setSize(2, 100); assertEquals(602, sc.getAggregateSize(5)); } @Test public void testRounding() { // results in 128 upscaled because of rounding final SizeConfig sc = new SizeConfig(102); sc.setDpiConverter(new AbstractDpiConverter() { @Override protected void readDpiFromDisplay() { // use dpi of 120 which will result in a dpi factor of 1.25 this.dpi = 120; } }); assertEquals(178, sc.downScale(222)); assertEquals(223, sc.upScale(178)); assertEquals(128, sc.getSize(0)); assertEquals(128, sc.getSize(1)); assertEquals(128, sc.getSize(2)); assertEquals(384, sc.getAggregateSize(3)); } @Test public void testRoundingAllCustomSize() { final SizeConfig sc = new SizeConfig(100); sc.setDpiConverter(new AbstractDpiConverter() { @Override protected void readDpiFromDisplay() { // use dpi of 120 which will result in a dpi factor of 1.25 this.dpi = 120; } }); sc.setSize(0, 102); sc.setSize(1, 102); sc.setSize(2, 102); assertEquals(128, sc.getSize(0)); assertEquals(128, sc.getSize(1)); assertEquals(128, sc.getSize(2)); assertEquals(384, sc.getAggregateSize(3)); } @Test public void testRoundingMixedSize() { final SizeConfig sc = new SizeConfig(102); sc.setDpiConverter(new AbstractDpiConverter() { @Override protected void readDpiFromDisplay() { // use dpi of 120 which will result in a dpi factor of 1.25 this.dpi = 120; } }); // results because of scaling in 223 sc.setSize(1, 178); assertEquals(128, sc.getSize(0)); assertEquals(223, sc.getSize(1)); assertEquals(128, sc.getSize(2)); assertEquals(479, sc.getAggregateSize(3)); } @Test public void testScalingFactor() { assertEquals(1.0f, GUIHelper.getDpiFactor(96), 0); assertEquals(1.25f, GUIHelper.getDpiFactor(120), 0); assertEquals(1.33f, GUIHelper.getDpiFactor(128), 0); assertEquals(1.5f, GUIHelper.getDpiFactor(144), 0); assertEquals(1.75f, GUIHelper.getDpiFactor(168), 0); assertEquals(2.0f, GUIHelper.getDpiFactor(192), 0); assertEquals(2.5f, GUIHelper.getDpiFactor(240), 0); assertEquals(3.0f, GUIHelper.getDpiFactor(288), 0); assertEquals(1.0f, GUIHelper.getDpiFactor(78), 0); } }