Changeset 17429 in josm for trunk/test/unit


Ignore:
Timestamp:
2020-12-30T11:52:34+01:00 (3 years ago)
Author:
GerdP
Message:

fix #20325: Update Multipolygon removes tags instead of moving them to relation

  • rewrite handling of update multipolygon cases
  • let removeTagsFromWaysIfNeeded() check if getDataset() returns null instead of checking isNew(). I assume it was always meant to work like this. JoinAreasAction works fine with that and I hope no plugin relies on the old behaviour.
  • add regression unit test and more unit tests to improve coverage
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java

    r17408 r17429  
    55import static org.junit.jupiter.api.Assertions.assertFalse;
    66import static org.junit.jupiter.api.Assertions.assertNotNull;
     7import static org.junit.jupiter.api.Assertions.assertNull;
    78import static org.junit.jupiter.api.Assertions.assertTrue;
    89
     
    4546    @RegisterExtension
    4647    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
    47     public JOSMTestRules test = new JOSMTestRules().projection().main().preferences();
     48    public JOSMTestRules test = new JOSMTestRules().projection().main().preferences().mapStyles();
    4849
    4950    private static Map<String, String> getRefToRoleMap(Relation relation) {
     
    214215        assertEquals(1, ds.getWays().stream().filter(w -> w.hasTag("building", "yes")).count());
    215216    }
     217
     218    /**
     219     * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/20325">Bug #20325</a>.
     220     * @throws Exception if an error occurs
     221     */
     222    @Test
     223    void testTicket20325() throws Exception {
     224        DataSet ds = OsmReader.parseDataSet(TestUtils.getRegressionDataStream(20325, "data.osm"), null);
     225        assertEquals(1, ds.getRelations().size());
     226        Relation mp = ds.getRelations().iterator().next();
     227        assertFalse(ds.getRelations().iterator().next().hasTag("landuse", "farmland"));
     228        assertEquals(1, ds.getWays().stream().filter(w -> w.hasTag("landuse", "farmland")).count());
     229        Pair<SequenceCommand, Relation> cmd = CreateMultipolygonAction.createMultipolygonCommand(ds.getWays(), mp);
     230        assertNotNull(cmd);
     231        cmd.a.executeCommand();
     232        assertEquals(1, ds.getRelations().size());
     233        assertTrue(ds.getRelations().iterator().next().hasTag("landuse", "farmland"));
     234        assertEquals(0, ds.getWays().stream().filter(w -> w.hasTag("landuse", "farmland")).count());
     235        cmd.a.undoCommand();
     236        assertEquals(1, ds.getRelations().size());
     237        assertFalse(ds.getRelations().iterator().next().hasTag("landuse", "farmland"));
     238        assertEquals(1, ds.getWays().stream().filter(w -> w.hasTag("landuse", "farmland")).count());
     239    }
     240
     241    /**
     242     * Coverage test for <a href="https://josm.openstreetmap.de/ticket/20325">Bug #20325</a>.
     243     * New relation, no update needed, no command should be produced.
     244     * @throws Exception if an error occurs
     245     */
     246    @Test
     247    void testTicket20325New() throws Exception {
     248        DataSet ds = OsmReader.parseDataSet(TestUtils.getRegressionDataStream(20325, "no-change-new.osm"), null);
     249        assertEquals(1, ds.getRelations().size());
     250        Relation mp = ds.getRelations().iterator().next();
     251        Pair<SequenceCommand, Relation> cmd = CreateMultipolygonAction.createMultipolygonCommand(ds.getWays(), mp);
     252        assertNull(cmd);
     253    }
     254
     255    /**
     256     * Coverage test for <a href="https://josm.openstreetmap.de/ticket/20325">Bug #20325</a>.
     257     * Old relation, no update needed, no command should be produced.
     258     * @throws Exception if an error occurs
     259     */
     260    @Test
     261    void testTicket20325Old() throws Exception {
     262        DataSet ds = OsmReader.parseDataSet(TestUtils.getRegressionDataStream(20325, "no-change-old.osm"), null);
     263        assertEquals(1, ds.getRelations().size());
     264        Relation mp = ds.getRelations().iterator().next();
     265        Pair<SequenceCommand, Relation> cmd = CreateMultipolygonAction.createMultipolygonCommand(ds.getWays(), mp);
     266        assertNull(cmd);
     267    }
     268
     269    /**
     270     * Coverage test for <a href="https://josm.openstreetmap.de/ticket/20325">Bug #20325</a>.
     271     * Relation cannot be updated but produces warnings. Doesn't test that a popup was shown.
     272     * @throws Exception if an error occurs
     273     */
     274    @Test
     275    void testTicket20325Invalid() throws Exception {
     276        DataSet ds = OsmReader.parseDataSet(TestUtils.getRegressionDataStream(20325, "invalid-new-upldate.osm"), null);
     277        assertEquals(1, ds.getRelations().size());
     278        Relation mp = ds.getRelations().iterator().next();
     279        Pair<SequenceCommand, Relation> cmd = CreateMultipolygonAction.createMultipolygonCommand(ds.getWays(), mp);
     280        assertNull(cmd);
     281    }
     282
     283    /**
     284     * Coverage test for <a href="https://josm.openstreetmap.de/ticket/20325">Bug #20325</a>.
     285     * Relation needs no updates but produces warnings. Doesn't test that a popup was shown.
     286     * @throws Exception if an error occurs
     287     */
     288    @Test
     289    void testTicket20325NoUpdateWarning() throws Exception {
     290        DataSet ds = OsmReader.parseDataSet(TestUtils.getRegressionDataStream(20325, "update-no-command-warning.osm"), null);
     291        assertEquals(1, ds.getRelations().size());
     292        Relation mp = ds.getRelations().iterator().next();
     293        Pair<SequenceCommand, Relation> cmd = CreateMultipolygonAction.createMultipolygonCommand(ds.getWays(), mp);
     294        assertNull(cmd);
     295    }
     296
    216297}
Note: See TracChangeset for help on using the changeset viewer.