Changeset 18976 in josm for trunk/test


Ignore:
Timestamp:
2024-02-13T09:29:09+01:00 (14 months ago)
Author:
GerdP
Message:

fix #20424, fix #20425: Duplicate relations not detected with incomplete members, Duplicate Relation test is too lazy/too aggressive

  • add code to compare just members so that it doesn't matter if they are complete
  • change original test which compares geometry to use a list instead of a set to store members. That means that the order of members is taken into account as well as duplicated members
  • before comparing tags only the "discardable" tag keys are removed, previously all "uninteresting" keys were removed, so fixme=* or note=* was ignored
  • if two relations have the same members in the same order but different tags the new message informational message "Identical members" is produced.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/unit/org/openstreetmap/josm/data/validation/tests/DuplicateRelationTest.java

    r18037 r18976  
    44import static org.junit.jupiter.api.Assertions.assertEquals;
    55
     6import org.junit.jupiter.api.Test;
    67import org.openstreetmap.josm.TestUtils;
    78import org.openstreetmap.josm.data.coor.LatLon;
     
    1213import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    1314import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
    14 
    15 import org.junit.jupiter.api.Test;
    1615
    1716/**
     
    4544            assertEquals(expected.code, error.getCode());
    4645            assertEquals(expected.fixable, error.isFixable());
     46            if (error.isFixable())
     47                error.getFix();
    4748        }
    4849    }
     
    6465    void testDuplicateRelationNoTags() {
    6566        doTest("", "",
    66                 new ExpectedResult(DuplicateRelation.DUPLICATE_RELATION, true),
    67                 new ExpectedResult(DuplicateRelation.SAME_RELATION, false));
     67                new ExpectedResult(DuplicateRelation.DUPLICATE_RELATION, true)
     68                );
    6869    }
    6970
     
    7475    void testDuplicateRelationSameTags() {
    7576        doTest("type=boundary", "type=boundary",
    76                 new ExpectedResult(DuplicateRelation.DUPLICATE_RELATION, true),
    77                 new ExpectedResult(DuplicateRelation.SAME_RELATION, false));
     77                new ExpectedResult(DuplicateRelation.DUPLICATE_RELATION, true)
     78                );
    7879    }
    7980
     
    8485    void testDuplicateRelationDifferentTags() {
    8586        doTest("type=boundary", "type=multipolygon",
    86                 new ExpectedResult(DuplicateRelation.SAME_RELATION, false));
     87                new ExpectedResult(DuplicateRelation.IDENTICAL_MEMBERLIST, false));
     88    }
     89
     90    /**
     91     * Test of duplicate "tmc" relation, should not be ignored
     92     */
     93    @Test
     94    void testTMCRelation1() {
     95        doTest("type=tmc t1=v1", "type=tmc t1=v1",
     96                new ExpectedResult(DuplicateRelation.DUPLICATE_RELATION, true));
     97    }
     98
     99    /**
     100     * Test of "tmc" relation with equal members but different tags, should be ignored
     101     */
     102    @Test
     103    void testTMCRelation2() {
     104        doTest("type=tmc t1=v1", "type=tmc t1=v2");
     105    }
     106
     107    /**
     108     * Test with incomplete members
     109     */
     110    @Test
     111    void testIncomplete() {
     112        DataSet ds = new DataSet();
     113
     114        Node a = new Node(1234);
     115        ds.addPrimitive(a);
     116        ds.addPrimitive(TestUtils.newRelation("type=multipolygon", new RelationMember(null, a)));
     117        ds.addPrimitive(TestUtils.newRelation("type=multipolygon", new RelationMember(null, a)));
     118        performTest(ds, new ExpectedResult(DuplicateRelation.DUPLICATE_RELATION, true));
     119    }
     120
     121    /**
     122     * Test with different order of members, order doesn't count
     123     */
     124    @Test
     125    void testMemberOrder1() {
     126        DataSet ds = new DataSet();
     127
     128        Node a = new Node(1);
     129        Node b = new Node(2);
     130        ds.addPrimitive(a);
     131        ds.addPrimitive(b);
     132        ds.addPrimitive(TestUtils.newRelation("type=multipolygon", new RelationMember(null, a), new RelationMember(null, b)));
     133        ds.addPrimitive(TestUtils.newRelation("type=multipolygon", new RelationMember(null, b), new RelationMember(null, a)));
     134        performTest(ds, new ExpectedResult(DuplicateRelation.DUPLICATE_RELATION, true));
     135    }
     136
     137    /**
     138     * Test with different order of members, order counts
     139     */
     140    @Test
     141    void testMemberOrder2() {
     142        DataSet ds = new DataSet();
     143
     144        Node a = new Node(1);
     145        a.setCoor(new LatLon(10.0, 5.0));
     146        Node b = new Node(2);
     147        b.setCoor(new LatLon(10.0, 6.0));
     148        ds.addPrimitive(a);
     149        ds.addPrimitive(b);
     150        ds.addPrimitive(TestUtils.newRelation("type=route", new RelationMember(null, a), new RelationMember(null, b)));
     151        ds.addPrimitive(TestUtils.newRelation("type=route", new RelationMember(null, b), new RelationMember(null, a)));
     152        performTest(ds, new ExpectedResult(DuplicateRelation.SAME_RELATION, false));
     153    }
     154
     155    /**
     156     * Test with different order of members, one is duplicated, order doesn't matter
     157     */
     158    @Test
     159    void testMemberOrder3() {
     160        DataSet ds = new DataSet();
     161
     162        Node a = new Node(1);
     163        Node b = new Node(2);
     164        ds.addPrimitive(a);
     165        ds.addPrimitive(b);
     166        ds.addPrimitive(TestUtils.newRelation("type=restriction", new RelationMember(null, a),
     167                new RelationMember(null, b), new RelationMember(null, a)));
     168        ds.addPrimitive(TestUtils.newRelation("type=restriction", new RelationMember(null, b),
     169                new RelationMember(null, a), new RelationMember(null, a)));
     170        performTest(ds, new ExpectedResult(DuplicateRelation.DUPLICATE_RELATION, true));
     171    }
     172
     173    /**
     174     * Test with different order of members, one is duplicated in one of the relations
     175     */
     176    @Test
     177    void testMemberOrder4() {
     178        DataSet ds = new DataSet();
     179        Node a = new Node(new LatLon(10.0, 5.0));
     180        Node b = new Node(new LatLon(10.0, 6.0));
     181        ds.addPrimitive(a);
     182        ds.addPrimitive(b);
     183        ds.addPrimitive(TestUtils.newRelation("", new RelationMember(null, a), new RelationMember(null, b)));
     184        ds.addPrimitive(TestUtils.newRelation("", new RelationMember(null, b), new RelationMember(null, a), new RelationMember(null, b)));
     185        performTest(ds);
     186    }
     187
     188    /**
     189     * Test with two relations where members are different but geometry is equal.
     190     */
     191    @Test
     192    void testImport() {
     193        DataSet ds = new DataSet();
     194        Node a = new Node(1234, 1);
     195        a.setCoor(new LatLon(10.0, 5.0));
     196
     197        Node b = new Node(new LatLon(10.0, 5.0));
     198
     199        ds.addPrimitive(a);
     200        ds.addPrimitive(b);
     201        ds.addPrimitive(TestUtils.newRelation("type=multipolygon", new RelationMember(null, a)));
     202        ds.addPrimitive(TestUtils.newRelation("type=multipolygon", new RelationMember(null, b)));
     203        performTest(ds, new ExpectedResult(DuplicateRelation.DUPLICATE_RELATION, true));
    87204    }
    88205}
Note: See TracChangeset for help on using the changeset viewer.