Я пытаюсь проверить цвет textView в recyclerView.Каждый элемент имеет дочернее текстовое представление.В зависимости от условий цвет текста может быть одним из двух вариантов:
int colorLightGrey = context.getColor(R.color.color_LIGHT_GRAY);
int colorBlack = context.getColor(R.color.color_BLACK);
Код:
@Before
public void setUp() {
context = getInstrumentation().getTargetContext();
}
@Test
public void matchWeekDaysColors() {
int colorLightGrey = context.getColor(R.color.color_LIGHT_GRAY);
int colorBlack = context.getColor(R.color.color_BLACK);
String monday = context.getString(R.string.monday_abbreviated);
ViewInteraction viewInteraction = onView(withId(R.id.recycler_view)).perform(RecyclerViewActions.scrollToPosition(3));
viewInteraction.check(matches(hasDescendant(allOf(withId(R.id.monday_text_view), withText(monday), textViewTextColorMatcher(colorLightGrey)))));
}
public static Matcher<View> textViewTextColorMatcher(final int matcherColor) {
return new BoundedMatcher<View, TextView>(TextView.class) {
@Override
public void describeTo(Description description) {
description.appendText("with text color: " + matcherColor);
}
@Override
protected boolean matchesSafely(TextView textView) {
return matcherColor == textView.getCurrentTextColor();
}
};
}
textViewTextColorMatcher
отсюда
Поскольку цвет текстового представления черный, это утверждение должно быть ошибочным, но оно проходит.Замена цвета на colorBlack также проходит тест.
Как я понимаю этот код, тестирование проходит только в том случае, если у элемента есть потомок с заданным идентификатором с заданным текстом и заданным цветом.Он не может быть двух цветов одновременно.Замена withText(monday)
другим текстом не проходит проверку, это ожидаемое поведение.textViewTextColorMatcher
также выглядит отлично.
Итак, как мне переписать выражение соответствия или проверки, чтобы сделать тест действительным?Спасибо за любую помощь.