diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2015-06-15 17:54:53 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2015-06-17 18:53:00 +0200 |
commit | 2d03965777e99782a0ee7a33e6b90805c79bb07e (patch) | |
tree | edac9c050ea26f7c0b35da3eb199a2a8d466cc88 /OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/matcher/DrawableMatcher.java | |
parent | 312cb3884826c7b9eee19d83a5581f96a10a7a00 (diff) | |
download | open-keychain-2d03965777e99782a0ee7a33e6b90805c79bb07e.tar.gz open-keychain-2d03965777e99782a0ee7a33e6b90805c79bb07e.tar.bz2 open-keychain-2d03965777e99782a0ee7a33e6b90805c79bb07e.zip |
instrument: finish symmetric text encryption test
Diffstat (limited to 'OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/matcher/DrawableMatcher.java')
-rw-r--r-- | OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/matcher/DrawableMatcher.java | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/matcher/DrawableMatcher.java b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/matcher/DrawableMatcher.java new file mode 100644 index 000000000..4996fe19a --- /dev/null +++ b/OpenKeychain/src/androidTest/java/org/sufficientlysecure/keychain/matcher/DrawableMatcher.java @@ -0,0 +1,112 @@ +/** obtained from + * + * https://github.com/xrigau/droidcon-android-espresso/blob/master/app/src/instrumentTest/java/com/xrigau/droidcon/espresso/helper/DrawableMatcher.java + * + * license pending + */ +package org.sufficientlysecure.keychain.matcher; + + +import android.content.res.Resources; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import org.hamcrest.Description; +import org.hamcrest.TypeSafeMatcher; + + +public class DrawableMatcher extends TypeSafeMatcher<View> { + + private final int mResourceId; + private final boolean mIgnoreFilters; + + public DrawableMatcher(int resourceId, boolean ignoreFilters) { + super(View.class); + mResourceId = resourceId; + mIgnoreFilters = ignoreFilters; + } + + private String resourceName = null; + private Drawable expectedDrawable = null; + + @Override + public boolean matchesSafely(View target) { + if (expectedDrawable == null) { + loadDrawableFromResources(target.getResources()); + } + if (invalidExpectedDrawable()) { + return false; + } + + if (target instanceof ImageView) { + return hasImage((ImageView) target) || hasBackground(target); + } + if (target instanceof TextView) { + return hasCompoundDrawable((TextView) target) || hasBackground(target); + } + return hasBackground(target); + } + + private void loadDrawableFromResources(Resources resources) { + try { + expectedDrawable = resources.getDrawable(mResourceId); + resourceName = resources.getResourceEntryName(mResourceId); + } catch (Resources.NotFoundException ignored) { + // view could be from a context unaware of the resource id. + } + } + + private boolean invalidExpectedDrawable() { + return expectedDrawable == null; + } + + private boolean hasImage(ImageView target) { + return isSameDrawable(target.getDrawable()); + } + + private boolean hasCompoundDrawable(TextView target) { + for (Drawable drawable : target.getCompoundDrawables()) { + if (isSameDrawable(drawable)) { + return true; + } + } + return false; + } + + private boolean hasBackground(View target) { + return isSameDrawable(target.getBackground()); + } + + private boolean isSameDrawable(Drawable drawable) { + if (drawable == null) { + return false; + } + // if those are both bitmap drawables, compare their bitmaps (ignores color filters, which is what we want!) + if (mIgnoreFilters && drawable instanceof BitmapDrawable && expectedDrawable instanceof BitmapDrawable) { + return ((BitmapDrawable) drawable).getBitmap().equals(((BitmapDrawable) expectedDrawable).getBitmap()); + } + return expectedDrawable.getConstantState().equals(drawable.getConstantState()); + } + + @Override + public void describeTo(Description description) { + description.appendText("with drawable from resource id: "); + description.appendValue(mResourceId); + if (resourceName != null) { + description.appendText("["); + description.appendText(resourceName); + description.appendText("]"); + } + } + + public static DrawableMatcher withDrawable(int resourceId, boolean ignoreFilters) { + return new DrawableMatcher(resourceId, ignoreFilters); + } + public static DrawableMatcher withDrawable(int resourceId) { + return new DrawableMatcher(resourceId, true); + } + +} |