source: josm/trunk/test/unit/org/openstreetmap/josm/data/validation/tests/RelationCheckerTest.java@ 11475

Last change on this file since 11475 was 11475, checked in by bastiK, 7 years ago

see #14252 - better wording in validator message

  • Property svn:eol-style set to native
File size: 6.6 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.openstreetmap.josm.data.osm.OsmUtils.createPrimitive;
7
8import java.util.List;
9
10import org.junit.Before;
11import org.junit.Test;
12import org.openstreetmap.josm.JOSMFixture;
13import org.openstreetmap.josm.data.osm.Relation;
14import org.openstreetmap.josm.data.osm.RelationMember;
15import org.openstreetmap.josm.data.osm.Way;
16import org.openstreetmap.josm.data.validation.TestError;
17import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
18
19public class RelationCheckerTest {
20
21 /**
22 * Setup test.
23 */
24 @Before
25 public void setUp() {
26 JOSMFixture.createUnitTestFixture().init();
27 getRelationChecker();
28 }
29
30 private static RelationChecker getRelationChecker() {
31 RelationChecker checker = new RelationChecker();
32 TaggingPresets.readFromPreferences();
33 checker.initialize();
34 return checker;
35 }
36
37 private static List<TestError> testRelation(Relation r) {
38 RelationChecker checker = getRelationChecker();
39 checker.visit(r);
40 return checker.getErrors();
41 }
42
43 private static Relation createRelation(String tags) {
44 return (Relation) createPrimitive("relation "+ tags);
45 }
46
47 @Test
48 public void testUnknownType() {
49 List<TestError> errors = testRelation(createRelation("type=foobar"));
50 assertTrue(errors.size() >= 1);
51 assertEquals("Relation type is unknown", errors.get(0).getMessage());
52 }
53
54 @Test
55 public void testEmpty() {
56 List<TestError> errors = testRelation(createRelation("type=multipolygon"));
57 assertEquals(1, errors.size());
58 assertEquals("Relation is empty", errors.get(0).getMessage());
59 }
60
61 @Test
62 public void testNormal() {
63 Relation r = createRelation("type=multipolygon");
64 r.addMember(new RelationMember("outer", new Way()));
65 r.addMember(new RelationMember("inner", new Way()));
66 assertTrue(testRelation(r).isEmpty());
67 }
68
69 @Test
70 public void testOuter2() {
71 Relation r = createRelation("type=multipolygon");
72 r.addMember(new RelationMember("outer", new Way()));
73 r.addMember(new RelationMember("outer2", new Way()));
74
75 List<TestError> errors = testRelation(r);
76 assertEquals(1, errors.size());
77 assertEquals("Role 'outer2' unknown in templates 'outer/inner'", errors.get(0).getDescription());
78 }
79
80 @Test
81 public void testRestrictionViaMissing() {
82 Relation r = createRelation("type=restriction");
83 r.addMember(new RelationMember("from", new Way()));
84 r.addMember(new RelationMember("to", new Way()));
85
86 List<TestError> errors = testRelation(r);
87 assertEquals(1, errors.size());
88 assertEquals("Role 'via' missing", errors.get(0).getDescription());
89 }
90
91 @Test
92 public void testRestrictionViaRelation() {
93 Relation r = createRelation("type=restriction");
94 r.addMember(new RelationMember("from", new Way()));
95 r.addMember(new RelationMember("to", new Way()));
96 r.addMember(new RelationMember("via", new Relation()));
97
98 List<TestError> errors = testRelation(r);
99 assertEquals(1, errors.size());
100 assertEquals("Type 'relation' of relation member with role 'via' does not match accepted types 'node/way' in template Turn Restriction",
101 errors.get(0).getDescription());
102 }
103
104 @Test
105 public void testRestrictionTwoFrom() {
106 Relation r = createRelation("type=restriction");
107 r.addMember(new RelationMember("from", new Way()));
108 r.addMember(new RelationMember("from", new Way()));
109 r.addMember(new RelationMember("to", new Way()));
110 r.addMember(new RelationMember("via", new Way()));
111
112 List<TestError> errors = testRelation(r);
113 assertEquals(1, errors.size());
114 assertEquals("Number of 'from' roles too high (2)", errors.get(0).getDescription());
115 }
116
117 @Test
118 public void testRestrictionEmpty() {
119 Relation r = createRelation("type=restriction");
120 r.addMember(new RelationMember("from", new Way()));
121 r.addMember(new RelationMember("to", new Way()));
122 r.addMember(new RelationMember("via", new Way()));
123 r.addMember(new RelationMember("", new Way()));
124
125 List<TestError> errors = testRelation(r);
126 assertEquals(1, errors.size());
127 assertTrue(errors.get(0).getDescription().startsWith("Empty role type found when expecting one of"));
128 }
129
130 @Test
131 public void testPowerMemberExpression() {
132 Relation r = createRelation("type=route route=power");
133 r.addMember(new RelationMember("", new Way()));
134
135 List<TestError> errors = testRelation(r);
136 assertEquals(1, errors.size());
137 assertEquals("Role of relation member does not match expression 'power' in template Power Route", errors.get(0).getDescription());
138 }
139
140 @Test
141 public void testRouteMemberExpression() {
142 Relation r = createRelation("type=route route=tram public_transport:version=2");
143 r.addMember(new RelationMember("", createPrimitive("way railway=tram")));
144 r.addMember(new RelationMember("stop", createPrimitive("node public_transport=stop_position tram=yes")));
145 r.addMember(new RelationMember("platform", createPrimitive("node public_transport=platform tram=yes")));
146 assertTrue(testRelation(r).isEmpty());
147
148 r.addMember(new RelationMember("", createPrimitive("way no-rail-way=yes")));
149 assertEquals(1, testRelation(r).size());
150 assertEquals("Role of relation member does not match expression 'railway' in template Public Transport Route (Rail)",
151 testRelation(r).get(0).getDescription());
152
153 r.removeMember(3);
154 r.addMember(new RelationMember("stop", createPrimitive("way no-rail-way=yes")));
155 assertEquals(1, testRelation(r).size());
156 assertEquals("Type 'way' of relation member with role 'stop' does not match accepted types 'node' in template Public Transport Route (Rail)",
157 testRelation(r).get(0).getDescription());
158
159 r.removeMember(3);
160 r.addMember(new RelationMember("stop", createPrimitive("node public_transport=stop_position bus=yes")));
161 assertEquals(1, testRelation(r).size());
162 assertEquals("Role of relation member does not match expression 'public_transport=stop_position && "+
163 "(train=yes || subway=yes || monorail=yes || tram=yes || light_rail=yes)' in template Public Transport Route (Rail)",
164 testRelation(r).get(0).getDescription());
165 }
166}
Note: See TracBrowser for help on using the repository browser.