package pipe.views;
import matchers.component.PropertyChangeUtils;
import org.junit.Test;
import pipe.actions.gui.ZoomManager;
import pipe.actions.gui.ZoomUI;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import static org.junit.Assert.*;
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;
public class ZoomUITest {
private final static double MAX_ZOOM = 3;
private final static double MIN_ZOOM = 0.6;
private final static double ZOOM_INCREMENT = 0.1;
@Test
public void returnsCorrectPercentage() {
ZoomManager zoomUI = new ZoomUI(1, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
assertEquals(100, zoomUI.getPercentageZoom());
}
@Test
public void returnsCorrectPercentageForNonIntegerScale() {
ZoomManager zoomUI = new ZoomUI(1.2, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
assertEquals(120, zoomUI.getPercentageZoom());
}
@Test
public void canZoomOutIfGreaterThanMinValue() {
double scale = MIN_ZOOM + ZOOM_INCREMENT;
ZoomManager zoomUI = new ZoomUI(scale, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
assertTrue(zoomUI.canZoomOut());
}
@Test
public void zoomsOutIfGreaterThanMinValue() {
double scale = MIN_ZOOM + ZOOM_INCREMENT;
ZoomManager zoomUI = new ZoomUI(scale, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
zoomUI.zoomOut();
assertEquals(toPercentage(scale - ZOOM_INCREMENT), zoomUI.getPercentageZoom());
}
private int toPercentage(double zoomScale) {
return (int) (zoomScale * 100);
}
@Test
public void cantZoomOutIfMinValue() {
ZoomManager zoomUI = new ZoomUI(MIN_ZOOM, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
assertFalse(zoomUI.canZoomOut());
}
@Test
public void wontZoomOutIfMinValue() {
ZoomManager zoomUI = new ZoomUI(MIN_ZOOM, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
zoomUI.zoomOut();
assertEquals(toPercentage(MIN_ZOOM), zoomUI.getPercentageZoom());
}
@Test
public void canZoomInIfGreaterThanMaxValue() {
double scale = MAX_ZOOM - ZOOM_INCREMENT;
ZoomManager zoomUI = new ZoomUI(scale, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
assertTrue(zoomUI.canZoomIn());
}
@Test
public void zoomsInIfLessThanMaxValue() {
double scale = MAX_ZOOM - ZOOM_INCREMENT;
ZoomManager zoomUI = new ZoomUI(scale, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
zoomUI.zoomIn();
assertEquals(toPercentage(scale + ZOOM_INCREMENT), zoomUI.getPercentageZoom());
}
@Test
public void cantZoomInIfMaxValue() {
ZoomManager zoomUI = new ZoomUI(MAX_ZOOM, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
assertFalse(zoomUI.canZoomIn());
}
@Test
public void wontZoomInIfMaxValue() {
ZoomManager zoomUI = new ZoomUI(MAX_ZOOM, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
zoomUI.zoomIn();
assertEquals(toPercentage(MAX_ZOOM), zoomUI.getPercentageZoom());
}
@Test
public void wontFireChangeIfCantZoomIn() {
PropertyChangeListener listener = mock(PropertyChangeListener.class);
ZoomUI zoomUI = new ZoomUI(MAX_ZOOM, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
zoomUI.addPropertyChangeListener(listener);
zoomUI.zoomIn();
verify(listener, never()).propertyChange(any(PropertyChangeEvent.class));
}
@Test
public void wontFireChangeIfCantZoomOut() {
PropertyChangeListener listener = mock(PropertyChangeListener.class);
ZoomUI zoomUI = new ZoomUI(MIN_ZOOM, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
zoomUI.addPropertyChangeListener(listener);
zoomUI.zoomOut();
verify(listener, never()).propertyChange(any(PropertyChangeEvent.class));
}
@Test
public void firesChangeOnZoomIn() {
PropertyChangeListener listener = mock(PropertyChangeListener.class);
ZoomUI zoomUI = new ZoomUI(1, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
zoomUI.addPropertyChangeListener(listener);
zoomUI.zoomIn();
verify(listener).propertyChange(argThat(PropertyChangeUtils.hasValues(ZoomUI.ZOOM_IN_CHANGE_MESSAGE, 1.0, 1.1)));
}
@Test
public void firesChangeOnZoomOut() {
PropertyChangeListener listener = mock(PropertyChangeListener.class);
ZoomUI zoomUI = new ZoomUI(1, ZOOM_INCREMENT, MAX_ZOOM, MIN_ZOOM, null);
zoomUI.addPropertyChangeListener(listener);
zoomUI.zoomOut();
verify(listener).propertyChange(argThat(PropertyChangeUtils.hasValues(ZoomUI.ZOOM_OUT_CHANGE_MESSAGE, 1.0, 0.9)));
}
}