aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/xtremelabs/robolectric/matchers/ViewVisibilityMatcher.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/xtremelabs/robolectric/matchers/ViewVisibilityMatcher.java')
-rw-r--r--src/main/java/com/xtremelabs/robolectric/matchers/ViewVisibilityMatcher.java63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/main/java/com/xtremelabs/robolectric/matchers/ViewVisibilityMatcher.java b/src/main/java/com/xtremelabs/robolectric/matchers/ViewVisibilityMatcher.java
new file mode 100644
index 000000000..ef7db47f8
--- /dev/null
+++ b/src/main/java/com/xtremelabs/robolectric/matchers/ViewVisibilityMatcher.java
@@ -0,0 +1,63 @@
+package com.xtremelabs.robolectric.matchers;
+
+import android.view.View;
+import org.hamcrest.Description;
+import org.hamcrest.Factory;
+import org.hamcrest.Matcher;
+import org.junit.internal.matchers.TypeSafeMatcher;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ViewVisibilityMatcher<T extends View> extends TypeSafeMatcher<T> {
+
+ private static final Map<Integer, String> VISIBILITY_DESCRIPTIONS;
+ static {
+ VISIBILITY_DESCRIPTIONS = new HashMap<Integer, String>();
+ VISIBILITY_DESCRIPTIONS.put(View.VISIBLE, "'Visible'");
+ VISIBILITY_DESCRIPTIONS.put(View.INVISIBLE, "'Invisible'");
+ VISIBILITY_DESCRIPTIONS.put(View.GONE, "'Gone'");
+ }
+
+ private final int expectedVisibility;
+ private int actualVisibility = -1;
+
+ public ViewVisibilityMatcher(int expectedVisibility) {
+ this.expectedVisibility = expectedVisibility;
+ }
+
+ @Override
+ public boolean matchesSafely(T t) {
+ if (t == null){
+ return false;
+ }
+ actualVisibility = t.getVisibility();
+ return expectedVisibility == actualVisibility;
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ if (actualVisibility >= 0){
+ description.appendText(VISIBILITY_DESCRIPTIONS.get(actualVisibility));
+ description.appendText(" to be ");
+ description.appendText(VISIBILITY_DESCRIPTIONS.get(expectedVisibility));
+ } else {
+ description.appendText("View to be non-null.");
+ }
+ }
+
+ @Factory
+ public static <T extends View> Matcher<T> isVisible() {
+ return new ViewVisibilityMatcher<T>(View.VISIBLE);
+ }
+
+ @Factory
+ public static <T extends View> Matcher<T> isInvisible() {
+ return new ViewVisibilityMatcher<T>(View.INVISIBLE);
+ }
+
+ @Factory
+ public static <T extends View> Matcher<T> isGone() {
+ return new ViewVisibilityMatcher<T>(View.GONE);
+ }
+}