source: josm/trunk/test/unit/org/openstreetmap/josm/io/OverpassDownloadReaderTest.java @ 11917

Last change on this file since 11917 was 11917, checked in by Don-vip, 6 months ago

see #14653 - better unit test

File size: 3.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io;
3
4import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertTrue;
6
7import java.util.regex.Matcher;
8
9import org.junit.Rule;
10import org.junit.Test;
11import org.openstreetmap.josm.data.Bounds;
12import org.openstreetmap.josm.gui.preferences.server.OverpassServerPreference;
13import org.openstreetmap.josm.io.OverpassDownloadReader.OverpassOutpoutFormat;
14import org.openstreetmap.josm.testutils.JOSMTestRules;
15import org.openstreetmap.josm.tools.OverpassTurboQueryWizard;
16import org.openstreetmap.josm.tools.Utils;
17
18import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
19
20/**
21 * Unit tests of {@link OverpassDownloadReader} class.
22 */
23public class OverpassDownloadReaderTest {
24
25    /**
26     * Base test environment is enough
27     */
28    @Rule
29    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
30    public JOSMTestRules test = new JOSMTestRules().timeout(15000);
31
32    private String getExpandedQuery(String search) {
33        final String query = OverpassTurboQueryWizard.getInstance().constructQuery(search);
34        final String request = new OverpassDownloadReader(new Bounds(1, 2, 3, 4), OverpassServerPreference.getOverpassServer(), query)
35                .getRequestForBbox(1, 2, 3, 4)
36                .substring("interpreter?data=".length());
37        return Utils.decodeUrl(request);
38    }
39
40    /**
41     * Tests evaluating the extended query feature {@code bbox}.
42     */
43    @Test
44    public void testBbox() {
45        final String query = getExpandedQuery("amenity=drinking_water");
46        assertEquals("" +
47                "[out:xml][timeout:25][bbox:2.0,1.0,4.0,3.0];\n" +
48                "(\n" +
49                "  node[\"amenity\"=\"drinking_water\"];\n" +
50                "  way[\"amenity\"=\"drinking_water\"];\n" +
51                "  relation[\"amenity\"=\"drinking_water\"];\n" +
52                ");\n" +
53                "(._;>;);\n" +
54                "out meta;", query);
55    }
56
57    /**
58     * Tests evaluating the extended query feature {@code geocodeArea}.
59     */
60    @Test
61    public void testGeocodeArea() {
62        final String query = getExpandedQuery("amenity=drinking_water in London");
63        assertEquals("" +
64                "[out:xml][timeout:25];\n" +
65                "area(3600065606)->.searchArea;\n" +
66                "(\n" +
67                "  node[\"amenity\"=\"drinking_water\"](area.searchArea);\n" +
68                "  way[\"amenity\"=\"drinking_water\"](area.searchArea);\n" +
69                "  relation[\"amenity\"=\"drinking_water\"](area.searchArea);\n" +
70                ");\n" +
71                "(._;>;);\n" +
72                "out meta;", query);
73    }
74
75    /**
76     * Tests evaluating the extended query feature {@code geocodeArea}.
77     */
78    @Test
79    public void testGeocodeUnknownArea() {
80        final String query = OverpassDownloadReader.expandExtendedQueries("{{geocodeArea:foo-bar-baz-does-not-exist}}");
81        assertEquals("// Failed to evaluate {{geocodeArea:foo-bar-baz-does-not-exist}}\n", query);
82    }
83
84    /**
85     * Tests evaluating the overpass output format statements.
86     */
87    @Test
88    public void testOutputFormatStatement() {
89        for (OverpassOutpoutFormat oof : OverpassOutpoutFormat.values()) {
90            Matcher m = OverpassDownloadReader.OUTPUT_FORMAT_STATEMENT.matcher("[out:"+oof.getDirective()+"]");
91            assertTrue(m.matches());
92            assertEquals(oof.getDirective(), m.group(1));
93        }
94
95        assertTrue(OverpassDownloadReader.OUTPUT_FORMAT_STATEMENT.matcher(
96                "[out:pbf][timeout:25][bbox:{{bbox}}];\n" +
97                "(\n" +
98                "  node[\"amenity\"=\"pharmacy\"];\n" +
99                "  way[\"amenity\"=\"pharmacy\"];\n" +
100                "  relation[\"amenity\"=\"pharmacy\"];\n" +
101                ");\n" +
102                "(._;>;);\n" +
103                "out meta;").matches());
104    }
105}
Note: See TracBrowser for help on using the repository browser.