public final class

HasBackgroundMatcher

extends <any>

 java.lang.Object

↳<any>

↳androidx.test.espresso.matcher.HasBackgroundMatcher

Gradle dependencies

compile group: 'androidx.test.espresso', name: 'espresso-core', version: '3.6.1'

  • groupId: androidx.test.espresso
  • artifactId: espresso-core
  • version: 3.6.1

Artifact androidx.test.espresso:espresso-core:3.6.1 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.test.espresso:espresso-core com.android.support.test.espresso:espresso-core

Androidx class mapping:

androidx.test.espresso.matcher.HasBackgroundMatcher android.support.test.espresso.matcher.HasBackgroundMatcher

Overview

Matcher to match android.view.View based on its background resource.

Summary

Constructors
publicHasBackgroundMatcher(int drawableId)

Methods
public voiddescribeTo(Description description)

protected booleanmatchesSafely(View view)

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructors

public HasBackgroundMatcher(int drawableId)

Methods

protected boolean matchesSafely(View view)

public void describeTo(Description description)

Source

/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.test.espresso.matcher;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.view.View;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeMatcher;

/**
 * Matcher to match {@link android.view.View} based on its background resource.
 */
public final class HasBackgroundMatcher extends TypeSafeMatcher<View> {

  private static final String TAG = "HasBackgroundMatcher";
  private final int drawableId;

  public HasBackgroundMatcher(int drawableId) {
    this.drawableId = drawableId;
  }

  @Override
  protected boolean matchesSafely(View view) {
    return assertDrawable(view.getBackground(), drawableId, view);
  }

  @Override
  public void describeTo(Description description) {
    description.appendText("has background with drawable ID: " + drawableId);
  }

  private static boolean assertDrawable(Drawable actual, int expectedId, View v) {
    if (null == actual || !(actual instanceof BitmapDrawable)) {
      return false;
    }

    Bitmap expectedBitmap = null;
    try {
      expectedBitmap = BitmapFactory.decodeResource(v.getContext().getResources(), expectedId);
      return ((BitmapDrawable) actual).getBitmap().sameAs(expectedBitmap);
    } finally {
      if (expectedBitmap != null) {
        expectedBitmap.recycle();
        expectedBitmap = null;
      }
    }
  }
}