source: josm/trunk/test/unit/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculatorTest.java@ 5630

Last change on this file since 5630 was 5630, checked in by jttt, 11 years ago

Relation sorting and way connection refactored, added tests

File size: 4.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.relation.sort;
3
4import java.io.FileInputStream;
5import java.io.FileNotFoundException;
6import java.util.Arrays;
7import java.util.List;
8
9import org.junit.Assert;
10import org.junit.BeforeClass;
11import org.junit.Test;
12import org.openstreetmap.josm.Main;
13import org.openstreetmap.josm.data.Preferences;
14import org.openstreetmap.josm.data.osm.DataSet;
15import org.openstreetmap.josm.data.osm.Relation;
16import org.openstreetmap.josm.data.projection.Projections;
17import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
18import org.openstreetmap.josm.io.IllegalDataException;
19import org.openstreetmap.josm.io.OsmReader;
20
21public class WayConnectionTypeCalculatorTest {
22
23 private RelationSorter sorter = new RelationSorter();
24 private WayConnectionTypeCalculator wayConnectionTypeCalculator = new WayConnectionTypeCalculator();
25 private static DataSet testDataset;
26
27 @BeforeClass
28 public static void loadData() throws FileNotFoundException, IllegalDataException {
29 Main.pref = new Preferences();
30 Main.setProjection(Projections.getProjectionByCode("EPSG:3857")); // Mercator
31 testDataset = OsmReader.parseDataSet(new FileInputStream("data_nodist/relation_sort.osm"), NullProgressMonitor.INSTANCE);
32 }
33
34 private Relation getRelation(String testType) {
35 for (Relation r: testDataset.getRelations()) {
36 if (testType.equals(r.get("test")))
37 return r;
38 }
39 return null;
40 }
41
42 private String getConnections(List<WayConnectionType> connections) {
43 String[] result = new String[connections.size()];
44 for (int i=0; i<result.length; i++) {
45 WayConnectionType wc = connections.get(i);
46
47 if (wc.isValid()) {
48 StringBuilder sb = new StringBuilder();
49 if (wc.isLoop) {
50 sb.append("L");
51 }
52 if (wc.isOnewayLoopForwardPart) {
53 sb.append("FP");
54 }
55 if (wc.isOnewayLoopBackwardPart) {
56 sb.append("BP");
57 }
58 if (wc.isOnewayHead) {
59 sb.append("H");
60 }
61 if (wc.isOnewayTail) {
62 sb.append("T");
63 }
64
65 if (sb.length() > 0) {
66 sb.append(" ");
67 }
68 sb.append(wc.direction);
69 result[i] = sb.toString();
70
71 } else {
72 result[i] = "I";
73 }
74
75 }
76 return Arrays.toString(result);
77 }
78
79 @Test
80 public void testGeneric() {
81 Relation relation = getRelation("generic");
82 String actual = getConnections(wayConnectionTypeCalculator.updateLinks(relation.getMembers()));
83 Assert.assertEquals("[NONE, NONE, FORWARD, FORWARD, NONE, NONE, NONE, I, I]", actual);
84 actual = getConnections(wayConnectionTypeCalculator.updateLinks(sorter.sortMembers(relation.getMembers())));
85 Assert.assertEquals("[BACKWARD, BACKWARD, BACKWARD, BACKWARD, BACKWARD, BACKWARD, NONE, I, I]", actual);
86 }
87
88 @Test
89 public void testAssociatedStreet() {
90 Relation relation = getRelation("associatedStreet");
91 String actual = getConnections(wayConnectionTypeCalculator.updateLinks(relation.getMembers()));
92 Assert.assertEquals("[FORWARD, FORWARD, I, I, I, I]" , actual);
93 actual = getConnections(wayConnectionTypeCalculator.updateLinks(sorter.sortMembers(relation.getMembers())));
94 Assert.assertEquals("[I, I, I, I, FORWARD, FORWARD]", actual);
95 }
96
97 @Test
98 public void testLoop() {
99 Relation relation = getRelation("loop");
100 String actual = getConnections(wayConnectionTypeCalculator.updateLinks(relation.getMembers()));
101 Assert.assertEquals("[FPH FORWARD, FP FORWARD, NONE, FPH FORWARD, NONE, FPH FORWARD, NONE]", actual);
102 //TODO Sorting doesn't work well in this case
103 actual = getConnections(wayConnectionTypeCalculator.updateLinks(sorter.sortMembers(relation.getMembers())));
104 Assert.assertEquals("[BACKWARD, BACKWARD, BACKWARD, FPH FORWARD, FPH FORWARD, FPH FORWARD, FPH FORWARD]", actual);
105 }
106
107
108}
Note: See TracBrowser for help on using the repository browser.