0

У меня есть ListView с рядами различных цветов, созданных с помощью пользовательского адаптера, как:Матч цвета фона список следует ряд Эспрессо

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 

    convertView = mInflater.inflate(R.layout.row_unit, parent, false); 

    // ... 

    if(/* some condition */) { 
     convertView.setBackgroundColor(Color.LTGRAY); 
    } else { 
     convertView.setBackgroundColor(Color.WHITE); 
    } 
    return convertView; 
} 

В тесте я хотел бы, чтобы проверить, есть ли определенный элемент в списке Цвет LTGRAY. Я создал пользовательский Искатель:

public static Matcher<Object> backgroundShouldHaveColor(int expectedColor) { 
    return viewShouldHaveBackgroundColor(equalTo(expectedColor)); 
} 
private static Matcher<Object> viewShouldHaveBackgroundColor(final Matcher<Integer> expectedObject) { 
    final int[] color = new int[1]; 
    return new BoundedMatcher<Object, View>(View.class) { 
     @Override 
     public boolean matchesSafely(View view) { 

      color[0] =((ColorDrawable) view.getBackground()).getColor(); 


      if(expectedObject.matches(color[0])) { 
       return true; 
      } else { 
       return false; 
      } 
     } 
     @Override 
     public void describeTo(final Description description) { 
      // Should be improved! 
      description.appendText("Color did not match " + color[0]); 
     } 
    }; 
} 

Попытку проверить с

onView(withText("itemtext")).check(matches(backgroundShouldHaveColor(Color.LTGRAY))); 

я получаю исключение нулевого указателя.

ответ

1

Следующая, кажется, работает для меня:

onView(withChild(withText("itemtext"))) // this matches the LinearLayout or row/convertview 
     .check(matches(withBgColor(Color.LTGRAY))); 

где обычай согласовани является:

public static Matcher<View> withBgColor(final int color) { 
    Checks.checkNotNull(color); 
    return new BoundedMatcher<View, LinearLayout>(LinearLayout.class) { 
     @Override 
     public boolean matchesSafely(LinearLayout row) { 
      return color == ((ColorDrawable) row.getBackground()).getColor(); 
     } 
     @Override 
     public void describeTo(Description description) { 
      description.appendText("with text color: "); 
     } 
    }; 
} 

Это для ListView в три столбца, где каждая строка состоит из LinearLayout 3 ребенка TextViews , "withText (" itemtext ")" соответствует элементу/TextView в первом столбце. Элементы в этом столбце уникальны.

 Смежные вопросы

  • Нет связанных вопросов^_^