112 lines
4 KiB
Java
112 lines
4 KiB
Java
package net.osmand.router;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.RandomAccessFile;
|
|
import java.io.Reader;
|
|
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.Iterator;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map.Entry;
|
|
import java.util.Set;
|
|
import java.util.TreeSet;
|
|
|
|
import net.osmand.binary.BinaryInspector;
|
|
import net.osmand.binary.BinaryMapIndexReader;
|
|
import net.osmand.data.LatLon;
|
|
|
|
import org.junit.Assert;
|
|
import org.junit.BeforeClass;
|
|
import org.junit.Ignore;
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
import org.junit.runners.Parameterized;
|
|
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.GsonBuilder;
|
|
|
|
@RunWith(Parameterized.class)
|
|
public class RouteTestingTest {
|
|
private TestEntry te;
|
|
|
|
|
|
public RouteTestingTest(String name, TestEntry te) {
|
|
this.te = te;
|
|
}
|
|
|
|
@BeforeClass
|
|
public static void setUp() throws Exception {
|
|
RouteResultPreparation.PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = true;
|
|
}
|
|
|
|
@Parameterized.Parameters(name = "{index}: {0}")
|
|
public static Iterable<Object[]> data() throws IOException {
|
|
String fileName = "/test_routing.json";
|
|
Reader reader = new InputStreamReader(RouteTestingTest.class.getResourceAsStream(fileName));
|
|
Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
|
TestEntry[] testEntries = gson.fromJson(reader, TestEntry[].class);
|
|
ArrayList<Object[]> arrayList = new ArrayList<>();
|
|
for(TestEntry te : testEntries) {
|
|
if(te.isIgnore()) {
|
|
continue;
|
|
}
|
|
arrayList.add(new Object[] {te.getTestName(), te});
|
|
}
|
|
reader.close();
|
|
return arrayList;
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testRouting() throws Exception {
|
|
String fl = "../../resources/test-resources/Routing_test.obf";
|
|
RandomAccessFile raf = new RandomAccessFile(fl, "r");
|
|
RoutePlannerFrontEnd fe = new RoutePlannerFrontEnd(false);
|
|
|
|
BinaryMapIndexReader[] binaryMapIndexReaders = { new BinaryMapIndexReader(raf, new File(fl)) };
|
|
RoutingConfiguration.Builder builder = RoutingConfiguration.getDefault();
|
|
Map<String, String> params = te.getParams();
|
|
RoutingConfiguration config = builder.build(params.containsKey("vehicle") ? params.get("vehicle") : "car",
|
|
RoutingConfiguration.DEFAULT_MEMORY_LIMIT * 3, params);
|
|
RoutingContext ctx = fe.buildRoutingContext(config, null, binaryMapIndexReaders,
|
|
RoutePlannerFrontEnd.RouteCalculationMode.NORMAL);
|
|
ctx.leftSideNavigation = false;
|
|
List<RouteSegmentResult> routeSegments = fe.searchRoute(ctx, te.getStartPoint(), te.getEndPoint(), te.getTransitPoint());
|
|
Set<Long> reachedSegments = new TreeSet<Long>();
|
|
Assert.assertNotNull(routeSegments);
|
|
int prevSegment = -1;
|
|
for (int i = 0; i <= routeSegments.size(); i++) {
|
|
if (i == routeSegments.size() || routeSegments.get(i).getTurnType() != null) {
|
|
if (prevSegment >= 0) {
|
|
String name = routeSegments.get(prevSegment).getDescription();
|
|
long segmentId = routeSegments.get(prevSegment).getObject().getId() >> (BinaryInspector.SHIFT_ID);
|
|
System.out.println("segmentId: " + segmentId + " description: " + name);
|
|
}
|
|
prevSegment = i;
|
|
}
|
|
if (i < routeSegments.size()) {
|
|
reachedSegments.add(routeSegments.get(i).getObject().getId() >> (BinaryInspector.SHIFT_ID));
|
|
}
|
|
}
|
|
Map<Long, String> expectedResults = te.getExpectedResults();
|
|
Iterator<Entry<Long, String>> it = expectedResults.entrySet().iterator();
|
|
while (it.hasNext()) {
|
|
Entry<Long, String> es = it.next();
|
|
if (es.getValue().equals("false")) {
|
|
Assert.assertTrue("Expected segment " + (es.getKey()) + " was wrongly reached in route segments "
|
|
+ reachedSegments.toString(), !reachedSegments.contains(es.getKey()));
|
|
} else {
|
|
Assert.assertTrue("Expected segment " + (es.getKey()) + " weren't reached in route segments "
|
|
+ reachedSegments.toString(), reachedSegments.contains(es.getKey()));
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|