source: josm/trunk/test/unit/org/openstreetmap/josm/io/MultiFetchOverpassObjectReaderTest.java

Last change on this file was 18037, checked in by Don-vip, 3 years ago

fix #21064 - Add JUnit 5 extension for preferences (patch by taylor.smock)

File size: 7.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5
6import java.util.Arrays;
7import java.util.List;
8
9import org.junit.jupiter.api.Test;
10import org.openstreetmap.josm.data.osm.Node;
11import org.openstreetmap.josm.data.osm.OsmPrimitive;
12import org.openstreetmap.josm.data.osm.Relation;
13import org.openstreetmap.josm.data.osm.Way;
14import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
15
16/**
17 * Unit tests of {@link MultiFetchOverpassObjectReader}.
18 */
19@BasicPreferences
20class MultiFetchOverpassObjectReaderTest {
21 /**
22 * Test {@link MultiFetchOverpassObjectReader#buildRequestString}
23 */
24 @Test
25 void testBuildRequestNodesString() {
26 List<OsmPrimitive> objects = Arrays.asList(new Node(123), new Node(126), new Node(130));
27 String requestString;
28 // nodes without parents
29 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, false, false);
30 assertEquals("node(id:123,126,130)->.n;(.n;);out meta;", requestString);
31 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, false, true);
32 assertEquals("node(id:123,126,130)->.n;(.n;);out meta;", requestString);
33
34 // nodes with parents
35 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, true, false);
36 assertEquals("node(id:123,126,130)->.n;.n;way(bn)->.wn;.n;rel(bn)->.rn;(.n;.wn;node(w);.rn;);out meta;",
37 requestString);
38 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, true, true);
39 assertEquals("node(id:123,126,130)->.n;.n;way(bn)->.wn;.n;rel(bn)->.rn;(.n;.wn;node(w);.rn;);out meta;",
40 requestString);
41
42 // simulate download referrers
43 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, false, true, false);
44 assertEquals("node(id:123,126,130)->.n;.n;way(bn)->.wn;.n;rel(bn)->.rn;(.wn;node(w);.rn;);out meta;",
45 requestString);
46
47 }
48
49 /**
50 * Test {@link MultiFetchOverpassObjectReader#buildRequestString}
51 */
52 @Test
53 void testBuildRequestWaysString() {
54 List<OsmPrimitive> objects = Arrays.asList(new Way(123), new Way(126), new Way(130));
55 String requestString;
56 // ways without parents (always with nodes)
57 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, false, false);
58 assertEquals("way(id:123,126,130)->.w;(.w;>;);out meta;", requestString);
59 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, false, true);
60 assertEquals("way(id:123,126,130)->.w;(.w;>;);out meta;", requestString);
61
62 // ways with parents (always with nodes)
63 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, true, false);
64 assertEquals("way(id:123,126,130)->.w;.w;rel(bw)->.pw;(.w;>;.pw;);out meta;", requestString);
65 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, true, true);
66 assertEquals("way(id:123,126,130)->.w;.w;rel(bw)->.pw;(.w;>;.pw;);out meta;", requestString);
67
68 // simulate download referrers
69 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, false, true, false);
70 assertEquals("way(id:123,126,130)->.w;.w;rel(bw)->.pw;(.pw;);out meta;", requestString);
71
72 }
73
74 /**
75 * Test {@link MultiFetchOverpassObjectReader#buildRequestString}
76 */
77 @Test
78 void testBuildRequestRelationsString() {
79 List<OsmPrimitive> objects = Arrays.asList(new Relation(123), new Relation(126), new Relation(130));
80 String requestString;
81 // objects without parents or children
82 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, false, false);
83 assertEquals("relation(id:123,126,130)->.r;(.r;);out meta;", requestString);
84 // objects without parents, with children
85 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, false, true);
86 assertEquals("relation(id:123,126,130)->.r;.r;rel(r)->.rm;(.r;.r;>;.rm;);out meta;", requestString);
87 // objects with parents, without children
88 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, true, false);
89 assertEquals("relation(id:123,126,130)->.r;.r;rel(br)->.pr;(.r;.pr;);out meta;", requestString);
90 // objects with parents and with children
91 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, true, true);
92 assertEquals("relation(id:123,126,130)->.r;.r;rel(br)->.pr;.r;rel(r)->.rm;(.r;.pr;.r;>;.rm;);out meta;",
93 requestString);
94 // simulate download referrers
95 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, false, true, false);
96 assertEquals("relation(id:123,126,130)->.r;.r;rel(br)->.pr;(.pr;);out meta;", requestString);
97
98 }
99
100 /**
101 * Test {@link MultiFetchOverpassObjectReader#buildRequestString}
102 */
103 @Test
104 void testBuildComplexString() {
105 List<OsmPrimitive> objects = Arrays.asList(new Relation(123), new Relation(126), new Relation(130), new Way(88), new Way(99),
106 new Node(1));
107 // all request strings should start with the same list of objects
108 final String ids = "relation(id:123,126,130)->.r;way(id:88,99)->.w;node(1)->.n;";
109 String requestString;
110
111 // objects without parents (ways always with nodes)
112 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, false, false);
113 assertEquals(ids + "(.r;.w;>;.n;);out meta;", requestString);
114 // objects without parents (ways always with nodes), recurse down one level for sub relations
115 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, false, true);
116 assertEquals(ids + ".r;rel(r)->.rm;(.r;.r;>;.rm;.w;>;.n;);out meta;", requestString);
117
118 // objects with parents
119 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, true, false);
120 assertEquals(
121 ids + ".r;rel(br)->.pr;.w;rel(bw)->.pw;.n;way(bn)->.wn;.n;rel(bn)->.rn;(.r;.pr;.w;>;.pw;.n;.wn;node(w);.rn;);out meta;",
122 requestString);
123
124 // objects with parents, recurse down one level for sub relations
125 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, true, true, true);
126 assertEquals(ids + ".r;rel(br)->.pr;.w;rel(bw)->.pw;.n;way(bn)->.wn;.n;rel(bn)->.rn;.r;rel(r)->.rm;"
127 + "(.r;.pr;.r;>;.rm;.w;>;.pw;.n;.wn;node(w);.rn;);out meta;", requestString);
128 // simulate download referrers
129 requestString = MultiFetchOverpassObjectReader.genOverpassQuery(objects, false, true, false);
130 assertEquals(
131 ids + ".r;rel(br)->.pr;.w;rel(bw)->.pw;.n;way(bn)->.wn;.n;rel(bn)->.rn;(.pr;.pw;.wn;node(w);.rn;);out meta;",
132 requestString);
133 }
134}
Note: See TracBrowser for help on using the repository browser.