package pipe.actions.gui.edit; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import pipe.actions.gui.CutAction; import pipe.controllers.PetriNetController; import pipe.controllers.application.PipeApplicationController; import uk.ac.imperial.pipe.exceptions.PetriNetComponentException; import uk.ac.imperial.pipe.models.petrinet.PetriNetComponent; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import java.util.HashSet; import java.util.Set; import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class CutActionTest { private CutAction cutAction; @Mock private PipeApplicationController applicationController; @Mock private PetriNetController petriNetController; @Mock private UndoableEditListener listener; @Mock private PetriNetComponent component; @Before public void setUp() { cutAction = new CutAction(applicationController); when(applicationController.getActivePetriNetController()).thenReturn(petriNetController); } @Test public void doesNotCutIfNoneSelected() { when(petriNetController.getSelectedComponents()).thenReturn(new HashSet<PetriNetComponent>()); cutAction.actionPerformed(null); verify(petriNetController, never()).copySelection(); } @Test public void doesNotUndoIfNoneSelected() { when(petriNetController.getSelectedComponents()).thenReturn(new HashSet<PetriNetComponent>()); cutAction.addUndoableEditListener(listener); cutAction.actionPerformed(null); verify(listener, never()).undoableEditHappened(any(UndoableEditEvent.class)); } @Test public void performsCutIfSelected() throws PetriNetComponentException { Set<PetriNetComponent> components = new HashSet<>(); components.add(component); when(petriNetController.getSelectedComponents()).thenReturn(components); cutAction.actionPerformed(null); verify(petriNetController).copySelection(); verify(petriNetController).deleteSelection(); } @Test public void performsUndoItemIfSelected() { Set<PetriNetComponent> components = new HashSet<>(); components.add(component); when(petriNetController.getSelectedComponents()).thenReturn(components); cutAction.addUndoableEditListener(listener); cutAction.actionPerformed(null); verify(listener).undoableEditHappened(any(UndoableEditEvent.class)); } }