// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.data.validation.tests;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.openstreetmap.josm.TestUtils;
import org.openstreetmap.josm.data.osm.Node;
import org.openstreetmap.josm.data.osm.Relation;
import org.openstreetmap.josm.data.osm.RelationMember;
import org.openstreetmap.josm.data.osm.Way;
import org.openstreetmap.josm.testutils.JOSMTestRules;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
* JUnit Test of "Public Transport Route" validation test.
*/
public class PublicTransportRouteTestTest {
final PublicTransportRouteTest test = new PublicTransportRouteTest();
/**
* Setup test.
*/
@Rule
@SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public JOSMTestRules rules = new JOSMTestRules();
/**
* Performs various tests.
*/
@Test
public void testVarious() {
final List<Node> nodes = Arrays.asList(new Node(), new Node(), new Node(), new Node(), new Node(), new Node());
final Way w1 = TestUtils.newWay("", nodes.get(0), nodes.get(1));
final Way w2 = TestUtils.newWay("", nodes.get(1), nodes.get(2));
final Way w3 = TestUtils.newWay("", nodes.get(3), nodes.get(2));
final Way w4 = TestUtils.newWay("", nodes.get(3), nodes.get(4));
test.startTest(null);
test.visit(TestUtils.newRelation("type=route route=tram public_transport:version=2"));
test.visit(TestUtils.newRelation("type=unknown"));
assertEquals(0, test.getErrors().size());
final Relation r2 = TestUtils.newRelation("type=route route=tram public_transport:version=2",
new RelationMember("", w1), new RelationMember("", w2), new RelationMember("", w3), new RelationMember("", w4));
test.startTest(null);
test.visit(r2);
assertEquals(0, test.getErrors().size());
final Relation r3 = TestUtils.newRelation("type=route route=tram public_transport:version=2",
new RelationMember("forward", w1));
test.startTest(null);
test.visit(r3);
assertEquals(1, test.getErrors().size());
assertEquals("Route relation contains a 'forward/backward' role", test.getErrors().get(0).getMessage());
final Relation r4 = TestUtils.newRelation("type=route route=tram public_transport:version=2",
new RelationMember("", w1), new RelationMember("", w3), new RelationMember("", w2));
test.startTest(null);
test.visit(r4);
assertEquals(1, test.getErrors().size());
assertEquals("Route relation contains a gap", test.getErrors().get(0).getMessage());
final Relation r5 = TestUtils.newRelation("type=route route=tram public_transport:version=2",
new RelationMember("", w1), new RelationMember("", w2), new RelationMember("", w3),
new RelationMember("stop", w1.firstNode()), new RelationMember("stop", w4.lastNode()));
test.startTest(null);
test.visit(r5);
assertEquals(1, test.getErrors().size());
assertEquals("Stop position not part of route", test.getErrors().get(0).getMessage());
assertEquals(w4.lastNode(), test.getErrors().get(0).getPrimitives().iterator().next());
}
}