Как использовать эспрессо для проверки векторных рисунков - PullRequest
1 голос
/ 17 июня 2019

У меня есть вектор для рисования, который я хочу протестировать с помощью эспрессо.

  <TextView
                android:id="@+id/text_video_call"
                style="@style/UserDetails.TextView.Actions"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:drawableTop="@drawable/ic_video_24dp"
                android:text="@string/msg_video_call"
                android:visibility="gone"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/text_message"
                app:layout_constraintTop_toBottomOf="@+id/text_username"
                tools:visibility="visible" />

Вектор для рисования: ic_video_24dp

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="20"
    android:viewportHeight="20">

    <path
        android:fillColor="#1d74f5"
        android:fillType="evenOdd"
        android:pathData="M16.538,13.564l-3.388,-1.09v-2.07l3.394,-1.085 -0.006,4.245zM11.696,14.56L3.454,14.56L3.454,8.32h8.242v6.24zM17.428,8.107c0.362,0.261 0.57,0.69 0.57,1.176v4.312c0,0.487 -0.209,0.914 -0.57,1.175a1.37,1.37 0,0 1,-0.808 0.254c-0.164,0 -0.331,-0.026 -0.498,-0.08l-2.972,-0.956L13.15,16L2,16L2,6.88h11.15v2.01l2.973,-0.956c0.468,-0.15 0.943,-0.087 1.305,0.173zM4.424,5.44L4.424,4h6.302v1.44L4.424,5.44z" />
</vector>

Есть ли способ проверить пользовательский интерфейс для рисования вектора с помощьюэспрессо?Любая помощь будет оценена.

1 Ответ

0 голосов
/ 17 июня 2019

Желательно не сравнивать растровые изображения и вместо этого следовать советам этого ответа: https://stackoverflow.com/a/14474954/1396068

При настройке растягиваемого представления изображения также сохраняйте извлекаемый идентификатор в его теге с помощью setTag(R.drawable.your_drawable). Затем используйте Espresso's withTagValue(equalTo(R.drawable.your_drawable)) соответствия для проверки правильности тега.

пожалуйста, проверьте этот учебник тоже, что я нашел.Кажется, работает довольно хорошо https://medium.com/@dbottillo/android-ui-test-espresso-matcher-for-imageview-1a28c832626f#.4snjg8frw

Вот сводка для копирования вставки; -)

public class DrawableMatcher extends TypeSafeMatcher<View> {

    private final int expectedId;
    String resourceName;

    public DrawableMatcher(int expectedId) {
        super(View.class);
        this.expectedId = expectedId;
    }

    @Override
    protected boolean matchesSafely(View target) {
        if (!(target instanceof ImageView)){
            return false;
        }
        ImageView imageView = (ImageView) target;
        if (expectedId < 0){
            return imageView.getDrawable() == null;
        }
        Resources resources = target.getContext().getResources();
        Drawable expectedDrawable = resources.getDrawable(expectedId);
        resourceName = resources.getResourceEntryName(expectedId);

        if (expectedDrawable == null) {
            return false;
        }

        Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
        Bitmap otherBitmap = ((BitmapDrawable) expectedDrawable).getBitmap();
        return bitmap.sameAs(otherBitmap);
    }


    @Override
    public void describeTo(Description description) {
        description.appendText("with drawable from resource id: ");
        description.appendValue(expectedId);
        if (resourceName != null) {
            description.appendText("[");
            description.appendText(resourceName);
            description.appendText("]");
        }
    }
}

Обратите внимание, что это работает только тогда, когда ваш Drawable является BitmapDrawable.Если у вас также есть VectorDrawable или другой Drawable, вы должны проверить это (imageView.getDrawable () instanceOf XXXDrawable) и получить растровое изображение из него.За исключением того, что у вас есть какой-то простой Drawable, где у вас есть только один цвет или около того, вы можете сравнить.

Чтобы получить растровое изображение VectorDrawable, то есть вы должны нарисовать VectorDrawable на холсте и сохранить его врастровое изображение.Если у вас есть StateListDrawable, вы можете получить Drawable выбранного состояния и повторить свой if-экземпляр Cascade.

...