Ticket #16943: v1-0002-ChangesetCacheManagerTest-fix-testQueryAction-for.patch

File v1-0002-ChangesetCacheManagerTest-fix-testQueryAction-for.patch, 7.2 KB (added by ris, 7 years ago)
  • src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java

    From 2ceadbcb285b59d57ee820d0171e9599cd95b630 Mon Sep 17 00:00:00 2001
    From: Robert Scott <code@humanleg.org.uk>
    Date: Thu, 1 Nov 2018 22:05:13 +0000
    Subject: [PATCH v1 2/4] ChangesetCacheManagerTest: fix testQueryAction for
     non-headless mode, also increasing coverage of test
    
    ---
     .../dialogs/changeset/ChangesetCacheManager.java   | 28 ++++++-------
     .../changeset/query/ChangesetQueryDialog.java      |  8 +++-
     .../changeset/ChangesetCacheManagerTest.java       | 49 ++++++++++++++++++++++
     3 files changed, 68 insertions(+), 17 deletions(-)
    
    diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
    index 062945664..a24638b72 100644
    a b public class ChangesetCacheManager extends JFrame {  
    392392        @Override
    393393        public void actionPerformed(ActionEvent evt) {
    394394            Window parent = GuiHelper.getWindowAncestorFor(evt);
    395             if (!GraphicsEnvironment.isHeadless()) {
    396                 ChangesetQueryDialog dialog = new ChangesetQueryDialog(parent);
    397                 dialog.initForUserInput();
    398                 dialog.setVisible(true);
    399                 if (dialog.isCanceled())
    400                     return;
    401 
    402                 try {
    403                     ChangesetQuery query = dialog.getChangesetQuery();
    404                     if (query != null) {
    405                         ChangesetCacheManager.getInstance().runDownloadTask(new ChangesetQueryTask(parent, query));
    406                     }
    407                 } catch (IllegalStateException e) {
    408                     Logging.error(e);
    409                     JOptionPane.showMessageDialog(parent, e.getMessage(), tr("Error"), JOptionPane.ERROR_MESSAGE);
     395            ChangesetQueryDialog dialog = new ChangesetQueryDialog(parent);
     396            dialog.initForUserInput();
     397            dialog.setVisible(true);
     398            if (dialog.isCanceled())
     399                return;
     400
     401            try {
     402                ChangesetQuery query = dialog.getChangesetQuery();
     403                if (query != null) {
     404                    ChangesetCacheManager.getInstance().runDownloadTask(new ChangesetQueryTask(parent, query));
    410405                }
     406            } catch (IllegalStateException e) {
     407                Logging.error(e);
     408                JOptionPane.showMessageDialog(parent, e.getMessage(), tr("Error"), JOptionPane.ERROR_MESSAGE);
    411409            }
    412410        }
    413411    }
  • src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialog.java

    diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialog.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialog.java
    index 6766ad84d..fbcf78be2 100644
    a b public class ChangesetQueryDialog extends JDialog {  
    7272    protected JPanel buildButtonPanel() {
    7373        JPanel pnl = new JPanel(new FlowLayout(FlowLayout.CENTER));
    7474
    75         pnl.add(new JButton(new QueryAction()));
    76         pnl.add(new JButton(new CancelAction()));
     75        final JButton queryButton = new JButton(new QueryAction());
     76        queryButton.setName("queryButton");
     77        pnl.add(queryButton);
     78        final JButton cancelButton = new JButton(new CancelAction());
     79        cancelButton.setName("cancelButton");
     80        pnl.add(cancelButton);
    7781        pnl.add(new JButton(new ContextSensitiveHelpAction(HelpUtil.ht("/Dialog/ChangesetQuery"))));
    7882
    7983        return pnl;
  • test/unit/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerTest.java

    diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerTest.java
    index 589462645..df518ea21 100644
    a b  
    22package org.openstreetmap.josm.gui.dialogs.changeset;
    33
    44import static org.junit.Assert.assertNotNull;
     5import static org.junit.Assert.assertTrue;
     6
     7import java.awt.GraphicsEnvironment;
     8import javax.swing.JButton;
     9import javax.swing.JDialog;
    510
    611import java.util.Collections;
    712import java.util.List;
    813
    914import org.junit.Rule;
    1015import org.junit.Test;
     16import org.openstreetmap.josm.TestUtils;
    1117import org.openstreetmap.josm.data.osm.Changeset;
    1218import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager.CancelAction;
    1319import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager.ChangesetDetailViewSynchronizer;
    import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager.Downlo  
    1824import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager.QueryAction;
    1925import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager.RemoveFromCacheAction;
    2026import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager.ShowDetailAction;
     27import org.openstreetmap.josm.gui.dialogs.changeset.query.ChangesetQueryDialog;
    2128import org.openstreetmap.josm.testutils.JOSMTestRules;
     29import org.openstreetmap.josm.testutils.mockers.WindowMocker;
     30
     31import mockit.Invocation;
     32import mockit.Mock;
     33import mockit.MockUp;
    2234
    2335import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
    2436
    public class ChangesetCacheManagerTest {  
    130142     */
    131143    @Test
    132144    public void testQueryAction() {
     145        TestUtils.assumeWorkingJMockit();
     146
     147        // set up mockers to simulate the dialog being cancelled
     148        final boolean[] dialogShown = new boolean[] {false};
     149        if (GraphicsEnvironment.isHeadless()) {
     150            new WindowMocker();
     151        }
     152        new MockUp<JDialog>() {
     153            @Mock
     154            void setVisible(final Invocation invocation, final boolean visible) throws Exception {
     155                if (visible) {
     156                    ((JButton) TestUtils.getComponentByName((JDialog) invocation.getInvokedInstance(), "cancelButton")).doClick();
     157                    dialogShown[0] = true;
     158                }
     159                // critically, don't proceed into implementation
     160            }
     161        };
     162        new MockUp<ChangesetQueryDialog>() {
     163            @Mock
     164            void setVisible(final Invocation invocation, final boolean visible) throws Exception {
     165                if (GraphicsEnvironment.isHeadless()) {
     166                    // we have to mock the behaviour quite coarsely as much of ChangesetQueryDialog will
     167                    // raise a HeadlessException
     168                    if (visible) {
     169                        TestUtils.setPrivateField(ChangesetQueryDialog.class, invocation.getInvokedInstance(), "canceled", true);
     170                        dialogShown[0] = true;
     171                    }
     172                } else {
     173                    // proceeding into the implementation allows a bit more of the target code to be
     174                    // covered, actual mocking is performed on JDialog's setVisible()
     175                    invocation.proceed(visible);
     176                }
     177            }
     178        };
     179
    133180        new QueryAction().actionPerformed(null);
     181
     182        assertTrue(dialogShown[0]);
    134183    }
    135184
    136185    /**