Changeset 14380 in josm for trunk/test/unit


Ignore:
Timestamp:
2018-10-28T20:30:47+01:00 (5 years ago)
Author:
Don-vip
Message:

fix #16906 - RelationEditorActionsTest: fix for non-headless mode (patch by ris)

Location:
trunk/test/unit/org/openstreetmap/josm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/unit/org/openstreetmap/josm/gui/dialogs/relation/actions/RelationEditorActionsTest.java

    r14028 r14380  
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.gui.dialogs.relation.actions;
     3
     4import static org.junit.Assert.assertEquals;
     5import static org.junit.Assert.assertTrue;
     6
     7import java.awt.Component;
     8import java.awt.Container;
     9import javax.swing.Icon;
     10import javax.swing.JOptionPane;
     11import javax.swing.text.JTextComponent;
     12
     13import org.openstreetmap.josm.testutils.mockers.JOptionPaneSimpleMocker;
     14import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
     15
     16import com.google.common.collect.ImmutableMap;
     17
     18import mockit.Mock;
     19import mockit.MockUp;
    320
    421import org.junit.Test;
     
    1027
    1128    /**
    12      * Check that all actions do not crash.
     29     * Check that all dialog-less actions do not crash.
    1330     */
    1431    @Test
    15     public void testAllActions() {
     32    public void testNoDialogActions() {
    1633        new AddSelectedAfterSelection(relationEditorAccess).actionPerformed(null);
    1734        new AddSelectedBeforeSelection(relationEditorAccess).actionPerformed(null);
     
    2845
    2946        new SelectAction(relationEditorAccess).actionPerformed(null);
    30         new DeleteCurrentRelationAction(relationEditorAccess).actionPerformed(null);
    3147
    3248        new DownloadIncompleteMembersAction(relationEditorAccess, "downloadincomplete").actionPerformed(null);
     
    4864        new SortBelowAction(relationEditorAccess).actionPerformed(null);
    4965        new ReverseAction(relationEditorAccess).actionPerformed(null);
     66    }
     67
     68    /**
     69     * Test DeleteCurrentRelationAction
     70     */
     71    @Test
     72    public void testDeleteCurrentRelationAction() {
     73        final JOptionPaneSimpleMocker jopsMocker = new JOptionPaneSimpleMocker(
     74            ImmutableMap.<String, Object>of(
     75                "<html>\n  <head>\n    \n  </head>\n  <body>\n    You are about to delete 1 "
     76                + "relation:\n\n    "
     77                + "<ul>\n      <li>\n        incomplete\n      </li>\n    </ul>\n    <br>\n    "
     78                + "This step is rarely necessary and cannot be undone easily after being \n    "
     79                + "uploaded to the server.<br>Do you really want to delete?\n  </body>\n</html>\n", JOptionPane.YES_OPTION,
     80                "<html>\n  <head>\n    \n  </head>\n  <body>\n    You are about to delete incomplete "
     81                + "objects.<br>This will cause problems \n    because you don\'t see the real object.<br>"
     82                + "Do you really want to delete?\n  </body>\n</html>\n",
     83                JOptionPane.YES_OPTION
     84            )
     85        ) {
     86            public String getStringFromOriginalMessage(Object originalMessage) {
     87                return ((JTextComponent) ((Container) originalMessage).getComponent(0)).getText();
     88            }
     89        };
     90
     91        new DeleteCurrentRelationAction(relationEditorAccess).actionPerformed(null);
     92
     93        assertEquals(2, jopsMocker.getInvocationLog().size());
     94
     95        Object[] invocationLogEntry = jopsMocker.getInvocationLog().get(0);
     96        assertEquals(JOptionPane.YES_OPTION, (int) invocationLogEntry[0]);
     97        assertEquals("Delete relation?", invocationLogEntry[2]);
     98
     99        invocationLogEntry = jopsMocker.getInvocationLog().get(1);
     100        assertEquals(JOptionPane.YES_OPTION, (int) invocationLogEntry[0]);
     101        assertEquals("Delete confirmation", invocationLogEntry[2]);
     102    }
     103
     104    /**
     105     * Test SetRoleAction
     106     */
     107    @Test
     108    public void testSetRoleAction() {
     109        final JOptionPaneSimpleMocker.MessagePanelMocker mpMocker = new JOptionPaneSimpleMocker.MessagePanelMocker();
     110        // JOptionPaneSimpleMocker doesn't handle showOptionDialog calls because of their potential
     111        // complexity, but this is quite a simple use of showOptionDialog which we can mock from scratch.
     112        final boolean[] jopMockerCalled = new boolean[] {false};
     113        final MockUp<JOptionPane> jopMocker = new MockUp<JOptionPane>() {
     114            @Mock
     115            public int showOptionDialog(
     116                Component parentComponent,
     117                Object message,
     118                String title,
     119                int optionType,
     120                int messageType,
     121                Icon icon,
     122                Object[] options,
     123                Object initialValue
     124            ) {
     125                assertEquals(
     126                    "<html>You are setting an empty role on 0 objects.<br>This is equal to deleting the "
     127                    + "roles of these objects.<br>Do you really want to apply the new role?</html>",
     128                    mpMocker.getOriginalMessage((ConditionalOptionPaneUtil.MessagePanel) message).toString()
     129                );
     130                assertEquals(
     131                    "Confirm empty role",
     132                    title
     133                );
     134                jopMockerCalled[0] = true;
     135                return JOptionPane.YES_OPTION;
     136            }
     137        };
    50138
    51139        new SetRoleAction(relationEditorAccess).actionPerformed(null);
     140
     141        assertTrue(jopMockerCalled[0]);
    52142    }
    53143}
  • trunk/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java

    r14273 r14380  
    88import java.io.File;
    99import java.io.IOException;
     10import java.io.PrintWriter;
     11import java.io.StringWriter;
    1012import java.lang.annotation.Documented;
    1113import java.lang.annotation.ElementType;
     
    6163import org.openstreetmap.josm.tools.RightAndLefthandTraffic;
    6264import org.openstreetmap.josm.tools.Territories;
     65import org.openstreetmap.josm.tools.bugreport.ReportedException;
    6366import org.openstreetmap.josm.tools.date.DateUtils;
    6467
     
    674677                    throw exception;
    675678                } else {
    676                     Logging.debug("Thread state at timeout: {0}", Thread.getAllStackTraces());
     679                    if (Logging.isLoggingEnabled(Logging.LEVEL_DEBUG)) {
     680                        // i.e. skip expensive formatting of stack trace if it won't be shown
     681                        final StringWriter sw = new StringWriter();
     682                        new ReportedException(exception).printReportThreadsTo(new PrintWriter(sw));
     683                        Logging.debug("Thread state at timeout: {0}", sw);
     684                    }
    677685                    throw new Exception(MessageFormat.format("Test timed out after {0}ms", timeout));
    678686                }
Note: See TracChangeset for help on using the changeset viewer.