1 /*
   2  * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.javafx.css;
  27 
  28 import static org.junit.Assert.assertEquals;
  29 import javafx.scene.text.Font;
  30 
  31 import org.junit.Test;
  32 
  33 
  34 public class SizeTest {
  35 
  36     public SizeTest() {
  37     }
  38 
  39     static final private double DOTS_PER_INCH = 96.0;
  40     static final private double POINTS_PER_INCH = 72.0;
  41 
  42     /**
  43      * Test of points method, of class Size.
  44      */
  45     @Test
  46     public void testPoints() {
  47         final Font font = Font.font("Amble", 16);
  48         final double pixelSize = font.getSize();
  49         final double pointSize = pixelSize * (POINTS_PER_INCH / DOTS_PER_INCH);
  50 
  51         Size instance = new Size(12.0, SizeUnits.PX);
  52         double expResult = 12.0  * (POINTS_PER_INCH/DOTS_PER_INCH);
  53         double result = instance.points(font);
  54         assertEquals("px", expResult, result, 0.01);
  55 
  56         instance = new Size(12.0, SizeUnits.PT);
  57         expResult = 12.0; // PT is absolute
  58         result = instance.points(font);
  59         assertEquals("pt", expResult, result, 0.01);
  60 
  61         instance = new Size(50.0, SizeUnits.PERCENT);
  62         expResult = 0.5 * pointSize;
  63         result = instance.points(pointSize, font);
  64         assertEquals("%", expResult, result, 0.01);
  65 
  66         instance = new Size(2, SizeUnits.EM);
  67         expResult = 2 * pointSize;
  68         result = instance.points(font);
  69         assertEquals("em", expResult, result, 0.01);
  70 
  71         instance = new Size(1.0, SizeUnits.EX);
  72         expResult = 0.5 * pointSize;
  73         result = instance.points(font);
  74         assertEquals("ex", expResult, result, 0.01);
  75 
  76 
  77         instance = new Size(1.0, SizeUnits.CM);
  78         expResult = POINTS_PER_INCH/2.54; // CM is absolute (pts per inch/cm per inch)
  79         result = instance.points(font);
  80         assertEquals("cm", expResult, result, 0.01);
  81 
  82         instance = new Size(1.0, SizeUnits.MM);
  83         expResult = POINTS_PER_INCH/25.4; // MM is absolute (pts per inch/mm per inch)
  84         result = instance.points(font);
  85         assertEquals("mm", expResult, result, 0.01);
  86 
  87         instance = new Size(1.0, SizeUnits.IN);
  88         expResult = POINTS_PER_INCH; // IN is absolute (pts per inch)
  89         result = instance.points(font);
  90         assertEquals("in", expResult, result, 0.01);
  91 
  92         instance = new Size(1.0, SizeUnits.PC);
  93         expResult = 12.0; // PC is absolute (pts per pica)
  94         result = instance.points(font);
  95         assertEquals("pc", expResult, result, 0.01);
  96 
  97     }
  98 
  99     /**
 100      * Test of pixels method, of class Size.
 101      */
 102     @Test
 103     public void testPixels() {
 104         final Font font = Font.font("Amble", 16);
 105         final double pixelSize = font.getSize();
 106         final double pointSize = pixelSize * (POINTS_PER_INCH / DOTS_PER_INCH);
 107 
 108         Size instance = new Size(12.0, SizeUnits.PX);
 109         double expResult = 12.0;
 110         double result = instance.pixels(font);
 111         assertEquals("px", expResult, result, 0.01);
 112 
 113         instance = new Size(12.0, SizeUnits.PT);
 114         expResult = 12.0 * (DOTS_PER_INCH / POINTS_PER_INCH);
 115         result = instance.pixels(font);
 116         assertEquals("pt", expResult, result, 0.01);
 117 
 118         instance = new Size(50.0, SizeUnits.PERCENT);
 119         expResult = .5 * pixelSize;
 120         result = instance.pixels(pixelSize, font);
 121         assertEquals("%", expResult, result, 0.01);
 122 
 123         instance = new Size(2, SizeUnits.EM);
 124         expResult = 2 * pixelSize;
 125         result = instance.pixels(font);
 126         assertEquals("em", expResult, result, 0.01);
 127 
 128         instance = new Size(1.0, SizeUnits.EX);
 129         expResult = .5 * pixelSize;
 130         result = instance.pixels(font);
 131         assertEquals("ex", expResult, result, 0.01);
 132 
 133         instance = new Size(1.0, SizeUnits.CM);
 134         // 1 cm / cm per inch
 135         expResult = (1/2.54f) * DOTS_PER_INCH;
 136         result = instance.pixels(font);
 137         assertEquals("cm", expResult, result, 0.01);
 138 
 139         instance = new Size(1.0, SizeUnits.MM);
 140         // 1mm / mm per inch
 141         expResult = (1/25.4f) * DOTS_PER_INCH;
 142         result = instance.pixels(font);
 143         assertEquals("mm", expResult, result, 0.01f);
 144 
 145         instance = new Size(1.0, SizeUnits.IN);
 146         expResult = DOTS_PER_INCH;
 147         result = instance.pixels(font);
 148         assertEquals("in", expResult, result, 0.01f);
 149 
 150         instance = new Size(1.0, SizeUnits.PC);
 151         // 1pc * 12 pt per pc yields points, then convert points to pixels
 152         expResult = (1*12.0) * (DOTS_PER_INCH / POINTS_PER_INCH);
 153         result = instance.pixels(1.0, font);
 154         assertEquals("pc", expResult, result, 0.01f);
 155 
 156     }
 157 
 158 
 159     /**
 160      * Test of sizes with angle units.
 161      */
 162     @Test
 163     public void testAngles() {
 164 
 165         // 360 degrees = 2pi radians
 166         // 90 degrees as radians
 167         double expResult = 90;
 168 
 169         Size instance = new Size(0.5*Math.PI, SizeUnits.RAD);
 170         double result = instance.pixels();
 171         assertEquals("1/2pi rad to deg", expResult, result, 0.01);
 172 
 173         instance = new Size(100, SizeUnits.GRAD);
 174         result = instance.pixels();
 175         assertEquals("100grad to deg", expResult, result, 0.01);
 176 
 177         instance = new Size(.25, SizeUnits.TURN);
 178         result = instance.pixels();
 179         assertEquals(".25turn to deg", expResult, result, 0.01);
 180     }
 181 
 182     /**
 183      * Test of sizes with time units.
 184      */
 185     @Test
 186     public void testTime() {
 187 
 188         double expResult = 90;
 189 
 190         Size instance = new Size(90, SizeUnits.S);
 191         double result = instance.pixels();
 192         assertEquals("90s", expResult, result, 0.01);
 193 
 194         instance = new Size(90, SizeUnits.MS);
 195         result = instance.pixels();
 196         assertEquals("90ms", expResult, result, 0.01);
 197 
 198     }
 199 
 200 
 201     /**
 202      * Test of equals method, of class Size.
 203      */
 204     @Test
 205     public void testEquals() {
 206         Object o = new Size(2.0, SizeUnits.PX);
 207         Size instance = new Size(1.0, SizeUnits.PX);
 208         boolean expResult = false;
 209         boolean result = instance.equals(o);
 210         assertEquals(expResult, result);
 211 
 212         o = new Size(2.0, SizeUnits.PX);
 213         instance = new Size(2.0, SizeUnits.PX);
 214         expResult = true;
 215         result = instance.equals(o);
 216         assertEquals(expResult, result);
 217 
 218         o = new Size(2.0, SizeUnits.PT);
 219         instance = new Size(2.0, SizeUnits.EM);
 220         expResult = false;
 221         result = instance.equals(o);
 222         assertEquals(expResult, result);
 223     }
 224 
 225     /**
 226      * Test of getValue method, of class Size.
 227      */
 228     @Test
 229     public void testGetValue() {
 230         Size instance = new Size(0.0, SizeUnits.PX);
 231         double expResult = 0.0;
 232         double result = instance.getValue();
 233         assertEquals(expResult, result, 0.0);
 234     }
 235 
 236     /**
 237      * Test of getUnits method, of class Size.
 238      */
 239     @Test
 240     public void testGetUnits() {
 241         Size instance = new Size(0.0, SizeUnits.PX);
 242         SizeUnits expResult = SizeUnits.PX;
 243         SizeUnits result = instance.getUnits();
 244         assertEquals(expResult, result);
 245     }
 246 
 247     /**
 248      * Test of isAbsolute method, of class Size.
 249      */
 250     @Test
 251     public void testIsAbsolute() {
 252         Size instance = new Size(0.0, SizeUnits.EM);
 253         boolean expResult = false;
 254         boolean result = instance.isAbsolute();
 255         assertEquals(expResult, result);
 256 
 257         instance = new Size(0.0, SizeUnits.PX);
 258         expResult = true;
 259         result = instance.isAbsolute();
 260         assertEquals(expResult, result);
 261 
 262     }
 263 
 264 }