I am done with my RecyclerView and would like to generate a junit_test with a height code coverage. It will be my first junit test, so I would ask you for help. I see there is also a Roboelectric test. Which is better for RecyclerView?
This is my Adapter:
public class SdsORecyclerViewAdapter extends RecyclerView.Adapter<SdsORecyclerViewViewHolder>
{
private static final ILogger logger = LoggerConfiguration.sdsHistoryOverviewFragment;
private final ServiceInterface serviceInterface;
private final SdsORecyclerViewPresenter presenter;
/*
longpress configuration
*/
private int mExpandedPosition = -1;
private int previousExpandedPosition = -1;
public SdsORecyclerViewAdapter(ServiceInterface serviceInterface,
SdsORecyclerViewPresenter sdsORecyclerViewPresenter)
{
this.serviceInterface = serviceInterface;
this.presenter = sdsORecyclerViewPresenter;
}
@Override
public SdsORecyclerViewViewHolder onCreateViewHolder(final ViewGroup viewGroup, final int viewType)
{
/*
creates a new view.
*/
View sdsoview = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.sds_history_conversation_overview_item, viewGroup, false);
return new SdsORecyclerViewViewHolder(sdsoview, serviceInterface);
}
@Override
public void onBindViewHolder(final SdsORecyclerViewViewHolder sdsoviewholder, final int position)
{
presenter.onBindViewHolder(position, sdsoviewholder);
/*
set contextmenu to visible or gone if @param menuIsExpanded is true or false
*/
final boolean menuIsExpanded;
if (position == mExpandedPosition)
{
menuIsExpanded = true;
logger.finest("OPENED " + mExpandedPosition + " SET menuIsExpanded TRUE AD");
}
else
{
menuIsExpanded = false;
logger.finest("CLOSED " + position + " OPENED " + mExpandedPosition + " SET menuIsExpanded FALSE AD");
}
if (menuIsExpanded)
{
sdsoviewholder.getContextMenu().setVisibility(View.VISIBLE);
logger.finest("VISBLE AD");
}
else
{
sdsoviewholder.getContextMenu().setVisibility(View.GONE);
logger.finest("GONE AD");
}
sdsoviewholder.itemView.setActivated(menuIsExpanded);
if (menuIsExpanded)
{
previousExpandedPosition = position;
logger.finest(position + " menuIsExpanded AD");
}
logger.finest(String.valueOf(menuIsExpanded) + " VH.");
/*
longClickListiner for the contextmenu
*/
sdsoviewholder.itemView.setOnLongClickListener(new View.OnLongClickListener()
{
@Override
public boolean onLongClick(View v)
{
if (menuIsExpanded)
{
mExpandedPosition = -1;
}
else
{
mExpandedPosition = position;
}
notifyItemChanged(previousExpandedPosition);
notifyItemChanged(position);
sdsoviewholder.getContextMenu().setSelected(true);
return true;
}
});
}
@Override
public int getItemCount()
{
return presenter.getItemCountFromPresenter();
}
}
This is my ViewHolder
public class SdsORecyclerViewViewHolder extends RecyclerView.ViewHolder
{
private static final ILogger logger = LoggerConfiguration.sdsHistoryOverviewFragment;
final ServiceInterface serviceInterface;
/*
declaration for the ViewHolder
*/
private TextView sdsDate;
private TextView sdsSsi;
private TextView sdsMessage;
private TextView sdsLastSender;
private ImageView sdsImage;
private ViewGroup contextMenu;
public SdsORecyclerViewViewHolder(final View sdsoview,
ServiceInterface serviceInterface)
{
super(sdsoview);
this.serviceInterface = serviceInterface;
/*
if a new SDS is incoming and the SDSO_RecyclerView is opened, then this line is resetting the "newSDS" counter in the MainScreen
TODO: if an item with a new SDS is opened (first mark the item maybe in red? to show the user this is a new SDS) then reset the "newSDS" counter.
*/
SdsNewSdsSeenAction sdsNewSdsSeenAction = new SdsNewSdsSeenAction();
if (serviceInterface != null)
{
serviceInterface.sendMessage(sdsNewSdsSeenAction);
}
/*
setting up the view (binding the items from the row_list)
*/
sdsDate = (TextView) sdsoview.findViewById(R.id.sds_item_receiving_date);
sdsSsi = (TextView) sdsoview.findViewById(R.id.sds_item_ssi);
sdsMessage = (TextView) sdsoview.findViewById(R.id.sds_item_message_short);
sdsLastSender = (TextView) sdsoview.findViewById(R.id.sds_item_last_sender);
sdsImage = (ImageView) sdsoview.findViewById(R.id.sds_history_overview_item_delete_sds);
contextMenu = (ViewGroup) sdsoview.findViewById(R.id.sds_history_overview_item_menu);
}
/*
getter for the presenter
*/
public TextView getSdsDate()
{
return sdsDate;
}
public TextView getSdsSsi()
{
return sdsSsi;
}
public TextView getSdsMessage()
{
return sdsMessage;
}
public TextView getSdsLastSender()
{
return sdsLastSender;
}
public ImageView getSdsImage()
{
return sdsImage;
}
public ViewGroup getContextMenu()
{
return contextMenu;
}
}
This is my presenter
public class SdsORecyclerViewPresenter
{
private static final ILogger logger = LoggerConfiguration.sdsHistoryOverviewFragment;
private List<SdsChatsSqliteViewModel> sdsChatList;
private final IDataModel dataModel;
private final FragmentSwitcher fragmentSwitcher;
private final ServiceInterface serviceInterface;
public SdsORecyclerViewPresenter(List<SdsChatsSqliteViewModel> sdsODataset,
FragmentSwitcher fragmentSwitcher,
IDataModel dataModel,
ServiceInterface serviceInterface)
{
this.sdsChatList = sdsODataset;
this.fragmentSwitcher = fragmentSwitcher;
this.dataModel = dataModel;
this.serviceInterface = serviceInterface;
}
/*
The onBindViewHolder method is setting the items for the RecyclerView from the DataModel
*/
public void onBindViewHolder(final int position, final SdsORecyclerViewViewHolder sdsoviewholder)
{
final SdsChatsSqliteViewModel dataset = sdsChatList.get(position);
String senderSsi = dataset.getSenderSsi();
String recipientSsi = dataset.getRecipientSsi();
String message = dataset.getMessage();
String date = dataset.getCreatedAt();
// VIEW IDENTIFICATION
String recipientName = dataset.getRecipientName();
String senderName = dataset.getSenderName();
final String identifyingSsi = SsiHelper.extractIdentifyingSsi(this.dataModel.getOwnSsi(),
senderSsi,
recipientSsi);
String lastMessageFrom;
if (senderName == null || senderName.isEmpty() || "null".equals(senderName))
lastMessageFrom = senderSsi;
else
lastMessageFrom = senderName;
String chatName;
String tmpName;
if (identifyingSsi.equals(senderSsi))
tmpName = senderName;
else
tmpName = recipientName;
if (tmpName == null || tmpName.isEmpty() || "null".equals(tmpName))
chatName = identifyingSsi;
else
chatName = tmpName;
if (logger.isLoggable(Level.FINEST))
{
logger.finest("SdsHistoryOverviewListItem created");
}
sdsoviewholder.getSdsDate().setText(TimeFormatter.formatTime(date));
sdsoviewholder.getSdsSsi().setText(chatName);
sdsoviewholder.getSdsLastSender().setText(lastMessageFrom + ":");
sdsoviewholder.getSdsMessage().setText(message);
logger.finest("Element " + position + " set with SSI " + identifyingSsi + " and name " + chatName);
sdsoviewholder.itemView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
logger.finest("Element " + position + " clicked.");
/*
calls getCurrentChat which refers to the ssi set with setCurrentChatSsi
*/
dataModel.setCurrentChatSsi(identifyingSsi);
logger.finest("CLICK TO CHAT " + identifyingSsi);
fragmentSwitcher.showFragment(FragmentSwitcher.SDS_CHAT);
}
});
/*
Deletefunction for SDS_Message
*/
sdsoviewholder.getSdsImage().setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
sdsoviewholder.getSdsImage()
.setColorFilter(sdsoviewholder.getSdsImage()
.getResources()
.getColor(R.color.color_danger));
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
sdsoviewholder.getSdsImage()
.setColorFilter(sdsoviewholder.getSdsImage()
.getResources()
.getColor(R.color.color_selection));
ButtonAction deleteConvAction = new ButtonAction(ButtonCode.DELETE_CHAT,
ButtonEventType.RELEASE,
identifyingSsi);
logger.finest(identifyingSsi + " deleted");
serviceInterface.sendMessage(deleteConvAction);
}
return true;
}
});
}
public int getItemCountFromPresenter()
{
return sdsChatList.size();
}
}
Thank you very much
Aucun commentaire:
Enregistrer un commentaire