source: josm/trunk/test/unit/org/openstreetmap/josm/data/validation/tests/OpeningHourTestTest.java@ 10467

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

fix #13037 - Small fixes for unit tests (patch by michael2402) - gsoc-core

  • Property svn:eol-style set to native
File size: 11.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.validation.tests;
3
4import static org.CustomMatchers.hasSize;
5import static org.CustomMatchers.isEmpty;
6import static org.hamcrest.CoreMatchers.not;
7import static org.junit.Assert.assertEquals;
8import static org.junit.Assert.assertFalse;
9import static org.junit.Assert.assertThat;
10import static org.junit.Assert.assertTrue;
11
12import java.util.Arrays;
13import java.util.Collection;
14import java.util.LinkedHashSet;
15import java.util.List;
16import java.util.Set;
17
18import org.junit.Before;
19import org.junit.Rule;
20import org.junit.Test;
21import org.openstreetmap.josm.data.osm.Tag;
22import org.openstreetmap.josm.data.validation.Severity;
23import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
24import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
25import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
26import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
27import org.openstreetmap.josm.testutils.JOSMTestRules;
28
29import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
30
31/**
32 * JUnit Test of "Opening hours" validation test.
33 * @see OpeningHourTest
34 */
35public class OpeningHourTestTest {
36 /**
37 * We need prefs for this. We check strings so we need i18n.
38 */
39 @Rule
40 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
41 public JOSMTestRules test = new JOSMTestRules().preferences().i18n();
42
43 private OpeningHourTest openingHourTest;
44
45 /**
46 * Setup test.
47 * @throws Exception if test cannot be initialized
48 */
49 @Before
50 public void setUp() throws Exception {
51 openingHourTest = new OpeningHourTest();
52 openingHourTest.initialize();
53 }
54
55 /**
56 * Test #1 of opening_hours syntax.
57 */
58 @Test
59 public void testCheckOpeningHourSyntax1() {
60 final String key = "opening_hours";
61 // frequently used tags according to https://taginfo.openstreetmap.org/keys/opening_hours#values
62 assertThat(openingHourTest.checkOpeningHourSyntax(key, "24/7"), isEmpty());
63 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 08:30-20:00"), isEmpty());
64 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr sunrise-sunset"), isEmpty());
65 assertThat(openingHourTest.checkOpeningHourSyntax(key, "09:00-21:00"), isEmpty());
66 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Su-Th sunset-24:00,04:00-sunrise; Fr-Sa sunset-sunrise"), isEmpty());
67 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise"), hasSize(1));
68 assertEquals(Severity.OTHER, openingHourTest.checkOpeningHourSyntax(
69 key, "Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise").get(0).getSeverity());
70 assertEquals("Su-Th sunset-24:00,04:00-sunrise; Fr-Sa sunset-sunrise", openingHourTest.checkOpeningHourSyntax(
71 key, "Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise").get(0).getPrettifiedValue());
72 }
73
74 @Test
75 public void testI18n() {
76 assertTrue(openingHourTest.checkOpeningHourSyntax("opening_hours", ".", OpeningHourTest.CheckMode.POINTS_IN_TIME, false, "de")
77 .get(0).toString().contains("Unerwartetes Zeichen"));
78 assertFalse(openingHourTest.checkOpeningHourSyntax("opening_hours", ".", OpeningHourTest.CheckMode.POINTS_IN_TIME, false, "en")
79 .get(0).toString().contains("Unerwartetes Zeichen"));
80 }
81
82 /**
83 * Test #2 of opening_hours syntax.
84 */
85 @Test
86 public void testCheckOpeningHourSyntax2() {
87 final String key = "opening_hours";
88 final List<OpeningHourTest.OpeningHoursTestError> errors = openingHourTest.checkOpeningHourSyntax(key, "Mo-Tue");
89 assertThat(errors, hasSize(2));
90 assertEquals(key + " - Mo-Tue <--- (Please use the abbreviation \"Tu\" for \"tue\".)", errors.get(0).getMessage());
91 assertEquals(Severity.WARNING, errors.get(0).getSeverity());
92 assertEquals(key +
93 " - Mo-Tue <--- (This rule is not very explicit because there is no time selector being used."+
94 " Please add a time selector to this rule or use a comment to make it more explicit.)", errors.get(1).getMessage());
95 assertEquals(Severity.WARNING, errors.get(1).getSeverity());
96 }
97
98 /**
99 * Test #3 of opening_hours syntax.
100 */
101 @Test
102 public void testCheckOpeningHourSyntax3() {
103 final String key = "opening_hours";
104 final List<OpeningHourTest.OpeningHoursTestError> errors = openingHourTest.checkOpeningHourSyntax(key, "Sa-Su 10.00-20.00");
105 assertThat(errors, hasSize(2));
106 assertEquals(key + " - Sa-Su 10. <--- (Please use \":\" as hour/minute-separator)", errors.get(0).getMessage());
107 assertEquals(Severity.WARNING, errors.get(0).getSeverity());
108 assertEquals("Sa-Su 10:00-20:00", errors.get(0).getPrettifiedValue());
109 assertEquals(key + " - Sa-Su 10.00-20. <--- (Please use \":\" as hour/minute-separator)", errors.get(1).getMessage());
110 assertEquals(Severity.WARNING, errors.get(1).getSeverity());
111 }
112
113 /**
114 * Test #4 of opening_hours syntax.
115 */
116 @Test
117 public void testCheckOpeningHourSyntax4() {
118 assertThat(openingHourTest.checkOpeningHourSyntax(null, null), isEmpty());
119 assertThat(openingHourTest.checkOpeningHourSyntax(null, ""), isEmpty());
120 assertThat(openingHourTest.checkOpeningHourSyntax(null, " "), isEmpty());
121 }
122
123 /**
124 * Test #5 of opening_hours syntax.
125 */
126 @Test
127 public void testCheckOpeningHourSyntax5() {
128 final String key = "opening_hours";
129 assertThat(openingHourTest.checkOpeningHourSyntax(key, "badtext"), hasSize(1));
130 assertEquals(key + " - ba <--- (Unexpected token: \"b\" Invalid/unsupported syntax.)",
131 openingHourTest.checkOpeningHourSyntax(key, "badtext").get(0).getMessage());
132 assertThat(openingHourTest.checkOpeningHourSyntax(key, "5.00 p.m-11.00 p.m"), hasSize(1));
133 assertEquals(key + " - 5.00 p <--- (hyphen (-) or open end (+) in time range expected. "
134 + "For working with points in time, the mode for opening_hours.js has to be altered. Maybe wrong tag?)",
135 openingHourTest.checkOpeningHourSyntax(key, "5.00 p.m-11.00 p.m").get(0).getMessage());
136 }
137
138 /**
139 * Test #6 of opening_hours syntax.
140 */
141 @Test
142 public void testCheckOpeningHourSyntax6() {
143 final String key = "opening_hours";
144 assertThat(openingHourTest.checkOpeningHourSyntax(key, "PH open \"always open on public holidays\""), isEmpty());
145 }
146
147 /**
148 * Test #7 of opening_hours syntax.
149 */
150 @Test
151 public void testCheckOpeningHourSyntax7() {
152 final String key = "opening_hours";
153 assertThat(openingHourTest.checkOpeningHourSyntax(key, "9:00-18:00"), hasSize(1));
154 assertEquals(Severity.OTHER, openingHourTest.checkOpeningHourSyntax(key, "9:00-18:00").get(0).getSeverity());
155 assertEquals("09:00-18:00", openingHourTest.checkOpeningHourSyntax(key, "9:00-18:00").get(0).getPrettifiedValue());
156 }
157
158 /**
159 * Non-regression Test of opening_hours syntax for bug #9367.
160 */
161 @Test
162 public void testCheckOpeningHourSyntaxTicket9367() {
163 final String key = "opening_hours";
164 assertEquals(Severity.WARNING, openingHourTest.checkOpeningHourSyntax(key, "Mo,Tu 04-17").get(0).getSeverity());
165 assertEquals(key + " - Mo,Tu 04-17 <--- (Time range without minutes specified. "
166 + "Not very explicit! Please use this syntax instead \"04:00-17:00\".)",
167 openingHourTest.checkOpeningHourSyntax(key, "Mo,Tu 04-17").get(0).getMessage());
168 assertEquals("Mo,Tu 04:00-17:00", openingHourTest.checkOpeningHourSyntax(key, "Mo,Tu 04-17").get(0).getPrettifiedValue());
169 }
170
171 /**
172 * Test #1 of service_times syntax.
173 */
174 @Test
175 public void testCheckServiceTimeSyntax1() {
176 final String key = "service_times";
177 // frequently used tags according to https://taginfo.openstreetmap.org/keys/service_times#values
178 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Su 10:00", OpeningHourTest.CheckMode.BOTH), isEmpty());
179 assertThat(openingHourTest.checkOpeningHourSyntax(key, "automatic", OpeningHourTest.CheckMode.BOTH), not(isEmpty()));
180 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Sa 09:00-18:00", OpeningHourTest.CheckMode.BOTH), isEmpty());
181 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Su 09:30; We 19:30", OpeningHourTest.CheckMode.BOTH), isEmpty());
182 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00",
183 OpeningHourTest.CheckMode.BOTH), isEmpty());
184 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00",
185 OpeningHourTest.CheckMode.BOTH), hasSize(1));
186 assertEquals("Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00",
187 openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00",
188 OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue());
189 assertEquals("Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00",
190 openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00",
191 OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue());
192 }
193
194 /**
195 * Test #1 of collection_times syntax.
196 */
197 @Test
198 public void testCheckCollectionTimeSyntax1() {
199 final String key = "collection_times";
200 // frequently used tags according to https://taginfo.openstreetmap.org/keys/collection_times#values
201 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Sa 09:00", OpeningHourTest.CheckMode.BOTH), isEmpty());
202 assertThat(openingHourTest.checkOpeningHourSyntax(key, "fixme", OpeningHourTest.CheckMode.BOTH), not(isEmpty()));
203 assertThat(openingHourTest.checkOpeningHourSyntax(key, "daily", OpeningHourTest.CheckMode.BOTH), not(isEmpty()));
204 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30,17:45,19:00; Sa 15:00; Su 11:00",
205 OpeningHourTest.CheckMode.BOTH), isEmpty());
206 assertThat(openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00",
207 OpeningHourTest.CheckMode.BOTH), hasSize(1));
208 assertEquals(Severity.OTHER,
209 openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00",
210 OpeningHourTest.CheckMode.BOTH).get(0).getSeverity());
211 assertEquals("Mo-Fr 13:30,17:45,19:00; Sa 15:00; Su 11:00",
212 openingHourTest.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00",
213 OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue());
214 }
215
216 /**
217 * Tests that predefined values in presets are correct.
218 */
219 @Test
220 public void testPresetValues() {
221 final Collection<TaggingPreset> presets = TaggingPresetReader.readFromPreferences(false, false);
222 final Set<Tag> values = new LinkedHashSet<>();
223 for (final TaggingPreset p : presets) {
224 for (final TaggingPresetItem i : p.data) {
225 if (i instanceof KeyedItem &&
226 Arrays.asList("opening_hours", "service_times", "collection_times").contains(((KeyedItem) i).key)) {
227 for (final String v : ((KeyedItem) i).getValues()) {
228 values.add(new Tag(((KeyedItem) i).key, v));
229 }
230 }
231 }
232 }
233 for (final Tag t : values) {
234 final List<OpeningHourTest.OpeningHoursTestError> errors = openingHourTest.checkOpeningHourSyntax(t.getKey(), t.getValue());
235 assertThat(t + " is valid", errors, isEmpty());
236 }
237 }
238}
Note: See TracBrowser for help on using the repository browser.