Ignore:
Timestamp:
2016-01-16T18:27:55+01:00 (8 years ago)
Author:
Don-vip
Message:

see #12377 - add multipolygon unit test

File:
1 edited

Legend:

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

    r8510 r9490  
    55import static org.junit.Assert.assertFalse;
    66import static org.junit.Assert.assertTrue;
     7import static org.junit.Assert.fail;
    78
     9import java.io.FileInputStream;
     10import java.io.InputStream;
    811import java.util.ArrayList;
     12import java.util.Arrays;
    913import java.util.List;
     14import java.util.Set;
     15import java.util.TreeSet;
    1016
    11 import org.junit.Before;
     17import org.junit.BeforeClass;
    1218import org.junit.Test;
    1319import org.openstreetmap.josm.JOSMFixture;
     
    1521import org.openstreetmap.josm.data.osm.Node;
    1622import org.openstreetmap.josm.data.osm.OsmUtils;
     23import org.openstreetmap.josm.data.osm.Relation;
    1724import org.openstreetmap.josm.data.osm.Way;
     25import org.openstreetmap.josm.data.validation.TestError;
     26import org.openstreetmap.josm.gui.DefaultNameFormatter;
    1827import org.openstreetmap.josm.gui.mappaint.ElemStyles;
    1928import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
     29import org.openstreetmap.josm.io.OsmReader;
    2030
    2131/**
     
    2535
    2636    private static final MultipolygonTest MULTIPOLYGON_TEST = new MultipolygonTest();
     37    private static final RelationChecker RELATION_TEST = new RelationChecker();
    2738
    2839    /**
     
    3041     * @throws Exception if test cannot be initialized
    3142     */
    32     @Before
    33     public void setUp() throws Exception {
    34         JOSMFixture.createUnitTestFixture().init();
     43    @BeforeClass
     44    public static void setUp() throws Exception {
     45        JOSMFixture.createUnitTestFixture().init(true);
    3546        MapPaintStyles.readFromPreferences();
    36         MULTIPOLYGON_TEST.initialize();
    3747    }
    3848
     
    5262    @Test
    5363    public void testTicket10469() {
     64        MULTIPOLYGON_TEST.initialize();
    5465        MULTIPOLYGON_TEST.startTest(null);
    5566
     
    7889        MULTIPOLYGON_TEST.endTest();
    7990    }
     91
     92    /**
     93     * Test all error cases manually created in multipolygon.osm.
     94     * @throws Exception in case of error
     95     */
     96    @Test
     97    public void testMultipolygonFile() throws Exception {
     98        try (InputStream is = new FileInputStream("data_nodist/multipolygon.osm")) {
     99            for (Relation r : OsmReader.parseDataSet(is, null).getRelations()) {
     100                if (r.isMultipolygon()) {
     101                    String name = DefaultNameFormatter.getInstance().format(r);
     102                    String codes = r.get("josm_error_codes");
     103                    if (codes != null) {
     104                        List<TestError> errors = new ArrayList<>();
     105                        for (org.openstreetmap.josm.data.validation.Test test : Arrays.asList(MULTIPOLYGON_TEST, RELATION_TEST)) {
     106                            test.initialize();
     107                            test.startTest(null);
     108                            test.visit(r);
     109                            test.endTest();
     110                            errors.addAll(test.getErrors());
     111                        }
     112                        Set<Integer> expectedCodes = new TreeSet<>();
     113                        for (String code : codes.split(",")) {
     114                            expectedCodes.add(Integer.parseInt(code));
     115                        }
     116                        Set<Integer> actualCodes = new TreeSet<>();
     117                        for (TestError error : errors) {
     118                            Integer code = error.getCode();
     119                            assertTrue(name + " does not expect JOSM error code " + code + ": " + error.getDescription(),
     120                                    expectedCodes.contains(code));
     121                            actualCodes.add(code);
     122                        }
     123                        assertEquals(name + " " + expectedCodes + " => " + actualCodes,
     124                                expectedCodes.size(), actualCodes.size());
     125                    } else if (r.hasKey("name") && (r.getName().startsWith("06") || r.getName().startsWith("07"))) {
     126                        fail(name + " lacks josm_error_codes tag");
     127                    }
     128                }
     129            }
     130        }
     131    }
    80132}
Note: See TracChangeset for help on using the changeset viewer.