TextViewTest.java revision 4c1e00a8c29e532a5b0fce755bead691797eff94
1/*
2 * Copyright (C) 2008 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
17package android.widget;
18
19import android.test.ActivityInstrumentationTestCase2;
20import android.test.suitebuilder.annotation.SmallTest;
21import android.text.GetChars;
22import android.view.View;
23
24import com.android.frameworks.coretests.R;
25
26/**
27 * TextViewTest tests {@link TextView}.
28 */
29public class TextViewTest extends ActivityInstrumentationTestCase2<TextViewTestActivity> {
30
31    public TextViewTest() {
32        super(TextViewTestActivity.class);
33    }
34
35    @SmallTest
36    public void testArray() throws Exception {
37        TextView tv = new TextView(getActivity());
38
39        char[] c = new char[] { 'H', 'e', 'l', 'l', 'o', ' ',
40                                'W', 'o', 'r', 'l', 'd', '!' };
41
42        tv.setText(c, 1, 4);
43        CharSequence oldText = tv.getText();
44
45        tv.setText(c, 4, 5);
46        CharSequence newText = tv.getText();
47
48        assertTrue(newText == oldText);
49
50        assertEquals(5, newText.length());
51        assertEquals('o', newText.charAt(0));
52        assertEquals("o Wor", newText.toString());
53
54        assertEquals(" Wo", newText.subSequence(1, 4));
55
56        char[] c2 = new char[7];
57        ((GetChars) newText).getChars(1, 4, c2, 2);
58        assertEquals('\0', c2[1]);
59        assertEquals(' ', c2[2]);
60        assertEquals('W', c2[3]);
61        assertEquals('o', c2[4]);
62        assertEquals('\0', c2[5]);
63    }
64
65    @SmallTest
66    public void testTextDirectionDefault() {
67        TextView tv = new TextView(getActivity());
68        assertEquals(View.TEXT_DIRECTION_INHERIT, tv.getTextDirection());
69    }
70
71    @SmallTest
72    public void testSetGetTextDirection() {
73        TextView tv = new TextView(getActivity());
74
75        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
76        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection());
77
78        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
79        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection());
80
81        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
82        assertEquals(View.TEXT_DIRECTION_INHERIT, tv.getTextDirection());
83
84        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
85        assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection());
86
87        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
88        assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection());
89
90        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
91        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection());
92    }
93
94    @SmallTest
95    public void testGetResolvedTextDirectionLtr() {
96        TextView tv = new TextView(getActivity());
97        tv.setText("this is a test");
98
99        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
100
101        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
102        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
103
104        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
105        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
106
107        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
108        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
109
110        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
111        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
112
113        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
114        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
115
116        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
117        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getResolvedTextDirection());
118    }
119
120    @SmallTest
121    public void testGetResolvedTextDirectionLtrWithInheritance() {
122        LinearLayout ll = new LinearLayout(getActivity());
123        ll.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
124
125        TextView tv = new TextView(getActivity());
126        tv.setText("this is a test");
127        ll.addView(tv);
128
129        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
130        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
131
132        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
133        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
134
135        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
136        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
137
138        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
139        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
140
141        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
142        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
143
144        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
145        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getResolvedTextDirection());
146    }
147
148    @SmallTest
149    public void testGetResolvedTextDirectionRtl() {
150        TextView tv = new TextView(getActivity());
151        tv.setText("\u05DD\u05DE"); // hebrew
152
153        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
154
155        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
156        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
157
158        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
159        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
160
161        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
162        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
163
164        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
165        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
166
167        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
168        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
169
170        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
171        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getResolvedTextDirection());
172    }
173
174    @SmallTest
175    public void testGetResolvedTextDirectionRtlWithInheritance() {
176        LinearLayout ll = new LinearLayout(getActivity());
177        ll.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
178
179        TextView tv = new TextView(getActivity());
180        tv.setText("\u05DD\u05DE"); // hebrew
181        ll.addView(tv);
182
183        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
184        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
185
186        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
187        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
188
189        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
190        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
191
192        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
193        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
194
195        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
196        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
197
198        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
199        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getResolvedTextDirection());
200
201        // Force to RTL text direction on the layout
202        ll.setTextDirection(View.TEXT_DIRECTION_RTL);
203
204        tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);
205        assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
206
207        tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
208        assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getResolvedTextDirection());
209
210        tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
211        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
212
213        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
214        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
215
216        tv.setTextDirection(View.TEXT_DIRECTION_RTL);
217        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
218
219        tv.setTextDirection(View.TEXT_DIRECTION_LOCALE);
220        assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getResolvedTextDirection());
221    }
222
223    @SmallTest
224    public void testResetTextDirection() {
225        final TextViewTestActivity activity = getActivity();
226
227        final LinearLayout ll = (LinearLayout) activity.findViewById(R.id.textviewtest_layout);
228        final TextView tv = (TextView) activity.findViewById(R.id.textviewtest_textview);
229
230        getActivity().runOnUiThread(new Runnable() {
231            public void run() {
232                ll.setTextDirection(View.TEXT_DIRECTION_RTL);
233                tv.setTextDirection(View.TEXT_DIRECTION_INHERIT);
234                assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
235
236                ll.removeView(tv);
237                assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getResolvedTextDirection());
238            }
239        });
240    }
241}
242