Ticket #16841: v1-0003-MergeLayerActionTest-DownloadWmsAlongTrackActionT.patch

File v1-0003-MergeLayerActionTest-DownloadWmsAlongTrackActionT.patch, 10.5 KB (added by ris, 7 years ago)
  • src/org/openstreetmap/josm/actions/AbstractMergeAction.java

    From e64efcd9734365927905ee327de78a7eba8e2cc7 Mon Sep 17 00:00:00 2001
    From: Robert Scott <code@humanleg.org.uk>
    Date: Sat, 13 Oct 2018 19:29:36 +0100
    Subject: [PATCH v1 3/3] MergeLayerActionTest, DownloadWmsAlongTrackActionTest:
     fix for non-headless mode by properly mocking dialogs
    
    ---
     .../josm/actions/AbstractMergeAction.java          |  9 +----
     .../gui/layer/gpx/DownloadWmsAlongTrackAction.java |  4 +-
     .../josm/actions/MergeLayerActionTest.java         | 43 +++++++++++++++++++++-
     .../layer/gpx/DownloadWmsAlongTrackActionTest.java | 25 +++++++++++++
     4 files changed, 70 insertions(+), 11 deletions(-)
    
    diff --git a/src/org/openstreetmap/josm/actions/AbstractMergeAction.java b/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
    index ebcfdae9a..33b68f83b 100644
    a b public abstract class AbstractMergeAction extends JosmAction {  
    109109        JPanel pnl = new JPanel(new GridBagLayout());
    110110        pnl.add(new JLabel(label), GBC.eol());
    111111        pnl.add(layerList, GBC.eol().fill(GBC.HORIZONTAL));
    112         if (GraphicsEnvironment.isHeadless()) {
    113             // return first layer in headless mode, for unit tests
    114             return targetLayers[0];
    115         }
     112
    116113        ExtendedDialog ed = new ExtendedDialog(MainApplication.getMainFrame(), title, buttonText, tr("Cancel"));
    117114        ed.setButtonIcons(buttonIcon, "cancel");
    118115        ed.setContent(pnl);
    public abstract class AbstractMergeAction extends JosmAction {  
    130127    protected void warnNoTargetLayersForSourceLayer(Layer sourceLayer) {
    131128        String message = tr("<html>There are no layers the source layer<br>''{0}''<br>could be merged to.</html>",
    132129                Utils.escapeReservedCharactersHTML(sourceLayer.getName()));
    133         if (!GraphicsEnvironment.isHeadless()) {
    134             JOptionPane.showMessageDialog(MainApplication.getMainFrame(), message, tr("No target layers"), JOptionPane.WARNING_MESSAGE);
    135         }
     130        JOptionPane.showMessageDialog(MainApplication.getMainFrame(), message, tr("No target layers"), JOptionPane.WARNING_MESSAGE);
    136131    }
    137132}
  • src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java

    diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
    index b9cc6cb48..9de3c676f 100644
    a b public class DownloadWmsAlongTrackAction extends AbstractAction {  
    117117    protected AbstractTileSourceLayer<? extends AbstractTMSTileSource> askedLayer() {
    118118        List<AbstractTileSourceLayer> targetLayers = MainApplication.getLayerManager().getLayersOfType(AbstractTileSourceLayer.class);
    119119        if (targetLayers.isEmpty()) {
    120             if (!GraphicsEnvironment.isHeadless()) {
    121                 warnNoImageryLayers();
    122             }
     120            warnNoImageryLayers();
    123121            return null;
    124122        }
    125123        return AbstractMergeAction.askTargetLayer(targetLayers.toArray(new AbstractTileSourceLayer[0]),
  • test/unit/org/openstreetmap/josm/actions/MergeLayerActionTest.java

    diff --git a/test/unit/org/openstreetmap/josm/actions/MergeLayerActionTest.java b/test/unit/org/openstreetmap/josm/actions/MergeLayerActionTest.java
    index 77548165a..7c9a28b27 100644
    a b  
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.actions;
    33
     4import javax.swing.JLabel;
     5import javax.swing.JPanel;
     6
    47import static org.junit.Assert.assertEquals;
    58import static org.junit.Assert.assertNull;
    69
    import org.junit.Before;  
    811import org.junit.Rule;
    912import org.junit.Test;
    1013import org.openstreetmap.josm.data.osm.DataSet;
     14import org.openstreetmap.josm.gui.ExtendedDialog;
    1115import org.openstreetmap.josm.gui.MainApplication;
    1216import org.openstreetmap.josm.gui.layer.LayerManagerTest.TestLayer;
    1317import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     18import org.openstreetmap.josm.gui.widgets.JosmComboBox;
     19import org.openstreetmap.josm.TestUtils;
    1420import org.openstreetmap.josm.testutils.JOSMTestRules;
     21import org.openstreetmap.josm.testutils.mockers.ExtendedDialogMocker;
     22import org.openstreetmap.josm.testutils.mockers.JOptionPaneSimpleMocker;
     23
     24import com.google.common.collect.ImmutableMap;
    1525
    1626import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
    1727
    public class MergeLayerActionTest {  
    2737    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
    2838    public JOSMTestRules test = new JOSMTestRules().main();
    2939
     40    public static class MergeLayerExtendedDialogMocker extends ExtendedDialogMocker {
     41        @Override
     42        protected void act(final ExtendedDialog instance) {
     43            ((JosmComboBox) ((JPanel) this.getContent(instance)).getComponent(1)).setSelectedIndex(0);
     44        }
     45
     46        @Override
     47        protected String getString(final ExtendedDialog instance) {
     48            return ((JLabel) ((JPanel) this.getContent(instance)).getComponent(0)).getText();
     49        }
     50    };
     51
    3052    private MergeLayerAction action;
    3153
    3254    /**
    public class MergeLayerActionTest {  
    5779     */
    5880    @Test
    5981    public void testMergeNoTargetLayer() {
    60         OsmDataLayer layer = new OsmDataLayer(new DataSet(), "", null);
     82        TestUtils.assumeWorkingJMockit();
     83        final JOptionPaneSimpleMocker jopsMocker = new JOptionPaneSimpleMocker(
     84            ImmutableMap.<String, Object>of("<html>There are no layers the source layer<br>'onion'<br>could be merged to.</html>", 0)
     85        );
     86
     87        OsmDataLayer layer = new OsmDataLayer(new DataSet(), "onion", null);
    6188        MainApplication.getLayerManager().addLayer(layer);
    6289        assertEquals(1, MainApplication.getLayerManager().getLayers().size());
    6390        assertNull(action.merge(layer));
    6491        assertEquals(1, MainApplication.getLayerManager().getLayers().size());
     92
     93        assertEquals(1, jopsMocker.getInvocationLog().size());
     94        Object[] invocationLogEntry = jopsMocker.getInvocationLog().get(0);
     95        assertEquals(0, (int) invocationLogEntry[0]);
     96        assertEquals("No target layers", invocationLogEntry[2]);
    6597    }
    6698
    6799    /**
    public class MergeLayerActionTest {  
    70102     */
    71103    @Test
    72104    public void testMergeTwoEmptyLayers() throws Exception {
     105        TestUtils.assumeWorkingJMockit();
     106        final MergeLayerExtendedDialogMocker edMocker = new MergeLayerExtendedDialogMocker();
     107        edMocker.getMockResultMap().put("Please select the target layer.", "Merge");
     108
    73109        OsmDataLayer layer1 = new OsmDataLayer(new DataSet(), "1", null);
    74110        OsmDataLayer layer2 = new OsmDataLayer(new DataSet(), "2", null);
    75111        MainApplication.getLayerManager().addLayer(layer1);
    public class MergeLayerActionTest {  
    77113        assertEquals(2, MainApplication.getLayerManager().getLayers().size());
    78114        action.merge(layer2).get();
    79115        assertEquals(1, MainApplication.getLayerManager().getLayers().size());
     116
     117        assertEquals(1, edMocker.getInvocationLog().size());
     118        Object[] invocationLogEntry = edMocker.getInvocationLog().get(0);
     119        assertEquals(1, (int) invocationLogEntry[0]);
     120        assertEquals("Select target layer", invocationLogEntry[2]);
    80121    }
    81122}
  • test/unit/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackActionTest.java

    diff --git a/test/unit/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackActionTest.java b/test/unit/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackActionTest.java
    index 637036c93..8c4ab71ea 100644
    a b  
    22package org.openstreetmap.josm.gui.layer.gpx;
    33
    44import static java.util.concurrent.TimeUnit.MILLISECONDS;
     5import static org.junit.Assert.assertEquals;
    56import static org.junit.Assert.assertNotNull;
    67import static org.junit.Assert.assertNull;
    78import static org.junit.Assert.assertTrue;
    import static org.junit.Assert.assertTrue;  
    910import org.awaitility.Awaitility;
    1011import org.junit.Rule;
    1112import org.junit.Test;
     13import org.openstreetmap.josm.actions.MergeLayerActionTest.MergeLayerExtendedDialogMocker;
    1214import org.openstreetmap.josm.data.gpx.GpxData;
    1315import org.openstreetmap.josm.gui.MainApplication;
    1416import org.openstreetmap.josm.gui.layer.GpxLayerTest;
    1517import org.openstreetmap.josm.gui.layer.TMSLayer;
    1618import org.openstreetmap.josm.gui.layer.gpx.DownloadWmsAlongTrackAction.PrecacheWmsTask;
     19import org.openstreetmap.josm.TestUtils;
    1720import org.openstreetmap.josm.testutils.JOSMTestRules;
    1821import org.openstreetmap.josm.testutils.TileSourceRule;
     22import org.openstreetmap.josm.testutils.mockers.JOptionPaneSimpleMocker;
     23
     24import com.google.common.collect.ImmutableMap;
    1925
    2026import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
    2127
    public class DownloadWmsAlongTrackActionTest {  
    3642     */
    3743    @Test
    3844    public void testNoLayer() {
     45        TestUtils.assumeWorkingJMockit();
     46        final JOptionPaneSimpleMocker jopsMocker = new JOptionPaneSimpleMocker(
     47            ImmutableMap.<String, Object>of("There are no imagery layers.", 0)
     48        );
     49
    3950        assertNull(new DownloadWmsAlongTrackAction(new GpxData()).createTask());
     51
     52        assertEquals(1, jopsMocker.getInvocationLog().size());
     53        Object[] invocationLogEntry = jopsMocker.getInvocationLog().get(0);
     54        assertEquals(0, (int) invocationLogEntry[0]);
     55        assertEquals("No imagery layers", invocationLogEntry[2]);
    4056    }
    4157
    4258    /**
    public class DownloadWmsAlongTrackActionTest {  
    4561     */
    4662    @Test
    4763    public void testTMSLayer() throws Exception {
     64        TestUtils.assumeWorkingJMockit();
     65        final MergeLayerExtendedDialogMocker edMocker = new MergeLayerExtendedDialogMocker();
     66        edMocker.getMockResultMap().put("Please select the imagery layer.", "Download");
     67
    4868        final TileSourceRule tileSourceRule = this.test.getTileSourceRule();
    4969
    5070        final TMSLayer layer = new TMSLayer(
    public class DownloadWmsAlongTrackActionTest {  
    6484            // Ensure we clean the place before leaving, even if test fails.
    6585            MainApplication.getLayerManager().removeLayer(layer);
    6686        }
     87
     88        assertEquals(1, edMocker.getInvocationLog().size());
     89        Object[] invocationLogEntry = edMocker.getInvocationLog().get(0);
     90        assertEquals(1, (int) invocationLogEntry[0]);
     91        assertEquals("Select imagery layer", invocationLogEntry[2]);
    6792    }
    6893}