// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.pt_assistant.data; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import org.junit.Test; 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.plugins.pt_assistant.AbstractTest; /** * Tests if the representation of a route relation is created correctly in the * pt_assistant plugin * * @author darya * */ public class RouteRepresentationTest extends AbstractTest { @Test public void correctRouteTest() { /*- * Create a [correct] route which has: * stop1 (stop_position) * way1 (Way) * stop2(platform, Way) * way2 (Way) * stop3 (platform) * way3 (Relation that consists of Ways only) * stop4 (stop_position) * stop4 (platform, Node) * way4 (Way) * stop5 (platform_exit_only, Relation) * */ ArrayList<RelationMember> members = new ArrayList<>(); // Create stops: Node n1 = new Node(); n1.put("name", "Stop1"); n1.put("public_transport", "stop_position"); RelationMember rm1 = new RelationMember("stop", n1); members.add(rm1); Way w1 = new Way(); w1.put("name", "Stop2"); w1.put("highway", "platform"); RelationMember rm2 = new RelationMember("platform", w1); members.add(rm2); Node n2 = new Node(); n2.put("name", "Stop3"); n2.put("public_transport", "platform"); RelationMember rm3 = new RelationMember("platform", n2); members.add(rm3); Node n3 = new Node(); n3.put("name", "Stop4"); n3.put("public_transport", "stop_position"); RelationMember rm4 = new RelationMember("stop", n3); members.add(rm4); Node n4 = new Node(); n4.put("name", "Stop4"); n4.put("public_transport", "platform"); RelationMember rm5 = new RelationMember("platform", n4); members.add(rm5); Node n5 = new Node(); n5.put("name", "Stop5"); n5.put("highway", "platform"); RelationMember rm6 = new RelationMember("platform_exit_only", n5); members.add(rm6); // Create ways: Way w2 = new Way(); RelationMember rm7 = new RelationMember("", w2); members.add(rm7); Way w3 = new Way(); RelationMember rm8 = new RelationMember("", w3); members.add(rm8); Relation r3 = new Relation(); // nested relation Way w4 = new Way(); Way w5 = new Way(); Way w6 = new Way(); r3.addMember(new RelationMember("", w4)); r3.addMember(new RelationMember("", w5)); r3.addMember(new RelationMember("", w6)); RelationMember rm9 = new RelationMember("", r3); members.add(rm9); Way w7 = new Way(); RelationMember rm10 = new RelationMember("", w7); members.add(rm10); Relation route = new Relation(); route.setMembers(members); PTRouteDataManager manager = new PTRouteDataManager(route); assertEquals(manager.getPTStopCount(), 5); assertEquals(manager.getPTWayCount(), 4); } @Test public void nestedRelationTest() { // Same as above, but the nested Relation has a Node (only ways are allowed) ArrayList<RelationMember> members = new ArrayList<>(); // Create stops: Node n1 = new Node(); n1.put("name", "Stop1"); n1.put("public_transport", "stop_position"); RelationMember rm1 = new RelationMember("stop", n1); members.add(rm1); Way w1 = new Way(); w1.put("name", "Stop2"); w1.put("highway", "platform"); RelationMember rm2 = new RelationMember("platform", w1); members.add(rm2); Node n2 = new Node(); n2.put("name", "Stop3"); n2.put("public_transport", "platform"); RelationMember rm3 = new RelationMember("platform", n2); members.add(rm3); Node n3 = new Node(); n3.put("name", "Stop4"); n3.put("public_transport", "stop_position"); RelationMember rm4 = new RelationMember("stop", n3); members.add(rm4); Node n4 = new Node(); n4.put("name", "Stop4"); n4.put("public_transport", "platform"); RelationMember rm5 = new RelationMember("platform", n4); members.add(rm5); Node n5 = new Node(); n5.put("name", "Stop5"); n5.put("highway", "platform"); RelationMember rm6 = new RelationMember("platform_exit_only", n5); members.add(rm6); // Create ways: Way w2 = new Way(); RelationMember rm7 = new RelationMember("", w2); members.add(rm7); Way w3 = new Way(); RelationMember rm8 = new RelationMember("", w3); members.add(rm8); Relation r3 = new Relation(); // nested relation Way w4 = new Way(); Node wrongNode = new Node(); Way w6 = new Way(); r3.addMember(new RelationMember("", w4)); r3.addMember(new RelationMember("", wrongNode)); r3.addMember(new RelationMember("", w6)); RelationMember rm9 = new RelationMember("", r3); members.add(rm9); Way w7 = new Way(); RelationMember rm10 = new RelationMember("", w7); members.add(rm10); Relation route = new Relation(); route.setMembers(members); PTRouteDataManager manager = new PTRouteDataManager(route); assertEquals(manager.getFailedMembers().size(), 1); assertEquals(manager.getPTStopCount(), 5); assertEquals(manager.getPTWayCount(), 3); } }