package org.jabref.cleanup;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import org.jabref.gui.cleanup.CleanupActionsListModel;
import org.jabref.logic.cleanup.Cleanups;
import org.jabref.logic.formatter.bibtexfields.ClearFormatter;
import org.jabref.model.cleanup.FieldFormatterCleanup;
import org.jabref.model.cleanup.FieldFormatterCleanups;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
public class CleanupActionsListModelTest {
@Test
public void resetFiresItemsChanged() throws Exception {
CleanupActionsListModel model = new CleanupActionsListModel(Collections.emptyList());
ListDataListener listener = mock(ListDataListener.class);
model.addListDataListener(listener);
FieldFormatterCleanups defaultFormatters = mock(FieldFormatterCleanups.class);
model.reset(defaultFormatters);
ArgumentCaptor<ListDataEvent> argument = ArgumentCaptor.forClass(ListDataEvent.class);
verify(listener).contentsChanged(argument.capture());
assertEquals(ListDataEvent.CONTENTS_CHANGED, argument.getValue().getType());
}
@Test
public void resetSetsFormattersToPassedList() throws Exception {
CleanupActionsListModel model = new CleanupActionsListModel(Collections.emptyList());
FieldFormatterCleanups defaultFormatters = mock(FieldFormatterCleanups.class);
List<FieldFormatterCleanup> formatters = Arrays.asList(new FieldFormatterCleanup("test", new ClearFormatter()));
when(defaultFormatters.getConfiguredActions()).thenReturn(formatters);
model.reset(defaultFormatters);
assertEquals(formatters, model.getAllActions());
}
public List<FieldFormatterCleanup> getDefaultFieldFormatterCleanups() {
FieldFormatterCleanups formatters = Cleanups.DEFAULT_SAVE_ACTIONS;
//new ArrayList because configured actions is an unmodifiable collection
return new ArrayList<>(formatters.getConfiguredActions());
}
@Test
public void removedAtIndexOkay() {
CleanupActionsListModel model = new CleanupActionsListModel(getDefaultFieldFormatterCleanups());
ListDataListener listener = mock(ListDataListener.class);
model.addListDataListener(listener);
model.removeAtIndex(0);
ArgumentCaptor<ListDataEvent> argument = ArgumentCaptor.forClass(ListDataEvent.class);
verify(listener).intervalRemoved(argument.capture());
assertEquals(ListDataEvent.INTERVAL_REMOVED, argument.getValue().getType());
}
@Test
public void removedAtIndexMinus1DoesNothing() {
CleanupActionsListModel model = new CleanupActionsListModel(getDefaultFieldFormatterCleanups());
ListDataListener listener = mock(ListDataListener.class);
model.addListDataListener(listener);
model.removeAtIndex(-1);
verifyZeroInteractions(listener);
}
@Test
public void removedAtIndexgreaterListSizeDoesNothing() {
CleanupActionsListModel model = new CleanupActionsListModel(getDefaultFieldFormatterCleanups());
ListDataListener listener = mock(ListDataListener.class);
model.addListDataListener(listener);
model.removeAtIndex((getDefaultFieldFormatterCleanups().size() + 1));
verifyZeroInteractions(listener);
}
}