Ticket #23509: 23509.patch

File 23509.patch, 4.9 KB (added by GerdP, 2 years ago)

possible fix

  • test/data/regress/22817/data.osm

     
     1<?xml version='1.0' encoding='UTF-8'?>
     2<osm version='0.6' generator='JOSM'>
     3  <node id='-25355' action='modify' visible='true' lat='53.04826158018' lon='8.42094221501' />
     4</osm>
  • test/unit/org/openstreetmap/josm/gui/io/SaveLayersDialogTest.java

     
    88import java.awt.Component;
    99import java.awt.GraphicsEnvironment;
    1010import java.io.File;
     11import java.io.FileInputStream;
     12import java.io.IOException;
     13import java.io.InputStream;
    1114import java.util.Collections;
    1215import java.util.List;
    1316
     
    1619import javax.swing.JList;
    1720import javax.swing.JOptionPane;
    1821
    19 import mockit.Invocation;
    20 import mockit.Mock;
    21 import mockit.MockUp;
    2222import org.junit.jupiter.api.Test;
    2323import org.junit.jupiter.params.ParameterizedTest;
    2424import org.junit.jupiter.params.provider.EnumSource;
    25 import org.openstreetmap.josm.command.AddPrimitivesCommand;
    26 import org.openstreetmap.josm.data.coor.LatLon;
     25import org.openstreetmap.josm.TestUtils;
    2726import org.openstreetmap.josm.data.osm.DataSet;
    28 import org.openstreetmap.josm.data.osm.Node;
    2927import org.openstreetmap.josm.data.osm.UploadPolicy;
    3028import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     29import org.openstreetmap.josm.io.IllegalDataException;
     30import org.openstreetmap.josm.io.OsmReader;
    3131import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
    3232import org.openstreetmap.josm.testutils.mockers.JOptionPaneSimpleMocker;
    3333import org.openstreetmap.josm.testutils.mockers.WindowMocker;
    3434
     35import mockit.Invocation;
     36import mockit.Mock;
     37import mockit.MockUp;
     38
    3539/**
    3640 * Unit tests of {@link SaveLayersDialog} class.
    3741 */
     
    125129    /**
    126130     * Non-regression test for #22817: No warning when deleting a layer with changes and discourages upload
    127131     * @param policy The upload policy to test
     132     * @throws IOException if an error occurs
     133     * @throws IllegalDataException if an error occurs
    128134     */
    129135    @ParameterizedTest
    130136    @EnumSource(value = UploadPolicy.class)
    131     void testNonRegression22817(UploadPolicy policy) {
    132         final OsmDataLayer osmDataLayer = new OsmDataLayer(new DataSet(), null, null);
     137    void testNonRegression22817(UploadPolicy policy) throws IOException, IllegalDataException {
     138        File file = new File(TestUtils.getRegressionDataFile(22817, "data.osm"));
     139        InputStream is = new FileInputStream(file);
     140        final OsmDataLayer osmDataLayer = new OsmDataLayer(OsmReader.parseDataSet(is, null), null, null);
     141        osmDataLayer.onPostLoadFromFile();
    133142        osmDataLayer.getDataSet().setUploadPolicy(policy);
    134         // BLOCKED files don't have a way to become blocked via the UI, so they must be loaded from disk.
    135         if (policy == UploadPolicy.BLOCKED) {
    136             osmDataLayer.setAssociatedFile(new File("/dev/null"));
    137         }
    138         new AddPrimitivesCommand(Collections.singletonList(new Node(LatLon.ZERO).save()), Collections.emptyList(), osmDataLayer.getDataSet())
    139                 .executeCommand();
     143        osmDataLayer.setAssociatedFile(file);
    140144        assertTrue(osmDataLayer.getDataSet().isModified());
     145        assertFalse(osmDataLayer.requiresSaveToFile());
     146        assertTrue(osmDataLayer.getDataSet().requiresUploadToServer());
     147        assertEquals(policy != UploadPolicy.BLOCKED, osmDataLayer.requiresUploadToServer());
     148        assertEquals(policy != UploadPolicy.BLOCKED, osmDataLayer.isUploadable());
    141149        new WindowMocker();
    142150        // Needed since the *first call* is to check whether we are in a headless environment
    143151        new GraphicsEnvironmentMock();
    144152        // Needed since we need to mock out the UI
    145153        SaveLayersDialogMock saveLayersDialogMock = new SaveLayersDialogMock();
     154        assertTrue(SaveLayersDialog.saveUnsavedModifications(Collections.singleton(osmDataLayer), SaveLayersDialog.Reason.DELETE));
     155        int res = saveLayersDialogMock.getUserActionCalled;
     156        if (policy == UploadPolicy.NORMAL) {
     157            assertEquals(1, res, "The user should have been asked for an action on the layer");
     158        } else {
     159            assertEquals(0, res, "The user should not have been asked for an action on the layer");
    146160
    147         assertTrue(SaveLayersDialog.saveUnsavedModifications(Collections.singleton(osmDataLayer), SaveLayersDialog.Reason.DELETE));
    148         assertEquals(1, saveLayersDialogMock.getUserActionCalled, "The user should have been asked for an action on the layer");
     161        }
    149162    }
    150163
    151164    private static class GraphicsEnvironmentMock extends MockUp<GraphicsEnvironment> {