TextViewTest.java revision 9d1f4261b8e45bd2589eb1b1d9c9ecb8b725ca4d
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)package com.xtremelabs.robolectric.shadows;
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.text.style.URLSpan;
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.KeyEvent;
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)import android.view.inputmethod.EditorInfo;
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.widget.TextView;
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import com.xtremelabs.robolectric.WithTestDefaultsRunner;
88bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)import org.junit.Test;
98bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)import org.junit.runner.RunWith;
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import java.util.ArrayList;
125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport java.util.List;
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import static com.xtremelabs.robolectric.Robolectric.shadowOf;
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import static java.util.Arrays.asList;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import static org.hamcrest.CoreMatchers.equalTo;
178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)import static org.hamcrest.CoreMatchers.is;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import static org.junit.Assert.assertThat;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu@RunWith(WithTestDefaultsRunner.class)
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)public class TextViewTest {
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    @Test
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    public void shouldTriggerTheImeListener() {
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      TextView textView = new TextView(null);
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      TestOnEditorActionListener actionListener = new TestOnEditorActionListener();
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      textView.setOnEditorActionListener(actionListener);
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      shadowOf(textView).triggerEditorAction(EditorInfo.IME_ACTION_GO);
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      assertThat(actionListener.textView, is(textView));
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      assertThat(actionListener.sentImeId, equalTo(EditorInfo.IME_ACTION_GO));
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    @Test
3508fd22434aed8d58d4e04bbbc0df2a942440bcc5Bo Liu    public void testGetUrls() throws Exception {
3608fd22434aed8d58d4e04bbbc0df2a942440bcc5Bo Liu        TextView textView = new TextView(null);
3708fd22434aed8d58d4e04bbbc0df2a942440bcc5Bo Liu        textView.setText("here's some text http://google.com/\nblah\thttp://another.com/123?456 blah");
3808fd22434aed8d58d4e04bbbc0df2a942440bcc5Bo Liu
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        assertThat(urlStringsFrom(textView.getUrls()), equalTo(asList(
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                "http://google.com/",
41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                "http://another.com/123?456"
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        )));
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    private List<String> urlStringsFrom(URLSpan[] urlSpans) {
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        List<String> urls = new ArrayList<String>();
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        for (URLSpan urlSpan : urlSpans) {
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            urls.add(urlSpan.getURL());
498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        }
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        return urls;
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  private static class TestOnEditorActionListener implements TextView.OnEditorActionListener {
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private TextView textView;
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private int sentImeId;
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    @Override public boolean onEditorAction(TextView textView, int sentImeId, KeyEvent keyEvent) {
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      this.textView = textView;
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      this.sentImeId = sentImeId;
6008fd22434aed8d58d4e04bbbc0df2a942440bcc5Bo Liu      return false;
6108fd22434aed8d58d4e04bbbc0df2a942440bcc5Bo Liu    }
6208fd22434aed8d58d4e04bbbc0df2a942440bcc5Bo Liu  }
6308fd22434aed8d58d4e04bbbc0df2a942440bcc5Bo Liu}
6408fd22434aed8d58d4e04bbbc0df2a942440bcc5Bo Liu