1

I'm using Roboletric and I would like to test the onClick into the "viewHolder.cardView" element.

This is my custom adapter (that has two elements). I already build my list and adapter, but how I can test the onClick event with roboletric?

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
   SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_FORMAT, Locale.getDefault());

     if (position < mMessageList.size()) {

        ItemHolder viewHolder;

        if (convertView == null) {
           convertView =   LayoutInflater.from(getContext())
                       .inflate(R.layout.item_list, parent, false);
           viewHolder = new ItemHolder();
           viewHolder.cardView = (RelativeLayout) convertView.findViewById(R.id.clickable_area);

            viewHolder.txtDate = (TextView)    convertView.findViewById(R.id.message_date);

            convertView.setTag(viewHolder);
            } else {
              viewHolder = (ItemHolder) convertView.getTag();
            }

            final ItemModel item = mMessageList.get(position);

            if (item != null) {
              viewHolder.id = item.getId();
              if (item.getTimestamp() != null){
                          viewHolder.txtDate.setText(dateFormat.format(item.getTimestamp()));
             }

             viewHolder.cardView.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                      addSelection();
                  }
              });

       viewHolder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
                  @Override
                   public boolean onLongClick(View view) {
                      return true;
                    }
                  });

                  viewHolder.cardView.setSelected(item.isSelected());
                }
            }
            return convertView;
        }
     static class ItemHolder {
          protected RelativeLayout cardView;
          protected TextView txtDate;
     }
rafaelasguerra
  • 2,685
  • 5
  • 24
  • 56

1 Answers1

0

Here is what we are doing similar:

SiteAdapter.ViewHolder viewHolder = adapter.onCreateViewHolder(viewGroup, -1);
adapter.setSites(SITES);
adapter.bindViewHolder(viewHolder, 0);

viewHolder.rowLayout.performClick();

verify(busMock).send(selectedEventCaptor.capture());

assertThat(selectedEventCaptor.getValue().getSite()).isEqualTo(SITES.get(0));

where:

@Captor
private ArgumentCaptor<SiteSelectedEvent> selectedEventCaptor;

@Mock
private EventBus busMock;

private static final List<Site> SITES =
  Arrays.asList(new Site("1", "Test 1", new Links("one", "two")),
                new Site("2", "Test 2", new Links("three", "four")));
Eugen Martynov
  • 19,888
  • 10
  • 61
  • 114