1a2043a8fff01f3e2d9a5e30dd1cf5fb6a5342f4dTyler Schultzpackage com.xtremelabs.robolectric.matchers;
29f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz
39f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultzimport android.widget.TextView;
49f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultzimport org.hamcrest.Description;
59f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultzimport org.hamcrest.Factory;
69f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultzimport org.hamcrest.Matcher;
79f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultzimport org.junit.internal.matchers.TypeSafeMatcher;
89f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz
97b2f8e0cbd99c578933c969b9cf701f22337f429Ryan Richard & Tyler Schultzpublic class TextViewHasTextMatcher<T extends TextView> extends TypeSafeMatcher<T> {
109f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    private String expected;
119f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    private String actualText;
129f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz
139f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    public TextViewHasTextMatcher(String expected) {
149f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        this.expected = expected;
159f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    }
169f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz
179f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    @Override
187b2f8e0cbd99c578933c969b9cf701f22337f429Ryan Richard & Tyler Schultz    public boolean matchesSafely(T actual) {
199f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        if (actual == null) {
209f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz            return false;
219f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        }
229f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        final CharSequence charSequence = actual.getText();
239f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        if (charSequence == null || charSequence.toString() == null) {
249f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz            return false;
259f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        }
269f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        actualText = charSequence.toString();
279f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        return actualText.equals(expected);
289f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    }
299f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz
309f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz
319f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    @Override
329f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    public void describeTo(Description description) {
339f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        description.appendText("[" + actualText + "]");
349f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        description.appendText(" to equal ");
359f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz        description.appendText("[" + expected + "]");
369f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    }
379f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz
389f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    @Factory
397b2f8e0cbd99c578933c969b9cf701f22337f429Ryan Richard & Tyler Schultz    public static <T extends TextView> Matcher<T> hasText(String expectedTextViewText) {
407b2f8e0cbd99c578933c969b9cf701f22337f429Ryan Richard & Tyler Schultz        return new TextViewHasTextMatcher<T>(expectedTextViewText);
419f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz    }
429f267bbc4c80fd80b0153be8b45dd1d3c777a71aChristian Williams & Tyler Schultz}
43