Ticket #16893: v1-0001-DownloadOpenChangesetsTaskTest-fix-for-non-headle.patch

File v1-0001-DownloadOpenChangesetsTaskTest-fix-for-non-headle.patch, 7.9 KB (added by ris, 8 years ago)
  • src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java

    From ce0d7f6c6721fc98adc4d18c7194bd1beb6e5597 Mon Sep 17 00:00:00 2001
    From: Robert Scott <code@humanleg.org.uk>
    Date: Thu, 25 Oct 2018 21:39:40 +0100
    Subject: [PATCH v1] DownloadOpenChangesetsTaskTest: fix for non-headless mode
    
    ---
     .../josm/gui/io/DownloadOpenChangesetsTask.java    | 20 ++---
     .../gui/io/DownloadOpenChangesetsTaskTest.java     | 88 +++++++++++++++++++++-
     2 files changed, 92 insertions(+), 16 deletions(-)
    
    diff --git a/src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java b/src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java
    index 1fefad0c8..d4a36ccce 100644
    a b public class DownloadOpenChangesetsTask extends PleaseWaitRunnable {  
    6666                    + "You have either chosen to work anonymously or you are not entitled<br>"
    6767                    + "to know the identity of the user on whose behalf you are working.");
    6868            Logging.warn(msg);
    69             if (!GraphicsEnvironment.isHeadless()) {
    70                 JOptionPane.showMessageDialog(GuiHelper.getFrameForComponent(parent),
    71                         "<html>" + msg + "</html>", tr("Missing user identity"), JOptionPane.ERROR_MESSAGE);
    72             }
     69            JOptionPane.showMessageDialog(GuiHelper.getFrameForComponent(parent),
     70                    "<html>" + msg + "</html>", tr("Missing user identity"), JOptionPane.ERROR_MESSAGE);
    7371            return;
    7472        }
    7573        if (canceled) return;
    public class DownloadOpenChangesetsTask extends PleaseWaitRunnable {  
    7876            return;
    7977        }
    8078        if (changesets.isEmpty()) {
    81             if (!GraphicsEnvironment.isHeadless()) {
    82                 JOptionPane.showMessageDialog(
    83                         MainApplication.getMainFrame(),
    84                         tr("There are no open changesets"),
    85                         tr("No open changesets"),
    86                         JOptionPane.INFORMATION_MESSAGE
    87                 );
    88             }
     79            JOptionPane.showMessageDialog(
     80                    MainApplication.getMainFrame(),
     81                    tr("There are no open changesets"),
     82                    tr("No open changesets"),
     83                    JOptionPane.INFORMATION_MESSAGE
     84            );
    8985            return;
    9086        }
    9187        SwingUtilities.invokeLater(() -> ChangesetCache.getInstance().update(changesets));
  • test/unit/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTaskTest.java

    diff --git a/test/unit/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTaskTest.java b/test/unit/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTaskTest.java
    index 669b5ca3b..c7552adbd 100644
    a b  
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.gui.io;
    33
     4import static org.junit.Assert.assertEquals;
    45import static org.junit.Assert.assertNotNull;
    56import static org.junit.Assert.assertNull;
    67import static org.junit.Assert.assertTrue;
    78
     9import java.awt.GraphicsEnvironment;
     10import javax.swing.JOptionPane;
    811import javax.swing.JPanel;
     12import java.net.URL;
    913
    1014import org.junit.Rule;
    1115import org.junit.Test;
     16import org.openstreetmap.josm.TestUtils;
    1217import org.openstreetmap.josm.data.UserIdentityManager;
     18import org.openstreetmap.josm.gui.oauth.OAuthAuthorizationWizard;
    1319import org.openstreetmap.josm.testutils.JOSMTestRules;
     20import org.openstreetmap.josm.testutils.mockers.JOptionPaneSimpleMocker;
     21import org.openstreetmap.josm.testutils.mockers.WindowMocker;
     22import org.openstreetmap.josm.tools.UserCancelException;
     23
     24import mockit.Invocation;
     25import mockit.Mock;
     26import mockit.MockUp;
     27
     28import com.google.common.collect.ImmutableMap;
    1429
    1530import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
    1631
    public class DownloadOpenChangesetsTaskTest {  
    2439     */
    2540    @Rule
    2641    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
    27     public JOSMTestRules test = new JOSMTestRules().preferences().devAPI().timeout(20000);
     42    public JOSMTestRules test = new JOSMTestRules().preferences().devAPI();
     43
     44    public static class OAuthWizardMocker extends MockUp<OAuthAuthorizationWizard> {
     45        public boolean called = false;
     46
     47        @Mock
     48        void showDialog() throws UserCancelException {
     49            this.called = true;
     50            throw new UserCancelException();
     51        }
     52
     53        @Mock
     54        void obtainAccessToken(final Invocation invocation, final URL serverUrl) throws UserCancelException {
     55            if (GraphicsEnvironment.isHeadless()) {
     56                // we can't really let execution proceed any further as construction of the ui
     57                // elements will fail with a mocked Window
     58                this.called = true;
     59                return;
     60            }
     61            // else we can allow a bit more of the code to be covered before we raise
     62            // UserCancelException in showDialog
     63            invocation.proceed(serverUrl);
     64        }
     65    }
    2866
    2967    /**
    30      * Test of {@link DownloadOpenChangesetsTask} class.
     68     * Test of {@link DownloadOpenChangesetsTask} class when anonymous.
    3169     */
    3270    @Test
    33     public void testDownloadOpenChangesetsTask() {
     71    public void testAnonymous() {
     72        TestUtils.assumeWorkingJMockit();
     73        if (GraphicsEnvironment.isHeadless()) {
     74            new WindowMocker();
     75        }
     76        final OAuthWizardMocker oaWizardMocker = new OAuthWizardMocker();
     77        final JOptionPaneSimpleMocker jopsMocker = new JOptionPaneSimpleMocker(
     78            ImmutableMap.<String, Object>of(
     79                "<html>Could not retrieve the list of your open changesets because<br>JOSM does not know "
     80                + "your identity.<br>You have either chosen to work anonymously or you are not "
     81                + "entitled<br>to know the identity of the user on whose behalf you are working.</html>", JOptionPane.OK_OPTION
     82            )
     83        );
     84
    3485        DownloadOpenChangesetsTask task = new DownloadOpenChangesetsTask(new JPanel());
    3586        assertNull(task.getChangesets());
    3687
    public class DownloadOpenChangesetsTaskTest {  
    3889        task.run();
    3990        assertNull(task.getChangesets());
    4091
    41         task = new DownloadOpenChangesetsTask(new JPanel());
     92        assertEquals(1, jopsMocker.getInvocationLog().size());
     93        Object[] invocationLogEntry = jopsMocker.getInvocationLog().get(0);
     94        assertEquals(JOptionPane.OK_OPTION, (int) invocationLogEntry[0]);
     95        assertEquals("Missing user identity", invocationLogEntry[2]);
     96
     97        assertTrue(oaWizardMocker.called);
     98    }
     99
     100    /**
     101     * Test of {@link DownloadOpenChangesetsTask} class when "partially identified".
     102     */
     103    @Test
     104    public void testPartiallyIdentified() {
     105        TestUtils.assumeWorkingJMockit();
     106        if (GraphicsEnvironment.isHeadless()) {
     107            new WindowMocker();
     108        }
     109        final OAuthWizardMocker oaWizardMocker = new OAuthWizardMocker();
     110        final JOptionPaneSimpleMocker jopsMocker = new JOptionPaneSimpleMocker(
     111            ImmutableMap.<String, Object>of("There are no open changesets", JOptionPane.OK_OPTION)
     112        );
     113
     114        DownloadOpenChangesetsTask task = new DownloadOpenChangesetsTask(new JPanel());
    42115        UserIdentityManager.getInstance().setPartiallyIdentified(System.getProperty("osm.username", "josm_test"));
    43116        assertTrue(UserIdentityManager.getInstance().isPartiallyIdentified());
    44117        task.run();
    45118        assertNotNull(task.getChangesets());
     119
     120        assertEquals(1, jopsMocker.getInvocationLog().size());
     121        Object[] invocationLogEntry = jopsMocker.getInvocationLog().get(0);
     122        assertEquals(JOptionPane.OK_OPTION, (int) invocationLogEntry[0]);
     123        assertEquals("No open changesets", invocationLogEntry[2]);
     124
     125        assertTrue(oaWizardMocker.called);
    46126    }
    47127}