Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.graphics.cts;
     18 
     19 import static org.junit.Assert.assertEquals;
     20 import static org.junit.Assert.assertNull;
     21 import static org.junit.Assert.fail;
     22 
     23 import android.graphics.fonts.FontVariationAxis;
     24 import android.support.test.filters.SmallTest;
     25 import android.support.test.runner.AndroidJUnit4;
     26 
     27 import org.junit.Test;
     28 import org.junit.runner.RunWith;
     29 
     30 @SmallTest
     31 @RunWith(AndroidJUnit4.class)
     32 public class FontVariationAxisTest {
     33     private static final float FLOT_EQUALITY_PREC = 1e-4f;  // precision for float equality.
     34     private static final String[] INVALID_TAGS = {
     35         "", "abcde", "\n\n\n\n", "\u0000bcd", "\u3042bcd"
     36     };
     37 
     38     @Test
     39     public void testConstruction() {
     40         new FontVariationAxis("wght", 1.0f);
     41         new FontVariationAxis("PRIV", -1.0f);
     42     }
     43 
     44     @Test
     45     public void testGetterTest() {
     46         FontVariationAxis axis = new FontVariationAxis("wght", 1.0f);
     47         assertEquals("wght", axis.getTag());
     48         assertEquals(1.0f, axis.getStyleValue(), FLOT_EQUALITY_PREC);
     49 
     50         axis = new FontVariationAxis("PRIV", -1.0f);
     51         assertEquals("PRIV", axis.getTag());
     52         assertEquals(-1.0f, axis.getStyleValue(), FLOT_EQUALITY_PREC);
     53     }
     54 
     55     @Test
     56     public void testInvalidTagConstructionTest() {
     57         for (String invalidTag : INVALID_TAGS) {
     58             try {
     59                 new FontVariationAxis(invalidTag, 0.0f);
     60                 fail(invalidTag + " should be treated as invalid tag");
     61             } catch (IllegalArgumentException e) {
     62                 // pass
     63             }
     64         }
     65     }
     66 
     67     @Test
     68     public void testFromFontVariationSetting_Single() {
     69         FontVariationAxis[] axes = FontVariationAxis.fromFontVariationSettings("");
     70         assertNull(axes);
     71 
     72         axes = FontVariationAxis.fromFontVariationSettings(null);
     73         assertNull(axes);
     74 
     75         axes = FontVariationAxis.fromFontVariationSettings("'wdth' 1");
     76         assertEquals(1, axes.length);
     77         assertEquals("wdth", axes[0].getTag());
     78         assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
     79 
     80         axes = FontVariationAxis.fromFontVariationSettings("\"wdth\" 100");
     81         assertEquals(1, axes.length);
     82         assertEquals("wdth", axes[0].getTag());
     83         assertEquals(100.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
     84 
     85         axes = FontVariationAxis.fromFontVariationSettings("   'wdth' 100");
     86         assertEquals(1, axes.length);
     87         assertEquals("wdth", axes[0].getTag());
     88         assertEquals(100.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
     89 
     90         axes = FontVariationAxis.fromFontVariationSettings("\t'wdth' 0.5");
     91         assertEquals(1, axes.length);
     92         assertEquals("wdth", axes[0].getTag());
     93         assertEquals(0.5f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
     94 
     95         axes = FontVariationAxis.fromFontVariationSettings("'PRIV' 1");
     96         assertEquals(1, axes.length);
     97         assertEquals("PRIV", axes[0].getTag());
     98         assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
     99 
    100         axes = FontVariationAxis.fromFontVariationSettings("'PRIV'\t1");
    101         assertEquals(1, axes.length);
    102         assertEquals("PRIV", axes[0].getTag());
    103         assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
    104 
    105         axes = FontVariationAxis.fromFontVariationSettings("'PRIV'\n1");
    106         assertEquals(1, axes.length);
    107         assertEquals("PRIV", axes[0].getTag());
    108         assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
    109 
    110         axes = FontVariationAxis.fromFontVariationSettings("'PRIV'\r1");
    111         assertEquals(1, axes.length);
    112         assertEquals("PRIV", axes[0].getTag());
    113         assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
    114 
    115         axes = FontVariationAxis.fromFontVariationSettings("'PRIV'\r\t\n 1");
    116         assertEquals(1, axes.length);
    117         assertEquals("PRIV", axes[0].getTag());
    118         assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
    119 
    120         axes = FontVariationAxis.fromFontVariationSettings("'wdth' 10,'PRIV'\r1");
    121         assertEquals(2, axes.length);
    122         assertEquals("wdth", axes[0].getTag());
    123         assertEquals(10.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
    124         assertEquals("PRIV", axes[1].getTag());
    125         assertEquals(1.0f, axes[1].getStyleValue(), FLOT_EQUALITY_PREC);
    126     }
    127 
    128     @Test
    129     public void testFromFontVariationSettings_Invalid() {
    130         for (String invalidTag : INVALID_TAGS) {
    131             try {
    132                 FontVariationAxis.fromFontVariationSettings("'" + invalidTag + "' : 1.0");
    133                 fail(invalidTag + " should be treated as invalid settings");
    134             } catch (IllegalArgumentException e) {
    135                 // pass
    136             }
    137         }
    138         for (String invalidTag : INVALID_TAGS) {
    139             try {
    140                 FontVariationAxis.fromFontVariationSettings(
    141                         "'" + invalidTag + "' : 1.0, 'wdth' 10");
    142                 fail(invalidTag + " should be treated as invalid settings");
    143             } catch (IllegalArgumentException e) {
    144                 // pass
    145             }
    146         }
    147     }
    148 
    149     @Test
    150     public void testtoFontVariationSettings() {
    151         assertEquals("", FontVariationAxis.toFontVariationSettings(null));
    152         assertEquals("", FontVariationAxis.toFontVariationSettings(new FontVariationAxis[0]));
    153 
    154         final FontVariationAxis[] axes = {
    155             new FontVariationAxis("wght", 1.0f),
    156             new FontVariationAxis("PRIV", 3.0f)
    157         };
    158 
    159         String stringData = FontVariationAxis.toFontVariationSettings(axes);
    160         FontVariationAxis[] newAxes = FontVariationAxis.fromFontVariationSettings(stringData);
    161         assertEquals(newAxes.length, axes.length);
    162         for (int i = 0; i < axes.length; ++i) {
    163             assertEquals(axes[i].getTag(), newAxes[i].getTag());
    164             assertEquals(axes[i].getStyleValue(), newAxes[i].getStyleValue(), FLOT_EQUALITY_PREC);
    165         }
    166     }
    167 }
    168