source: josm/trunk/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java@ 16950

Last change on this file since 16950 was 16950, checked in by simon04, 4 years ago

Revert "fix #19717 - DefaultNameFormatter: use FIRST-STRONG ISOLATE for bidirectional texts"

This reverts commit r16937

  • Property svn:eol-style set to native
File size: 7.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.osm;
3
4import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
5import static com.github.tomakehurst.wiremock.client.WireMock.get;
6import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
7import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
8import static org.junit.Assert.assertEquals;
9
10import java.io.IOException;
11import java.io.InputStream;
12import java.util.ArrayList;
13import java.util.Comparator;
14import java.util.List;
15import java.util.stream.Collectors;
16import java.util.stream.IntStream;
17
18import org.junit.Rule;
19import org.junit.Test;
20import org.openstreetmap.josm.TestUtils;
21import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
22import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
23import org.openstreetmap.josm.io.IllegalDataException;
24import org.openstreetmap.josm.io.OsmReader;
25import org.openstreetmap.josm.testutils.JOSMTestRules;
26import org.xml.sax.SAXException;
27
28import com.github.tomakehurst.wiremock.junit.WireMockRule;
29
30import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
31
32/**
33 * Unit tests of {@link DefaultNameFormatter} class.
34 */
35public class DefaultNameFormatterTest {
36
37 /**
38 * Setup test.
39 */
40 @Rule
41 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
42 public JOSMTestRules test = new JOSMTestRules();
43
44 /**
45 * HTTP mock.
46 */
47 @Rule
48 public WireMockRule wireMockRule = new WireMockRule(options().dynamicPort().usingFilesUnderDirectory(TestUtils.getTestDataRoot()));
49
50 /**
51 * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/9632">#9632</a>.
52 * @throws IllegalDataException if an error was found while parsing the data from the source
53 * @throws IOException if any I/O error occurs
54 * @throws SAXException if any XML error occurs
55 */
56 @Test
57 @SuppressFBWarnings(value = "ITA_INEFFICIENT_TO_ARRAY")
58 public void testTicket9632() throws IllegalDataException, IOException, SAXException {
59 String source = "presets/Presets_BicycleJunction-preset.xml";
60 wireMockRule.stubFor(get(urlEqualTo("/" + source))
61 .willReturn(aResponse()
62 .withStatus(200)
63 .withHeader("Content-Type", "text/xml")
64 .withBodyFile(source)));
65 TaggingPresets.addTaggingPresets(TaggingPresetReader.readAll("http://localhost:" + wireMockRule.port() + "/" + source, true));
66
67 Comparator<IRelation<?>> comparator = DefaultNameFormatter.getInstance().getRelationComparator();
68
69 try (InputStream is = TestUtils.getRegressionDataStream(9632, "data.osm.zip")) {
70 DataSet ds = OsmReader.parseDataSet(is, null);
71
72 // Test with 3 known primitives causing the problem. Correct order is p1, p3, p2 with this preset
73 Relation p1 = (Relation) ds.getPrimitiveById(2983382, OsmPrimitiveType.RELATION);
74 Relation p2 = (Relation) ds.getPrimitiveById(550315, OsmPrimitiveType.RELATION);
75 Relation p3 = (Relation) ds.getPrimitiveById(167042, OsmPrimitiveType.RELATION);
76
77 // route_master ("Bus 453", 6 members)
78 System.out.println("p1: "+DefaultNameFormatter.getInstance().format(p1)+" - "+p1);
79 // TMC ("A 6 Kaiserslautern - Mannheim [negative]", 123 members)
80 System.out.println("p2: "+DefaultNameFormatter.getInstance().format(p2)+" - "+p2);
81 // route(lcn Sal Salier-Radweg(412 members)
82 System.out.println("p3: "+DefaultNameFormatter.getInstance().format(p3)+" - "+p3);
83
84 // CHECKSTYLE.OFF: SingleSpaceSeparator
85 assertEquals(comparator.compare(p1, p2), -1); // p1 < p2
86 assertEquals(comparator.compare(p2, p1), 1); // p2 > p1
87
88 assertEquals(comparator.compare(p1, p3), -1); // p1 < p3
89 assertEquals(comparator.compare(p3, p1), 1); // p3 > p1
90 assertEquals(comparator.compare(p2, p3), 1); // p2 > p3
91 assertEquals(comparator.compare(p3, p2), -1); // p3 < p2
92 // CHECKSTYLE.ON: SingleSpaceSeparator
93
94 Relation[] relations = new ArrayList<>(ds.getRelations()).toArray(new Relation[0]);
95
96 TestUtils.checkComparableContract(comparator, relations);
97 }
98 }
99
100 /**
101 * Tests formatting of relation names.
102 */
103 @Test
104 public void testRelationName() {
105 assertEquals("relation (0, 0 members)",
106 getFormattedRelationName("X=Y"));
107 assertEquals("relation (\"Foo\", 0 members)",
108 getFormattedRelationName("name=Foo"));
109 assertEquals("route (\"123\", 0 members)",
110 getFormattedRelationName("type=route route=tram ref=123"));
111 assertEquals("multipolygon (\"building\", 0 members)",
112 getFormattedRelationName("type=multipolygon building=yes"));
113 assertEquals("multipolygon (\"123\", 0 members)",
114 getFormattedRelationName("type=multipolygon building=yes ref=123"));
115 assertEquals("multipolygon (\"building\", 0 members)",
116 getFormattedRelationName("type=multipolygon building=yes addr:housenumber=123"));
117 assertEquals("multipolygon (\"residential\", 0 members)",
118 getFormattedRelationName("type=multipolygon building=residential addr:housenumber=123"));
119 }
120
121 /**
122 * Tests formatting of way names.
123 */
124 @Test
125 public void testWayName() {
126 assertEquals("building (0 nodes)", getFormattedWayName("building=yes"));
127 assertEquals("House number 123 (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123"));
128 assertEquals("House number 123 at FooStreet (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123 addr:street=FooStreet"));
129 assertEquals("House FooName (0 nodes)", getFormattedWayName("building=yes addr:housenumber=123 addr:housename=FooName"));
130 }
131
132 static String getFormattedRelationName(String tagsString) {
133 return DefaultNameFormatter.getInstance().format((Relation) OsmUtils.createPrimitive("relation " + tagsString))
134 .replace("\u200E", "").replace("\u200F", "");
135 }
136
137 static String getFormattedWayName(String tagsString) {
138 return DefaultNameFormatter.getInstance().format((Way) OsmUtils.createPrimitive("way " + tagsString))
139 .replace("\u200E", "").replace("\u200F", "");
140 }
141
142 /**
143 * Test of {@link DefaultNameFormatter#formatAsHtmlUnorderedList} methods.
144 */
145 @Test
146 public void testFormatAsHtmlUnorderedList() {
147 assertEquals("<ul><li>incomplete</li></ul>",
148 DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(new Node(1)));
149
150 List<Node> nodes = IntStream.rangeClosed(1, 10).mapToObj(i -> new Node(i, 1))
151 .collect(Collectors.toList());
152 assertEquals("<ul><li>1</li><li>2</li><li>3</li><li>4</li><li>...</li></ul>",
153 DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(nodes, 5));
154 }
155
156 /**
157 * Test of {@link DefaultNameFormatter#buildDefaultToolTip(IPrimitive)}.
158 */
159 @Test
160 public void testBuildDefaultToolTip() {
161 assertEquals("<html><strong>id</strong>=0<br>"+
162 "<strong>name:en</strong>=foo<br>"+
163 "<strong>tourism</strong>=hotel<br>"+
164 "<strong>url</strong>=http://foo.bar<br>"+
165 "<strong>xml</strong>=&lt;tag/&gt;</html>",
166 DefaultNameFormatter.getInstance().buildDefaultToolTip(
167 TestUtils.newNode("tourism=hotel name:en=foo url=http://foo.bar xml=<tag/>")));
168 }
169}
Note: See TracBrowser for help on using the repository browser.