1/*
2 * Copyright (C) 2016 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 com.android.internal.widget;
18
19import static org.junit.Assert.assertTrue;
20
21import android.content.Context;
22import android.support.test.InstrumentationRegistry;
23import android.support.test.filters.SmallTest;
24import android.text.Layout;
25import android.view.View.MeasureSpec;
26import android.widget.TextView;
27
28import org.junit.Assert;
29import org.junit.Before;
30import org.junit.Test;
31
32@SmallTest
33public class ImageFloatingTextViewTest {
34
35    private Context mContext;
36    private ImageFloatingTextView mView;
37    private TextView mTextView;
38
39    @Before
40    public void setup() {
41        mContext = InstrumentationRegistry.getTargetContext();
42        mView = new ImageFloatingTextView(mContext, null, 0, 0);
43        mView.setMaxLines(9);
44        mTextView = new TextView(mContext, null, 0, 0);
45        mTextView.setMaxLines(9);
46    }
47
48    @Test
49    public void testEmpty() {
50        parametrizedTest("");
51    }
52
53    @Test
54    public void testSingleLine() {
55        parametrizedTest("Hello, World!");
56    }
57
58    @Test
59    public void testTwoLine() {
60        parametrizedTest("Hello, World!\nWhat a nice day!");
61    }
62
63    @Test
64    public void testShort() {
65        parametrizedTest("Hello, World! What a nice day! Let's try some more text. "
66                + "Yada yada, yada yada. Lorem ipsum dolor sit amet.");
67    }
68
69    @Test
70    public void testLong() {
71        parametrizedTest("Hello, World! What a nice day! Let's try some more text. "
72                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
73                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
74                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
75                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
76                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
77                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
78                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
79                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
80                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
81                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
82                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
83                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
84                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
85                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
86                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
87                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
88                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
89                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
90                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
91                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
92                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
93                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
94                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
95                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
96                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
97                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
98                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
99                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
100                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
101                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
102                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
103                + "Yada yada, yada yada. Lorem ipsum dolor sit amet."
104                + "Yada yada, yada yada. Lorem ipsum dolor sit amet.");
105    }
106
107    @Test
108    public void usesTransformationMethod() {
109        mView.setSingleLine();
110        String text = "Test \n Test";
111        parametrizedTest(text);
112        Layout layout = mView.getLayout();
113        Assert.assertFalse("The transformation method wasn't used, string is still the same",
114                text.equals(layout.getText()));
115    }
116
117    private void parametrizedTest(CharSequence text) {
118        int heightMeasureSpec = MeasureSpec.makeMeasureSpec(500, MeasureSpec.AT_MOST);
119        int widthMeasureSpec = MeasureSpec.makeMeasureSpec(500, MeasureSpec.EXACTLY);
120
121        mTextView.setText(text);
122        mView.setText(text);
123
124        mTextView.measure(widthMeasureSpec, heightMeasureSpec);
125        mView.measure(widthMeasureSpec, heightMeasureSpec);
126
127        // We're at most allowed to be the same height as the regular textview and maybe a bit
128        // smaller since our layout snaps to full textlines.
129        assertTrue("The measured view should never be taller then the normal textview!",
130                mView.getMeasuredHeight() <= mTextView.getMeasuredHeight());
131    }
132}
133