source: josm/trunk/test/unit/org/openstreetmap/josm/tools/TextTagParserTest.java@ 18037

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

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

  • Property svn:eol-style set to native
File size: 6.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.tools;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5
6import java.util.ArrayList;
7import java.util.Arrays;
8import java.util.Collections;
9import java.util.HashMap;
10import java.util.List;
11import java.util.Map;
12
13import org.junit.jupiter.api.Test;
14import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
15
16/**
17 * Unit tests of {@link TextTagParser} class.
18 */
19// Some of this depends on preferences
20@BasicPreferences
21class TextTagParserTest {
22 /**
23 * Test of {@link TextTagParser#unescape} method.
24 */
25 @Test
26 void testUnescape() {
27 String s, s1;
28 s = "\"2 3 4\"";
29 s1 = "2 3 4";
30 assertEquals(s1, TextTagParser.unescape(s));
31
32 s = "\"2 \\\"3\\\" 4\"";
33 s1 = "2 \"3\" 4";
34 assertEquals(s1, TextTagParser.unescape(s));
35
36 s = "\"2 3 ===4===\"";
37 s1 = "2 3 ===4===";
38 assertEquals(s1, TextTagParser.unescape(s));
39
40 s = "\"2 3 \\\\\\\\===4===\"";
41 s1 = "2 3 \\\\===4===";
42 assertEquals(s1, TextTagParser.unescape(s));
43 }
44
45 /**
46 * Test of {@link TextTagParser#readTagsFromText} method with tabs and new lines.
47 */
48 @Test
49 void testTNformat() {
50 String txt = " a \t 1 \n\n\n b\t2 \n c \t the value with \"quotes\"";
51 Map<String, String> correctTags = new HashMap<String, String>() { {
52 put("a", "1"); put("b", "2"); put("c", "the value with \"quotes\"");
53 } };
54 Map<String, String> tags = TextTagParser.readTagsFromText(txt);
55 assertEquals(correctTags, tags);
56 }
57
58 /**
59 * Test of {@link TextTagParser#readTagsFromText} method with quotes.
60 */
61 @Test
62 void testEQformat() {
63 String txt = "key1=value key2=\"long value\" tag3=\"hotel \\\"Quote\\\"\"";
64 Map<String, String> correctTags = new HashMap<String, String>() { {
65 put("key1", "value"); put("key2", "long value");
66 put("tag3", "hotel \"Quote\"");
67 } };
68 Map<String, String> tags = TextTagParser.readTagsFromText(txt);
69 assertEquals(correctTags, tags);
70 }
71
72 /**
73 * Test of {@link TextTagParser#readTagsFromText} method with JSON.
74 */
75 @Test
76 void testJSONformat() {
77 String txt;
78 Map<String, String> tags, correctTags;
79 txt = "{ \"a\":\"1\", \"b\":\"2 3 4\" }";
80 correctTags = new HashMap<String, String>() { { put("a", "1"); put("b", "2 3 4"); } };
81 tags = TextTagParser.readTagsFromText(txt);
82 assertEquals(correctTags, tags);
83
84 txt = "\"a\" : \"1 1 1\", \"b2\" :\"2 \\\"3 qwe\\\" 4\"";
85 correctTags = new HashMap<String, String>() { { put("a", "1 1 1"); put("b2", "2 \"3 qwe\" 4"); } };
86 tags = TextTagParser.readTagsFromText(txt);
87 assertEquals(correctTags, tags);
88
89 txt = " \"aыыы\" : \"val\\\"\\\"\\\"ue1\"";
90 correctTags = new HashMap<String, String>() { { put("aыыы", "val\"\"\"ue1"); } };
91 tags = TextTagParser.readTagsFromText(txt);
92 assertEquals(correctTags, tags);
93 }
94
95 /**
96 * Test of {@link TextTagParser#readTagsFromText} method with free format.
97 */
98 @Test
99 void testFreeformat() {
100 String txt = "a 1 b=2 c=\"hello === \\\"\\\"world\"";
101 Map<String, String> correctTags = new HashMap<String, String>() { {
102 put("a", "1"); put("b", "2"); put("c", "hello === \"\"world");
103 } };
104 Map<String, String> tags = TextTagParser.readTagsFromText(txt);
105 assertEquals(correctTags, tags);
106 }
107
108 /**
109 * Test of {@link TextTagParser#readTagsFromText} method (error detection).
110 */
111 @Test
112 void testErrorDetect() {
113 String txt = "a=2 b=3 4";
114 Map<String, String> tags = TextTagParser.readTagsFromText(txt);
115 assertEquals(Collections.EMPTY_MAP, tags);
116 }
117
118 /**
119 * Test of {@link TextTagParser#readTagsFromText} method with tabs.
120 */
121 @Test
122 void testTab() {
123 assertEquals(Collections.singletonMap("shop", "jewelry"), TextTagParser.readTagsFromText("shop\tjewelry"));
124 assertEquals(Collections.singletonMap("shop", "jewelry"), TextTagParser.readTagsFromText("!shop\tjewelry"));
125 assertEquals(Collections.singletonMap("shop", "jewelry"), TextTagParser.readTagsFromText("!!!shop\tjewelry"));
126 assertEquals(Collections.singletonMap("shop", "jewelry"), TextTagParser.readTagsFromText("shop\t\t\tjewelry"));
127 }
128
129 /**
130 * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/16104">#16104</a>
131 */
132 @Test
133 void testTicket16104() {
134 Map<String, String> expected = new HashMap<>();
135 expected.put("boundary", "national_park");
136 expected.put("name", "Raet nasjonalpark");
137 expected.put("naturbase:iid", "VV00003273");
138 expected.put("naturbase:verneform", "NP");
139 expected.put("operator", "Raet Nasjonalparkstyre");
140 expected.put("protect_class", "2");
141 expected.put("related_law", "https://lovdata.no/forskrift/2016-12-16-1632");
142 expected.put("short_name", "Raet");
143 expected.put("start_date", "2016-12-16");
144 expected.put("type", "boundary");
145 expected.put("url", "http://faktaark.naturbase.no/?id=VV00003273");
146 assertEquals(expected, TextTagParser.readTagsFromText(
147 "boundary=national_park\n" +
148 "name=Raet nasjonalpark\n" +
149 "naturbase:iid=VV00003273\n" +
150 "naturbase:verneform=NP\n" +
151 "operator=Raet Nasjonalparkstyre\n" +
152 "protect_class=2\n" +
153 "related_law=https://lovdata.no/forskrift/2016-12-16-1632\n" +
154 "short_name=Raet\n" +
155 "start_date=2016-12-16\n" +
156 "type=boundary\n" +
157 "url=http://faktaark.naturbase.no/?id=VV00003273"));
158 }
159
160 /**
161 * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/8384#comment:58">ticket:8384#comment:58</a>
162 */
163 @Test
164 void testTicket8384Comment58() {
165 Map<String, String> expected = new HashMap<>();
166 expected.put("name", "Main street");
167 expected.put("url", "https://example.com/?id=1");
168 assertEquals(expected, TextTagParser.readTagsFromText("name=Main street\nurl=https://example.com/?id=1"));
169 }
170
171 /**
172 * Tests that the tags ordering is stable.
173 */
174 @Test
175 void testStableOrder() {
176 List<String> expected = Arrays.asList("foo4", "foo3", "foo2", "foo1");
177 ArrayList<String> actual = new ArrayList<>(TextTagParser.readTagsByRegexp(
178 "foo4=bar4 foo3=bar3 foo2=bar2 foo1=bar1", " ", "(.*?)=(.*?)", true).keySet());
179 assertEquals(expected, actual);
180 }
181}
Note: See TracBrowser for help on using the repository browser.