1a2043a8fff01f3e2d9a5e30dd1cf5fb6a5342f4dTyler Schultzpackage com.xtremelabs.robolectric.matchers;
28f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin
38f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwinimport android.widget.ImageView;
470650f03fb9161ce77255654517d34b67232588eChristian Williams & Phil Goodwinimport com.xtremelabs.robolectric.res.ResourceLoader;
58f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwinimport org.hamcrest.Description;
68f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwinimport org.hamcrest.Factory;
78f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwinimport org.hamcrest.Matcher;
88f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwinimport org.junit.internal.matchers.TypeSafeMatcher;
98f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin
10a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
11a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williams
128f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwinpublic class ImageViewHasDrawableMatcher<T extends ImageView> extends TypeSafeMatcher<T> {
138f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    private int expectedResourceId;
148f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    private String message;
158f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin
168f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    public ImageViewHasDrawableMatcher(int expectedResourceId) {
178f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin        this.expectedResourceId = expectedResourceId;
188f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    }
198f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin
208f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    @Override
218f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    public boolean matchesSafely(T actualImageView) {
228f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin        if (actualImageView == null) {
238f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin            return false;
248f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin        }
258f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin
2670650f03fb9161ce77255654517d34b67232588eChristian Williams & Phil Goodwin        ResourceLoader resourceLoader = ResourceLoader.getFrom(actualImageView.getContext());
2770650f03fb9161ce77255654517d34b67232588eChristian Williams & Phil Goodwin
28cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin        int actualResourceId = shadowOf(actualImageView).getResourceId();
2970650f03fb9161ce77255654517d34b67232588eChristian Williams & Phil Goodwin        String actualName = nameOrUnset(resourceLoader, actualResourceId);
3070650f03fb9161ce77255654517d34b67232588eChristian Williams & Phil Goodwin        String expectedName = nameOrUnset(resourceLoader, expectedResourceId);
3170650f03fb9161ce77255654517d34b67232588eChristian Williams & Phil Goodwin        message = "[" + actualResourceId + " (" + actualName + ")] to equal [" + expectedResourceId + " (" + expectedName + ")]";
328f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin        return actualResourceId == expectedResourceId;
338f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    }
348f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin
3570650f03fb9161ce77255654517d34b67232588eChristian Williams & Phil Goodwin    private String nameOrUnset(ResourceLoader resourceLoader, int resourceId) {
3670650f03fb9161ce77255654517d34b67232588eChristian Williams & Phil Goodwin        return resourceId == 0 ? "unset" : resourceLoader.getNameForId(resourceId);
3770650f03fb9161ce77255654517d34b67232588eChristian Williams & Phil Goodwin    }
3870650f03fb9161ce77255654517d34b67232588eChristian Williams & Phil Goodwin
398f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin
408f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    @Override
418f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    public void describeTo(Description description) {
428f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin        description.appendText(message);
438f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    }
448f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin
458f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    @Factory
468f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    public static <T extends ImageView> Matcher<T> hasDrawable(int expectedResourceId) {
478f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin        return new ImageViewHasDrawableMatcher<T>(expectedResourceId);
488f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin    }
498f0499c2d2762fe29391faa69f1f210d67b62867Christian Williams & Phil Goodwin}
50