package pipe.gui.model;
import matchers.component.PropertyChangeUtils;
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.PipeApplicationModel;
import pipe.actions.gui.CreateAction;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import static org.junit.Assert.assertFalse;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.argThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class PipeApplicationModelTest {
PipeApplicationModel model;
@Mock
PropertyChangeListener listener;
@Before
public void setUp() {
model = new PipeApplicationModel("5");
model.addPropertyChangeListener(listener);
}
@Test
public void initiallyNotInAnimationMode() {
assertFalse(model.isInAnimationMode());
}
@Test
public void changeAnimationModeNotifiesListener() {
model.setInAnimationMode(true);
verify(listener).propertyChange(argThat(PropertyChangeUtils.hasValues(PipeApplicationModel.TOGGLE_ANIMATION_MODE, false, true)));
}
@Test
public void doesNotFireChangeListenerIfAnimValuesAreTheSame() {
model.setInAnimationMode(false);
verify(listener, never()).propertyChange(any(PropertyChangeEvent.class));
}
@Test
public void changeActionNotifiesListener() {
CreateAction mockAction = mock(CreateAction.class);
model.selectTypeAction(mockAction);
verify(listener).propertyChange(argThat(PropertyChangeUtils.hasValues(PipeApplicationModel.TYPE_ACTION_CHANGE_MESSAGE, null, mockAction)));
}
}