source: josm/trunk/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java@ 13079

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

see #15560 - EqualsVerifier does not work with newer Java versions -> disable tests automatically in this case
Workaround to https://github.com/jqno/equalsverifier/issues/177 / https://github.com/raphw/byte-buddy/issues/370
Inspired by https://issues.apache.org/jira/browse/SOLR-11606

  • Property svn:eol-style set to native
File size: 8.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.osm;
3
4import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertFalse;
6import static org.junit.Assert.assertTrue;
7
8import java.io.FileInputStream;
9import java.io.InputStream;
10import java.util.Arrays;
11import java.util.Collection;
12import java.util.HashSet;
13import java.util.LinkedList;
14import java.util.List;
15
16import org.junit.Rule;
17import org.junit.Test;
18import org.openstreetmap.josm.TestUtils;
19import org.openstreetmap.josm.data.coor.LatLon;
20import org.openstreetmap.josm.data.osm.Filter.FilterPreferenceEntry;
21import org.openstreetmap.josm.data.osm.search.SearchMode;
22import org.openstreetmap.josm.data.osm.search.SearchParseError;
23import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
24import org.openstreetmap.josm.io.OsmReader;
25import org.openstreetmap.josm.testutils.JOSMTestRules;
26
27import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
28import nl.jqno.equalsverifier.EqualsVerifier;
29import nl.jqno.equalsverifier.Warning;
30
31/**
32 * Unit tests for class {@link Filter}.
33 */
34public class FilterTest {
35
36 /**
37 * Setup test.
38 */
39 @Rule
40 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
41 public JOSMTestRules test = new JOSMTestRules();
42
43 @Test
44 public void testBasic() throws SearchParseError {
45 DataSet ds = new DataSet();
46 Node n1 = new Node(LatLon.ZERO);
47 n1.put("amenity", "parking");
48 Node n2 = new Node(LatLon.ZERO);
49 n2.put("fixme", "continue");
50 ds.addPrimitive(n1);
51 ds.addPrimitive(n2);
52
53 Collection<OsmPrimitive> all = new HashSet<>();
54 all.addAll(Arrays.asList(new OsmPrimitive[] {n1, n2}));
55
56 List<Filter> filters = new LinkedList<>();
57 Filter f1 = new Filter();
58 f1.text = "fixme";
59 f1.hiding = true;
60 filters.addAll(Arrays.asList(new Filter[] {f1}));
61
62 FilterMatcher filterMatcher = new FilterMatcher();
63 filterMatcher.update(filters);
64
65 FilterWorker.executeFilters(all, filterMatcher);
66
67 assertTrue(n2.isDisabledAndHidden());
68 assertFalse(n1.isDisabled());
69 }
70
71 @Test
72 public void testFilter() throws Exception {
73 for (int i : new int[] {1, 2, 3, 11, 12, 13, 14, 15}) {
74 DataSet ds;
75 try (InputStream is = new FileInputStream("data_nodist/filterTests.osm")) {
76 ds = OsmReader.parseDataSet(is, NullProgressMonitor.INSTANCE);
77 }
78
79 List<Filter> filters = new LinkedList<>();
80 switch (i) {
81 case 1: {
82 Filter f1 = new Filter();
83 f1.text = "power";
84 f1.hiding = true;
85 filters.add(f1);
86 break;
87 }
88 case 2: {
89 Filter f1 = new Filter();
90 f1.text = "highway";
91 f1.inverted = true;
92 filters.add(f1);
93 break;
94 }
95 case 3: {
96 Filter f1 = new Filter();
97 f1.text = "power";
98 f1.inverted = true;
99 f1.hiding = true;
100 Filter f2 = new Filter();
101 f2.text = "highway";
102 filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
103 break;
104 }
105 case 11: {
106 Filter f1 = new Filter();
107 f1.text = "highway";
108 f1.inverted = true;
109 f1.hiding = true;
110 filters.add(f1);
111 break;
112 }
113 case 12: {
114 Filter f1 = new Filter();
115 f1.text = "highway";
116 f1.inverted = true;
117 f1.hiding = true;
118 Filter f2 = new Filter();
119 f2.text = "water";
120 f2.mode = SearchMode.remove;
121 filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
122 break;
123 }
124 case 13: {
125 Filter f1 = new Filter();
126 f1.text = "highway";
127 f1.inverted = true;
128 f1.hiding = true;
129 Filter f2 = new Filter();
130 f2.text = "water";
131 f2.mode = SearchMode.remove;
132 Filter f3 = new Filter();
133 f3.text = "natural";
134 filters.addAll(Arrays.asList(new Filter[] {f1, f2, f3}));
135 break;
136 }
137 case 14: {
138 /* show all highways and all water features, but not lakes
139 * except those that have a name */
140 Filter f1 = new Filter();
141 f1.text = "highway";
142 f1.inverted = true;
143 f1.hiding = true;
144 Filter f2 = new Filter();
145 f2.text = "water";
146 f2.mode = SearchMode.remove;
147 Filter f3 = new Filter();
148 f3.text = "natural";
149 Filter f4 = new Filter();
150 f4.text = "name";
151 f4.mode = SearchMode.remove;
152 filters.addAll(Arrays.asList(new Filter[] {f1, f2, f3, f4}));
153 break;
154 }
155 case 15: {
156 Filter f1 = new Filter();
157 f1.text = "highway";
158 f1.inverted = true;
159 f1.hiding = true;
160 Filter f2 = new Filter();
161 f2.text = "water";
162 f2.mode = SearchMode.remove;
163 f2.hiding = true; // Remove only hide flag so water should stay disabled
164 filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
165 break;
166 }
167 default: throw new AssertionError();
168 }
169
170 FilterMatcher filterMatcher = new FilterMatcher();
171 filterMatcher.update(filters);
172
173 FilterWorker.executeFilters(ds.allPrimitives(), filterMatcher);
174
175 boolean foundAtLeastOne = false;
176 System.err.println("Run #"+i);
177 StringBuilder failedPrimitives = new StringBuilder();
178 for (OsmPrimitive osm : ds.allPrimitives()) {
179 String key = "source:RESULT"+i; // use key that counts as untagged
180 if (osm.hasKey(key)) {
181 foundAtLeastOne = true;
182 if (!osm.get(key).equals(filterCode(osm))) {
183 failedPrimitives.append(String.format(
184 "Object %s. Expected [%s] but was [%s]%n", osm.toString(), osm.get(key), filterCode(osm)));
185 }
186 }
187 }
188 assertTrue(foundAtLeastOne);
189 if (failedPrimitives.length() != 0)
190 throw new AssertionError(String.format("Run #%d%n%s", i, failedPrimitives.toString()));
191 }
192 }
193
194 /**
195 * Unit tests of {@link Filter.FilterPreferenceEntry} class.
196 */
197 @Test
198 public void testFilterPreferenceEntry() {
199 Filter f = new Filter();
200 FilterPreferenceEntry fpe = f.getPreferenceEntry();
201
202 assertTrue(fpe.enable);
203
204 assertFalse(fpe.case_sensitive);
205 assertFalse(fpe.hiding);
206 assertFalse(fpe.inverted);
207 assertFalse(fpe.mapCSS_search);
208 assertFalse(fpe.regex_search);
209
210 assertEquals("add", fpe.mode);
211 assertEquals("1", fpe.version);
212 assertEquals("", fpe.text);
213
214 f.allElements = !f.allElements;
215 f.caseSensitive = !f.caseSensitive;
216 f.enable = !f.enable;
217 f.hiding = !f.hiding;
218 f.inverted = !f.inverted;
219 f.mapCSSSearch = !f.mapCSSSearch;
220 f.mode = SearchMode.remove;
221 f.regexSearch = !f.regexSearch;
222 f.text = "foo";
223 fpe = f.getPreferenceEntry();
224
225 assertFalse(fpe.enable);
226
227 assertTrue(fpe.case_sensitive);
228 assertTrue(fpe.hiding);
229 assertTrue(fpe.inverted);
230 assertTrue(fpe.mapCSS_search);
231 assertTrue(fpe.regex_search);
232
233 assertEquals("remove", fpe.mode);
234 assertEquals("1", fpe.version);
235 assertEquals("foo", fpe.text);
236
237 assertEquals(fpe, new Filter(fpe).getPreferenceEntry());
238 }
239
240 /**
241 * Unit test of methods {@link FilterPreferenceEntry#equals} and {@link FilterPreferenceEntry#hashCode}.
242 */
243 @Test
244 public void testEqualsContract() {
245 TestUtils.assumeWorkingEqualsVerifier();
246 EqualsVerifier.forClass(FilterPreferenceEntry.class).usingGetClass()
247 .suppress(Warning.NONFINAL_FIELDS)
248 .verify();
249 }
250
251 private static String filterCode(OsmPrimitive osm) {
252 if (!osm.isDisabled())
253 return "v";
254 if (!osm.isDisabledAndHidden())
255 return "d";
256 return "h";
257 }
258}
Note: See TracBrowser for help on using the repository browser.