TestUtilsMatchers.java revision 244abf1fee3fe4fab72a1d8925407e29219940be
1244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov/* 2244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * Copyright (C) 2015 The Android Open Source Project 3244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * 4244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * you may not use this file except in compliance with the License. 6244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * You may obtain a copy of the License at 7244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * 8244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * http://www.apache.org/licenses/LICENSE-2.0 9244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * 10244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * Unless required by applicable law or agreed to in writing, software 11244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * distributed under the License is distributed on an "AS IS" BASIS, 12244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * See the License for the specific language governing permissions and 14244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * limitations under the License. 15244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov */ 16244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov 17244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikovpackage android.support.v7.testutils; 18244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov 19244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikovimport android.graphics.drawable.Drawable; 20244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikovimport android.support.annotation.ColorInt; 21244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikovimport android.support.test.espresso.matcher.BoundedMatcher; 22244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikovimport android.view.View; 23244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikovimport android.widget.ImageView; 24244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikovimport org.hamcrest.Description; 25244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikovimport org.hamcrest.Matcher; 26244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov 27244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikovpublic class TestUtilsMatchers { 28244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov /** 29244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * Returns a matcher that matches <code>ImageView</code>s which have drawable flat-filled 30244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov * with the specific color. 31244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov */ 32244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov public static Matcher drawable(@ColorInt final int color) { 33244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov return new BoundedMatcher<View, ImageView>(ImageView.class) { 34244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov private String failedComparisonDescription; 35244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov 36244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov @Override 37244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov public void describeTo(final Description description) { 38244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov description.appendText("with drawable of color: "); 39244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov 40244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov description.appendText(failedComparisonDescription); 41244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov } 42244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov 43244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov @Override 44244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov public boolean matchesSafely(final ImageView view) { 45244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov Drawable drawable = view.getDrawable(); 46244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov if (drawable == null) { 47244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov return false; 48244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov } 49244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov 50244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov // One option is to check if we have a ColorDrawable and then call getColor 51244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov // but that API is v11+. Instead, we call our helper method that checks whether 52244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov // all pixels in a Drawable are of the same specified color. 53244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov try { 54244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov TestUtils.assertAllPixelsOfColor("", drawable, view.getWidth(), 55244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov view.getHeight(), color, true); 56244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov // If we are here, the color comparison has passed. 57244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov failedComparisonDescription = null; 58244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov return true; 59244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov } catch (Throwable t) { 60244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov // If we are here, the color comparison has failed. 61244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov failedComparisonDescription = t.getMessage(); 62244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov return false; 63244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov } 64244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov } 65244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov }; 66244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov } 67244abf1fee3fe4fab72a1d8925407e29219940beKirill Grouchnikov} 68