source: josm/trunk/test/unit/org/openstreetmap/josm/data/validation/tests/ValidatorTestUtils.java@ 15071

Last change on this file since 15071 was 15071, checked in by Don-vip, 5 years ago

fix #17709 - make TurnrestrictionTest aware of conditional restrictions

  • Property svn:eol-style set to native
File size: 3.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.validation.tests;
3
4import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertTrue;
6import static org.junit.Assert.fail;
7
8import java.io.InputStream;
9import java.nio.file.Files;
10import java.nio.file.Paths;
11import java.util.ArrayList;
12import java.util.Collections;
13import java.util.List;
14import java.util.Set;
15import java.util.TreeSet;
16import java.util.function.Function;
17import java.util.function.Predicate;
18
19import org.openstreetmap.josm.data.osm.DataSet;
20import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
21import org.openstreetmap.josm.data.osm.OsmPrimitive;
22import org.openstreetmap.josm.data.validation.Test;
23import org.openstreetmap.josm.data.validation.TestError;
24import org.openstreetmap.josm.io.OsmReader;
25
26/**
27 * Utilities for validator unit tests.
28 */
29public final class ValidatorTestUtils {
30
31 private ValidatorTestUtils() {
32 // Hide default constructor for utilities classes
33 }
34
35 static <T extends OsmPrimitive> void testSampleFile(String sampleFile,
36 Function<DataSet, Iterable<T>> provider, Predicate<String> namePredicate,
37 Test... tests) throws Exception {
38 try (InputStream is = Files.newInputStream(Paths.get(sampleFile))) {
39 for (T t: provider.apply(OsmReader.parseDataSet(is, null))) {
40 String name = DefaultNameFormatter.getInstance().format(t);
41 List<TestError> errors = new ArrayList<>();
42 for (Test test : tests) {
43 test.initialize();
44 test.startTest(null);
45 test.visit(Collections.singleton(t));
46 test.endTest();
47 errors.addAll(test.getErrors());
48 }
49 String codes = t.get("josm_error_codes");
50 if (codes != null) {
51 Set<Integer> expectedCodes = new TreeSet<>();
52 if (!"none".equals(codes)) {
53 for (String code : codes.split(",")) {
54 expectedCodes.add(Integer.parseInt(code));
55 }
56 }
57 Set<Integer> actualCodes = new TreeSet<>();
58 for (TestError error : errors) {
59 Integer code = error.getCode();
60 assertTrue(name + " does not expect JOSM error code " + code + ": " + error.getDescription(),
61 expectedCodes.contains(code));
62 actualCodes.add(code);
63 }
64 assertEquals(name + " " + expectedCodes + " => " + actualCodes,
65 expectedCodes.size(), actualCodes.size());
66 } else if (t.hasKey("name") && namePredicate != null && namePredicate.test(t.getName())) {
67 fail(name + " lacks josm_error_codes tag");
68 } else if (t.hasKey("name") && t.get("name").startsWith("OK") && !errors.isEmpty()) {
69 fail(name + "has unexpected error(s): " + errors);
70 }
71 }
72 }
73 }
74}
Note: See TracBrowser for help on using the repository browser.