package org.osmtools.ra.segment; import static org.junit.Assert.*; import static org.osmtools.ra.TestUtils.*; import java.util.Set; import org.junit.Before; import org.junit.Test; import org.osmtools.ra.AnalyzerException; import org.osmtools.ra.analyzer.ConnectableNode; import org.osmtools.ra.data.Node; import org.osmtools.ra.segment.FlexibleWay; import org.osmtools.ra.segment.SegmentNodes; public class FlexibleWayTest { private FlexibleWay flexibleWay; private Node firstNode; private Node lastNode; @Before public void setup() { firstNode = getNode(1); lastNode = getNode(4); flexibleWay = asFlexibleOrderWay(1, 2, 3, 4); } private void assertCanConnect(boolean expected, long... otherWayNodeIds) { assertTrue(expected == flexibleWay.canConnect(asFlexibleOrderWay(otherWayNodeIds))); } @Test public void testGetEndPointNodes() throws Exception { ConnectableNode endpointNodesReverse = flexibleWay.getEndpointNodes(); assertTrue(endpointNodesReverse.contains(getNode(1))); assertTrue(endpointNodesReverse.contains(getNode(2))); assertTrue(endpointNodesReverse.contains(getNode(3))); assertTrue(endpointNodesReverse.contains(getNode(4))); } @Test public void testGetSegmentNodes() throws Exception { SegmentNodes segmentNodes = flexibleWay.getSegmentNodes(); assertEquals(firstNode, segmentNodes.getThisNode()); assertEquals(lastNode, segmentNodes.getOtherNode()); } @Test public void testGetCommonNode() throws Exception { assertCommonNode(4, 6, 4, 7); assertCommonNode(1, 1, 6, 7); assertCommonNode(4, 4, 6, 7); assertCommonNode(4, 5, 4, 7); assertCommonNode(3, 5, 3, 7); assertCommonNode(3, 3, 8, 7); } private void assertCommonNode(long expectedNodeId, long... otherWayNodeIds) { Set<Node> commonNodes = flexibleWay.getCommonNode(asFlexibleOrderWay(otherWayNodeIds)); assertTrue(commonNodes.contains(getNode(expectedNodeId))); } @Test(expected = AnalyzerException.class) public void testGetCommonNodeFail() throws Exception { flexibleWay.getCommonNode(asFlexibleOrderWay(7, 8, 9)); } @Test public void testCanConnect() throws Exception { assertCanConnect(true, 6, 4, 7); assertCanConnect(true, 1, 6, 7); assertCanConnect(true, 4, 6, 7); assertCanConnect(true, 5, 4, 7); assertCanConnect(true, 5, 3, 7); assertCanConnect(false, 7, 8, 9); } @Test public void testAppendNodesBetween() throws Exception { assertNodesInOrder(flexibleWay, firstNode, lastNode, 2, 3, 4); assertNodesInOrder(flexibleWay, lastNode, firstNode, 3, 2, 1); } @Test public void testContainsNodes() throws Exception { assertTrue(flexibleWay.containsNodes(getNode(1), getNode(2), getNode(3), getNode(4))); assertFalse(flexibleWay.containsNodes(getNode(5), getNode(6), getNode(7), getNode(8))); } @Test public void testCanConnectNodesInDirection() throws Exception { assertTrue(flexibleWay.canConnectNodesInDirection(firstNode, lastNode)); assertTrue(flexibleWay.canConnectNodesInDirection(lastNode, firstNode)); } }