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