source: josm/trunk/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java @ 10378

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

Checkstyle 6.19: enable SingleSpaceSeparator and fix violations

  • Property svn:eol-style set to native
File size: 6.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui;
3
4import static org.junit.Assert.assertEquals;
5
6import java.io.IOException;
7import java.io.InputStream;
8import java.util.ArrayList;
9import java.util.Comparator;
10import java.util.List;
11
12import org.junit.BeforeClass;
13import org.junit.Test;
14import org.openstreetmap.josm.JOSMFixture;
15import org.openstreetmap.josm.TestUtils;
16import org.openstreetmap.josm.data.osm.DataSet;
17import org.openstreetmap.josm.data.osm.Node;
18import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
19import org.openstreetmap.josm.data.osm.OsmUtils;
20import org.openstreetmap.josm.data.osm.Relation;
21import org.openstreetmap.josm.data.osm.Way;
22import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
23import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
24import org.openstreetmap.josm.io.IllegalDataException;
25import org.openstreetmap.josm.io.OsmReader;
26import org.xml.sax.SAXException;
27
28import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
29
30/**
31 * Unit tests of {@link DefaultNameFormatter} class.
32 */
33public class DefaultNameFormatterTest {
34
35    /**
36     * Setup tests
37     */
38    @BeforeClass
39    public static void setUpBeforeClass() {
40        JOSMFixture.createUnitTestFixture().init();
41    }
42
43    /**
44     * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/9632">#9632</a>.
45     * @throws IllegalDataException if an error was found while parsing the data from the source
46     * @throws IOException if any I/O error occurs
47     * @throws SAXException if any XML error occurs
48     */
49    @Test
50    @SuppressFBWarnings(value = "ITA_INEFFICIENT_TO_ARRAY")
51    public void testTicket9632() throws IllegalDataException, IOException, SAXException {
52        String source = "http://josm.openstreetmap.de/josmfile?page=Presets/BicycleJunction&amp;preset";
53        TaggingPresets.addTaggingPresets(TaggingPresetReader.readAll(source, true));
54
55        Comparator<Relation> comparator = DefaultNameFormatter.getInstance().getRelationComparator();
56
57        try (InputStream is = TestUtils.getRegressionDataStream(9632, "data.osm.zip")) {
58            DataSet ds = OsmReader.parseDataSet(is, null);
59
60            // Test with 3 known primitives causing the problem. Correct order is p1, p3, p2 with this preset
61            Relation p1 = (Relation) ds.getPrimitiveById(2983382, OsmPrimitiveType.RELATION);
62            Relation p2 = (Relation) ds.getPrimitiveById(550315, OsmPrimitiveType.RELATION);
63            Relation p3 = (Relation) ds.getPrimitiveById(167042, OsmPrimitiveType.RELATION);
64
65            // route_master ("Bus 453", 6 members)
66            System.out.println("p1: "+DefaultNameFormatter.getInstance().format(p1)+" - "+p1);
67            // TMC ("A 6 Kaiserslautern - Mannheim [negative]", 123 members)
68            System.out.println("p2: "+DefaultNameFormatter.getInstance().format(p2)+" - "+p2);
69            // route(lcn Sal  Salier-Radweg(412 members)
70            System.out.println("p3: "+DefaultNameFormatter.getInstance().format(p3)+" - "+p3);
71
72            // CHECKSTYLE.OFF: SingleSpaceSeparator
73            assertEquals(comparator.compare(p1, p2), -1); // p1 < p2
74            assertEquals(comparator.compare(p2, p1),  1); // p2 > p1
75
76            assertEquals(comparator.compare(p1, p3), -1); // p1 < p3
77            assertEquals(comparator.compare(p3, p1),  1); // p3 > p1
78            assertEquals(comparator.compare(p2, p3),  1); // p2 > p3
79            assertEquals(comparator.compare(p3, p2), -1); // p3 < p2
80            // CHECKSTYLE.ON: SingleSpaceSeparator
81
82            Relation[] relations = new ArrayList<>(ds.getRelations()).toArray(new Relation[0]);
83
84            TestUtils.checkComparableContract(comparator, relations);
85        }
86    }
87
88    /**
89     * Tests formatting of relation names.
90     */
91    @Test
92    public void testRelationName() {
93        assertEquals("relation (0, 0 members)",
94                getFormattedRelationName("X=Y"));
95        assertEquals("relation (\"Foo\", 0 members)",
96                getFormattedRelationName("name=Foo"));
97        assertEquals("route (\"123\", 0 members)",
98                getFormattedRelationName("type=route route=tram ref=123"));
99        assertEquals("multipolygon (\"building\", 0 members)",
100                getFormattedRelationName("type=multipolygon building=yes"));
101        assertEquals("multipolygon (\"123\", 0 members)",
102                getFormattedRelationName("type=multipolygon building=yes ref=123"));
103        assertEquals("multipolygon (\"building\", 0 members)",
104                getFormattedRelationName("type=multipolygon building=yes addr:housenumber=123"));
105        assertEquals("multipolygon (\"residential\", 0 members)",
106                getFormattedRelationName("type=multipolygon building=residential addr:housenumber=123"));
107    }
108
109    /**
110     * Tests formatting of way names.
111     */
112    @Test
113    public void testWayName() {
114        assertEquals("building (0 nodes)", getFormattedWayName("building=yes"));
115        assertEquals("House number 123 (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123"));
116        assertEquals("House number 123 at FooStreet (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123 addr:street=FooStreet"));
117        assertEquals("House FooName (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123 addr:housename=FooName"));
118    }
119
120    static String getFormattedRelationName(String tagsString) {
121        return DefaultNameFormatter.getInstance().format((Relation) OsmUtils.createPrimitive("relation " + tagsString))
122                .replace("\u200E", "").replace("\u200F", "");
123    }
124
125    static String getFormattedWayName(String tagsString) {
126        return DefaultNameFormatter.getInstance().format((Way) OsmUtils.createPrimitive("way " + tagsString))
127                .replace("\u200E", "").replace("\u200F", "");
128    }
129
130    /**
131     * Test of {@link DefaultNameFormatter#formatAsHtmlUnorderedList} methods.
132     */
133    @Test
134    public void testFormatAsHtmlUnorderedList() {
135        assertEquals("<ul><li>incomplete</li></ul>",
136                DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(new Node(1)));
137
138        List<Node> nodes = new ArrayList<>(10);
139        for (int i = 1; i <= 10; i++) {
140            nodes.add(new Node(i, 1));
141        }
142        assertEquals("<ul><li>1</li><li>2</li><li>3</li><li>4</li><li>...</li></ul>",
143                DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(nodes, 5));
144    }
145}
Note: See TracBrowser for help on using the repository browser.