1a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi/* 2a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * Copyright (C) 2016 The Android Open Source Project 3a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * 4a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * use this file except in compliance with the License. You may obtain a copy of 6a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * the License at 7a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * 8a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 9a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * 10a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 11a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * License for the specific language governing permissions and limitations under 14a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * the License. 15a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi */ 16a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 17a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagipackage android.text; 18a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 19e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanuimport static org.junit.Assert.assertEquals; 20e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanuimport static org.junit.Assert.assertTrue; 21e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu 2268089c81068cc93d3fd42e2f768fc3a2a0d08f3cSiyamed Sinirimport android.support.test.filters.SmallTest; 23e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanuimport android.support.test.runner.AndroidJUnit4; 24a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagiimport android.text.Layout.Alignment; 2568089c81068cc93d3fd42e2f768fc3a2a0d08f3cSiyamed Sinir 26e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanuimport org.junit.Before; 27e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanuimport org.junit.Test; 28e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanuimport org.junit.runner.RunWith; 29a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 30a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi/** 31a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi * Tests for text measuring methods of StaticLayout. 32a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi */ 33e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu@SmallTest 34e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu@RunWith(AndroidJUnit4.class) 35e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanupublic class StaticLayoutTextMeasuringTest { 36a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi private static final float SPACE_MULTI = 1.0f; 37a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi private static final float SPACE_ADD = 0.0f; 38a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi private static final int DEFAULT_OUTER_WIDTH = 150; 39a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi private static final Alignment DEFAULT_ALIGN = Alignment.ALIGN_LEFT; 40a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 41a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi private TextPaint mDefaultPaint; 42a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 43e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu @Before 44e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu public void setup() { 45a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi if (mDefaultPaint == null) { 46a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi mDefaultPaint = new TextPaint(); 47a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi } 48a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi } 49a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 50e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu @Test 51a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi public void testGetPrimaryHorizontal_zwnbsp() { 52a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi // a, ZERO WIDTH NO-BREAK SPACE 53a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi String testString = "a\uFEFF"; 54a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi StaticLayout layout = new StaticLayout(testString, mDefaultPaint, 55a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi DEFAULT_OUTER_WIDTH, DEFAULT_ALIGN, SPACE_MULTI, SPACE_ADD, true); 56a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 57e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu assertEquals(0.0f, layout.getPrimaryHorizontal(0), 0f); 58e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu assertEquals(layout.getPrimaryHorizontal(2), layout.getPrimaryHorizontal(1), 0f); 59a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi } 60a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 61e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu @Test 62a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi public void testGetPrimaryHorizontal_devanagari() { 63a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi // DEVANAGARI LETTER KA, DEVANAGARI VOWEL SIGN AA 64a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi String testString = "\u0915\u093E"; 65a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi StaticLayout layout = new StaticLayout(testString, mDefaultPaint, 66a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi DEFAULT_OUTER_WIDTH, DEFAULT_ALIGN, SPACE_MULTI, SPACE_ADD, true); 67a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 68e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu assertEquals(0.0f, layout.getPrimaryHorizontal(0), 0f); 69e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu assertEquals(layout.getPrimaryHorizontal(2), layout.getPrimaryHorizontal(1), 0f); 70a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi } 71a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 72e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu @Test 73a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi public void testGetPrimaryHorizontal_flagEmoji() { 74a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi // REGIONAL INDICATOR SYMBOL LETTER U, REGIONAL INDICATOR SYMBOL LETTER S, REGIONAL 75a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi // INDICATOR SYMBOL LETTER Z 76a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi // First two code points (U and S) forms a US flag. 77a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi String testString = "\uD83C\uDDFA\uD83C\uDDF8\uD83C\uDDFF"; 78a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi StaticLayout layout = new StaticLayout(testString, mDefaultPaint, 79a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi DEFAULT_OUTER_WIDTH, DEFAULT_ALIGN, SPACE_MULTI, SPACE_ADD, true); 80a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 81e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu assertEquals(0.0f, layout.getPrimaryHorizontal(0), 0f); 82e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu assertEquals(layout.getPrimaryHorizontal(4), layout.getPrimaryHorizontal(1), 0f); 83e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu assertEquals(layout.getPrimaryHorizontal(4), layout.getPrimaryHorizontal(2), 0f); 84e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu assertEquals(layout.getPrimaryHorizontal(4), layout.getPrimaryHorizontal(3), 0f); 85a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi 86a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi assertTrue(layout.getPrimaryHorizontal(6) > layout.getPrimaryHorizontal(4)); 87e1a7d0d7f7d02edf4e68cd9d3e90154f844bacf9Andrei Stingaceanu assertEquals(layout.getPrimaryHorizontal(6), layout.getPrimaryHorizontal(5), 0f); 88a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi } 89a5c53291a8123fa0296c849fe153a7dcf79b4ddaKeisuke Kuroyanagi} 90