// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.dialogs.layer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Rule;
import org.junit.Test;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
import org.openstreetmap.josm.gui.dialogs.LayerListDialog.LayerListModel;
import org.openstreetmap.josm.gui.layer.TMSLayer;
import org.openstreetmap.josm.gui.layer.TMSLayerTest;
import org.openstreetmap.josm.testutils.JOSMTestRules;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
* Unit tests of {@link LayerVisibilityAction} class.
*/
public class LayerVisibilityActionTest {
/**
* TMS layer needs prefs. Platform for LayerListDialog shortcuts.
*/
@Rule
@SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public JOSMTestRules test = new JOSMTestRules().preferences().projection().platform();
/**
* Unit test of {@link LayerVisibilityAction} class.
*/
@Test
public void testLayerVisibilityAction() {
TMSLayer layer = TMSLayerTest.createTmsLayer();
LayerListModel model = new LayerListDialog(Main.getLayerManager()) {
@Override
protected void registerInWindowMenu() {
// ignore
}
}.getModel();
LayerVisibilityAction action = new LayerVisibilityAction(model);
action.updateEnabledState();
assertFalse(action.isEnabled());
Main.getLayerManager().addLayer(layer);
model.setSelectedLayer(layer);
action.updateEnabledState();
assertTrue(action.isEnabled());
assertTrue(action.supportLayers(model.getSelectedLayers()));
// now check values
action.updateValues();
assertEquals(1.0, action.opacitySlider.getRealValue(), 1e-15);
assertEquals("OpacitySlider [getRealValue()=1.0]", action.opacitySlider.toString());
action.opacitySlider.setRealValue(.5);
action.updateValues();
assertEquals(0.5, action.opacitySlider.getRealValue(), 1e-15);
assertEquals("OpacitySlider [getRealValue()=0.5]", action.opacitySlider.toString());
action.setVisibleFlag(false);
action.updateValues();
assertFalse(layer.isVisible());
action.setVisibleFlag(true);
action.updateValues();
assertTrue(layer.isVisible());
// layer stays visible during adjust
action.opacitySlider.setValueIsAdjusting(true);
action.opacitySlider.setRealValue(0);
assertEquals(0, layer.getOpacity(), 1e-15);
layer.setOpacity(.1); // to make layer.isVisible work
assertTrue(layer.isVisible());
layer.setOpacity(0);
action.opacitySlider.setValueIsAdjusting(false);
action.opacitySlider.setRealValue(0);
assertEquals(0, layer.getOpacity(), 1e-15);
layer.setOpacity(.1); // to make layer.isVisible work
assertFalse(layer.isVisible());
layer.setOpacity(0);
action.updateValues();
// Opacity reset when it was 0 and user set layer to visible.
action.setVisibleFlag(true);
action.updateValues();
assertEquals(1.0, action.opacitySlider.getRealValue(), 1e-15);
assertEquals(1.0, layer.getOpacity(), 1e-15);
}
}