blob: 6a2af6a48e5e4036ddd7c99733c3f32d8289a70c [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.graphics.cts;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import android.graphics.fonts.FontVariationAxis;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class FontVariationAxisTest {
private static final float FLOT_EQUALITY_PREC = 1e-4f; // precision for float equality.
private static final String[] INVALID_TAGS = {
"", "abcde", "\n\n\n\n", "\u0000bcd", "\u3042bcd"
};
@Test
public void testConstruction() {
new FontVariationAxis("wght", 1.0f);
new FontVariationAxis("PRIV", -1.0f);
}
@Test
public void testGetterTest() {
FontVariationAxis axis = new FontVariationAxis("wght", 1.0f);
assertEquals("wght", axis.getTag());
assertEquals(1.0f, axis.getStyleValue(), FLOT_EQUALITY_PREC);
axis = new FontVariationAxis("PRIV", -1.0f);
assertEquals("PRIV", axis.getTag());
assertEquals(-1.0f, axis.getStyleValue(), FLOT_EQUALITY_PREC);
}
@Test
public void testInvalidTagConstructionTest() {
for (String invalidTag : INVALID_TAGS) {
try {
new FontVariationAxis(invalidTag, 0.0f);
fail(invalidTag + " should be treated as invalid tag");
} catch (IllegalArgumentException e) {
// pass
}
}
}
@Test
public void testFromFontVariationSetting_Single() {
FontVariationAxis[] axes = FontVariationAxis.fromFontVariationSettings("");
assertNull(axes);
axes = FontVariationAxis.fromFontVariationSettings(null);
assertNull(axes);
axes = FontVariationAxis.fromFontVariationSettings("'wdth' 1");
assertEquals(1, axes.length);
assertEquals("wdth", axes[0].getTag());
assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
axes = FontVariationAxis.fromFontVariationSettings("\"wdth\" 100");
assertEquals(1, axes.length);
assertEquals("wdth", axes[0].getTag());
assertEquals(100.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
axes = FontVariationAxis.fromFontVariationSettings(" 'wdth' 100");
assertEquals(1, axes.length);
assertEquals("wdth", axes[0].getTag());
assertEquals(100.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
axes = FontVariationAxis.fromFontVariationSettings("\t'wdth' 0.5");
assertEquals(1, axes.length);
assertEquals("wdth", axes[0].getTag());
assertEquals(0.5f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
axes = FontVariationAxis.fromFontVariationSettings("'PRIV' 1");
assertEquals(1, axes.length);
assertEquals("PRIV", axes[0].getTag());
assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
axes = FontVariationAxis.fromFontVariationSettings("'PRIV'\t1");
assertEquals(1, axes.length);
assertEquals("PRIV", axes[0].getTag());
assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
axes = FontVariationAxis.fromFontVariationSettings("'PRIV'\n1");
assertEquals(1, axes.length);
assertEquals("PRIV", axes[0].getTag());
assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
axes = FontVariationAxis.fromFontVariationSettings("'PRIV'\r1");
assertEquals(1, axes.length);
assertEquals("PRIV", axes[0].getTag());
assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
axes = FontVariationAxis.fromFontVariationSettings("'PRIV'\r\t\n 1");
assertEquals(1, axes.length);
assertEquals("PRIV", axes[0].getTag());
assertEquals(1.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
axes = FontVariationAxis.fromFontVariationSettings("'wdth' 10,'PRIV'\r1");
assertEquals(2, axes.length);
assertEquals("wdth", axes[0].getTag());
assertEquals(10.0f, axes[0].getStyleValue(), FLOT_EQUALITY_PREC);
assertEquals("PRIV", axes[1].getTag());
assertEquals(1.0f, axes[1].getStyleValue(), FLOT_EQUALITY_PREC);
}
@Test
public void testFromFontVariationSettings_Invalid() {
for (String invalidTag : INVALID_TAGS) {
try {
FontVariationAxis.fromFontVariationSettings("'" + invalidTag + "' : 1.0");
fail(invalidTag + " should be treated as invalid settings");
} catch (IllegalArgumentException e) {
// pass
}
}
for (String invalidTag : INVALID_TAGS) {
try {
FontVariationAxis.fromFontVariationSettings(
"'" + invalidTag + "' : 1.0, 'wdth' 10");
fail(invalidTag + " should be treated as invalid settings");
} catch (IllegalArgumentException e) {
// pass
}
}
}
@Test
public void testtoFontVariationSettings() {
assertEquals("", FontVariationAxis.toFontVariationSettings(null));
assertEquals("", FontVariationAxis.toFontVariationSettings(new FontVariationAxis[0]));
final FontVariationAxis[] axes = {
new FontVariationAxis("wght", 1.0f),
new FontVariationAxis("PRIV", 3.0f)
};
String stringData = FontVariationAxis.toFontVariationSettings(axes);
FontVariationAxis[] newAxes = FontVariationAxis.fromFontVariationSettings(stringData);
assertEquals(newAxes.length, axes.length);
for (int i = 0; i < axes.length; ++i) {
assertEquals(axes[i].getTag(), newAxes[i].getTag());
assertEquals(axes[i].getStyleValue(), newAxes[i].getStyleValue(), FLOT_EQUALITY_PREC);
}
}
}