package org.robolectric.shadows; import android.text.SpannableString; import android.text.style.URLSpan; import android.text.style.UnderlineSpan; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.TestRunners; import static org.assertj.core.api.Assertions.assertThat; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowSpannableStringTest { private static final String TEST_STRING = "Visit us at http://www.foobar.com for more selections"; private SpannableString spanStr; @Before public void setUp() throws Exception { spanStr = new SpannableString(TEST_STRING); } @Test public void testToString() { assertThat(spanStr.toString()).isSameAs(TEST_STRING); } @Test public void testSetSpan() { URLSpan s1 = new URLSpan("http://www.foobar.com"); UnderlineSpan s2 = new UnderlineSpan(); spanStr.setSpan(s1, 12, 33, 0); spanStr.setSpan(s2, 1, 10, 0); assertBothSpans(s1, s2); } @Test public void testRemoveSpan() { URLSpan s1 = new URLSpan("http://www.foobar.com"); UnderlineSpan s2 = new UnderlineSpan(); spanStr.setSpan(s1, 12, 33, 0); spanStr.setSpan(s2, 1, 10, 0); spanStr.removeSpan(s1); Object[] spans = spanStr.getSpans(0, TEST_STRING.length(), Object.class); assertThat(spans).isNotNull(); assertThat(spans.length).isEqualTo(1); assertThat((UnderlineSpan) spans[0]).isSameAs(s2); } @Test public void testGetSpans() { URLSpan s1 = new URLSpan("http://www.foobar.com"); UnderlineSpan s2 = new UnderlineSpan(); spanStr.setSpan(s1, 1, 10, 0); spanStr.setSpan(s2, 20, 30, 0); Object[] spans = spanStr.getSpans(0, TEST_STRING.length(), Object.class); assertThat(spans).isNotNull(); assertThat(spans.length).isEqualTo(2); assertBothSpans(s1, s2); spans = spanStr.getSpans(0, TEST_STRING.length(), URLSpan.class); assertThat(spans).isNotNull(); assertThat(spans.length).isEqualTo(1); assertThat((URLSpan) spans[0]).isSameAs(s1); spans = spanStr.getSpans(11, 35, Object.class); assertThat(spans).isNotNull(); assertThat(spans.length).isEqualTo(1); assertThat((UnderlineSpan) spans[0]).isSameAs(s2); spans = spanStr.getSpans(21, 35, Object.class); assertThat(spans).isNotNull(); assertThat(spans.length).isEqualTo(1); assertThat((UnderlineSpan) spans[0]).isSameAs(s2); spans = spanStr.getSpans(5, 15, Object.class); assertThat(spans).isNotNull(); assertThat(spans.length).isEqualTo(1); assertThat((URLSpan) spans[0]).isSameAs(s1); } private void assertBothSpans(URLSpan s1, UnderlineSpan s2) { Object[] spans = spanStr.getSpans(0, TEST_STRING.length(), Object.class); if (spans[0] instanceof URLSpan) { assertThat((URLSpan) spans[0]).isSameAs(s1); } else { assertThat((UnderlineSpan) spans[0]).isSameAs(s2); } if (spans[1] instanceof UnderlineSpan) { assertThat((UnderlineSpan) spans[1]).isSameAs(s2); } else { assertThat((URLSpan) spans[1]).isSameAs(s1); } } }