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

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

checkstyle - NoWhiteSpaceBefore ...

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