• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.xtremelabs.robolectric.shadows;
2 
3 import static org.hamcrest.CoreMatchers.equalTo;
4 import static org.hamcrest.CoreMatchers.notNullValue;
5 import static org.hamcrest.CoreMatchers.sameInstance;
6 import static org.junit.Assert.assertThat;
7 
8 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
9 
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.junit.runner.RunWith;
13 
14 import android.text.SpannableString;
15 import android.text.style.URLSpan;
16 import android.text.style.UnderlineSpan;
17 
18 @RunWith(WithTestDefaultsRunner.class)
19 public class SpannableStringTest {
20 
21     private SpannableString spanStr;
22 
23     private static final String TEST_STRING =
24             "Visit us at http://www.foobar.com for more selections";
25 
26     @Before
setUp()27     public void setUp() throws Exception {
28         spanStr = new SpannableString(TEST_STRING);
29     }
30 
31     @Test
testToString()32     public void testToString() {
33         assertThat(spanStr.toString(), sameInstance(TEST_STRING));
34     }
35 
36     @Test
testSetSpan()37     public void testSetSpan() {
38         URLSpan s1 = new URLSpan("http://www.foobar.com");
39         UnderlineSpan s2 = new UnderlineSpan();
40         spanStr.setSpan(s1, 12, 33, 0);
41         spanStr.setSpan(s2, 1, 10, 0);
42 
43         assertBothSpans(s1, s2);
44     }
45 
46     @Test
testRemoveSpan()47     public void testRemoveSpan() {
48         URLSpan s1 = new URLSpan("http://www.foobar.com");
49         UnderlineSpan s2 = new UnderlineSpan();
50         spanStr.setSpan(s1, 12, 33, 0);
51         spanStr.setSpan(s2, 1, 10, 0);
52         spanStr.removeSpan(s1);
53 
54         Object[] spans = spanStr.getSpans(0, TEST_STRING.length(), Object.class);
55         assertThat(spans, notNullValue());
56         assertThat(spans.length, equalTo(1));
57         assertThat((UnderlineSpan) spans[0], sameInstance(s2));
58     }
59 
60     @Test
testGetSpans()61     public void testGetSpans() {
62         URLSpan s1 = new URLSpan("http://www.foobar.com");
63         UnderlineSpan s2 = new UnderlineSpan();
64         spanStr.setSpan(s1, 1, 10, 0);
65         spanStr.setSpan(s2, 20, 30, 0);
66 
67         Object[] spans = spanStr.getSpans(0, TEST_STRING.length(), Object.class);
68         assertThat(spans, notNullValue());
69         assertThat(spans.length, equalTo(2));
70         assertBothSpans(s1, s2);
71 
72         spans = spanStr.getSpans(0, TEST_STRING.length(), URLSpan.class);
73         assertThat(spans, notNullValue());
74         assertThat(spans.length, equalTo(1));
75         assertThat((URLSpan) spans[0], sameInstance(s1));
76 
77         spans = spanStr.getSpans(11, 35, Object.class);
78         assertThat(spans, notNullValue());
79         assertThat(spans.length, equalTo(1));
80         assertThat((UnderlineSpan) spans[0], sameInstance(s2));
81 
82         spans = spanStr.getSpans(21, 35, Object.class);
83         assertThat(spans, notNullValue());
84         assertThat(spans.length, equalTo(1));
85         assertThat((UnderlineSpan) spans[0], sameInstance(s2));
86 
87         spans = spanStr.getSpans(5, 15, Object.class);
88         assertThat(spans, notNullValue());
89         assertThat(spans.length, equalTo(1));
90         assertThat((URLSpan) spans[0], sameInstance(s1));
91     }
92 
93     @Test
testGetSpanStart()94     public void testGetSpanStart() {
95         URLSpan s1 = new URLSpan("http://www.foobar.com");
96         UnderlineSpan s2 = new UnderlineSpan();
97 
98         assertThat(spanStr.getSpanStart(s1), equalTo(-1));
99         assertThat(spanStr.getSpanStart(s2), equalTo(-1));
100 
101         spanStr.setSpan(s1, 0, 4, 0);
102         assertThat(spanStr.getSpanStart(s1), equalTo(0));
103 
104         spanStr.setSpan(s2, 2, TEST_STRING.length(), 0);
105         assertThat(spanStr.getSpanStart(s2), equalTo(2));
106     }
107 
108     @Test
testGetSpanEnd()109     public void testGetSpanEnd() {
110         URLSpan s1 = new URLSpan("http://www.foobar.com");
111         UnderlineSpan s2 = new UnderlineSpan();
112 
113         assertThat(spanStr.getSpanEnd(s1), equalTo(-1));
114         assertThat(spanStr.getSpanEnd(s2), equalTo(-1));
115 
116         spanStr.setSpan(s1, 0, 4, 0);
117         assertThat(spanStr.getSpanEnd(s1), equalTo(4));
118 
119         spanStr.setSpan(s2, 2, TEST_STRING.length(), 0);
120         assertThat(spanStr.getSpanEnd(s2), equalTo(TEST_STRING.length()));
121     }
122 
assertBothSpans(URLSpan s1, UnderlineSpan s2)123     private void assertBothSpans(URLSpan s1, UnderlineSpan s2) {
124         Object[] spans = spanStr.getSpans(0, TEST_STRING.length(), Object.class);
125         if (spans[0] instanceof URLSpan) {
126             assertThat((URLSpan) spans[0], sameInstance(s1));
127         } else {
128             assertThat((UnderlineSpan) spans[0], sameInstance(s2));
129         }
130         if (spans[1] instanceof UnderlineSpan) {
131             assertThat((UnderlineSpan) spans[1], sameInstance(s2));
132         } else {
133             assertThat((URLSpan) spans[1], sameInstance(s1));
134         }
135     }
136 }
137