Ticket #21203: 21203.3.patch

File 21203.3.patch, 3.6 KB (added by taylor.smock, 4 years ago)

Add missing assert for size of saved entries

  • src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java

    diff --git a/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java b/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java
    index 3b03f7f77c..85e3d649a6 100644
    a b import java.util.List;  
    55
    66import javax.swing.text.JTextComponent;
    77
     8import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
    89import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
    910import org.openstreetmap.josm.spi.preferences.Config;
    1011
    public class HistoryComboBox extends AutoCompletingComboBox {  
    5455     * @see ComboBoxHistory#addElement(java.lang.String)
    5556     */
    5657    public void addCurrentItemToHistory() {
    57         model.addElement((String) getEditor().getItem());
     58        Object item = getEditor().getItem();
     59        if (item instanceof String) {
     60            model.addElement((String) item);
     61        } else if (item instanceof AutoCompletionItem) {
     62            model.addElement((AutoCompletionItem) item);
     63        } else {
     64            throw new IllegalArgumentException(item.getClass().getSimpleName() + " is not supported in addCurrentItemToHistory");
     65        }
    5866    }
    5967
    6068    /**
  • new file test/unit/org/openstreetmap/josm/gui/widgets/HistoryComboBoxTest.java

    diff --git a/test/unit/org/openstreetmap/josm/gui/widgets/HistoryComboBoxTest.java b/test/unit/org/openstreetmap/josm/gui/widgets/HistoryComboBoxTest.java
    new file mode 100644
    index 0000000000..5fdbe9afbb
    - +  
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.gui.widgets;
     3
     4import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
     5import static org.junit.jupiter.api.Assertions.assertEquals;
     6import static org.junit.jupiter.api.Assertions.assertThrows;
     7
     8import java.util.stream.Stream;
     9
     10import org.junit.jupiter.api.Test;
     11import org.junit.jupiter.params.ParameterizedTest;
     12import org.junit.jupiter.params.provider.Arguments;
     13import org.junit.jupiter.params.provider.MethodSource;
     14import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
     15import org.openstreetmap.josm.testutils.annotations.FullPreferences;
     16
     17/**
     18 * Test class for {@link HistoryComboBox}
     19 * @author Taylor Smock
     20 */
     21@FullPreferences
     22class HistoryComboBoxTest {
     23    static Stream<Arguments> testNonRegression21203() {
     24        return Stream.of(Arguments.of("Hello world"), Arguments.of(new AutoCompletionItem("Hello world2")));
     25    }
     26
     27    /**
     28     * Non-regression test for #21203
     29     */
     30    @ParameterizedTest
     31    @MethodSource
     32    void testNonRegression21203(final Object object) {
     33        final HistoryComboBox historyComboBox = new HistoryComboBox();
     34        // Sanity check
     35        assertEquals(0, historyComboBox.getModel().getSize());
     36        historyComboBox.getEditor().setItem(object);
     37        assertDoesNotThrow(historyComboBox::addCurrentItemToHistory);
     38    }
     39
     40    /**
     41     * This ensures that we do throw on unknown objects for #21203
     42     */
     43    @Test
     44    void testNonRegression21203Throws() {
     45        final HistoryComboBox historyComboBox = new HistoryComboBox();
     46        // Sanity check
     47        assertEquals(0, historyComboBox.getModel().getSize());
     48        historyComboBox.getEditor().setItem(new Object());
     49        IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class,
     50                historyComboBox::addCurrentItemToHistory);
     51        assertEquals("Object is not supported in addCurrentItemToHistory", illegalArgumentException.getMessage());
     52    }
     53}