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