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

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

sonar - squid:S3578 - Test methods should comply with a naming convention

  • 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.data.osm;
3
4import static org.junit.Assert.assertFalse;
5import static org.junit.Assert.assertTrue;
6
7import java.io.FileInputStream;
8import java.io.InputStream;
9import java.util.Arrays;
10import java.util.Collection;
11import java.util.HashSet;
12import java.util.LinkedList;
13import java.util.List;
14
15import org.junit.BeforeClass;
16import org.junit.Test;
17import org.openstreetmap.josm.JOSMFixture;
18import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
19import org.openstreetmap.josm.actions.search.SearchCompiler.ParseError;
20import org.openstreetmap.josm.data.coor.LatLon;
21import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
22import org.openstreetmap.josm.io.OsmReader;
23
24/**
25 * Unit tests for class {@link Filter}.
26 */
27public class FilterTest {
28
29 /**
30 * Setup test.
31 */
32 @BeforeClass
33 public static void setUp() {
34 JOSMFixture.createUnitTestFixture().init();
35 }
36
37 @Test
38 public void testBasic() throws ParseError {
39 DataSet ds = new DataSet();
40 Node n1 = new Node(LatLon.ZERO);
41 n1.put("amenity", "parking");
42 Node n2 = new Node(LatLon.ZERO);
43 n2.put("fixme", "continue");
44 ds.addPrimitive(n1);
45 ds.addPrimitive(n2);
46
47 Collection<OsmPrimitive> all = new HashSet<>();
48 all.addAll(Arrays.asList(new OsmPrimitive[] {n1, n2}));
49
50 List<Filter> filters = new LinkedList<>();
51 Filter f1 = new Filter();
52 f1.text = "fixme";
53 f1.hiding = true;
54 filters.addAll(Arrays.asList(new Filter[] {f1}));
55
56 FilterMatcher filterMatcher = new FilterMatcher();
57 filterMatcher.update(filters);
58
59 FilterWorker.executeFilters(all, filterMatcher);
60
61 assertTrue(n2.isDisabledAndHidden());
62 assertFalse(n1.isDisabled());
63 }
64
65 @Test
66 public void testFilter() throws Exception {
67 for (int i : new int[] {1, 2, 3, 11, 12, 13, 14, 15}) {
68 DataSet ds;
69 try (InputStream is = new FileInputStream("data_nodist/filterTests.osm")) {
70 ds = OsmReader.parseDataSet(is, NullProgressMonitor.INSTANCE);
71 }
72
73 List<Filter> filters = new LinkedList<>();
74 switch (i) {
75 case 1: {
76 Filter f1 = new Filter();
77 f1.text = "power";
78 f1.hiding = true;
79 filters.add(f1);
80 break;
81 }
82 case 2: {
83 Filter f1 = new Filter();
84 f1.text = "highway";
85 f1.inverted = true;
86 filters.add(f1);
87 break;
88 }
89 case 3: {
90 Filter f1 = new Filter();
91 f1.text = "power";
92 f1.inverted = true;
93 f1.hiding = true;
94 Filter f2 = new Filter();
95 f2.text = "highway";
96 filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
97 break;
98 }
99 case 11: {
100 Filter f1 = new Filter();
101 f1.text = "highway";
102 f1.inverted = true;
103 f1.hiding = true;
104 filters.add(f1);
105 break;
106 }
107 case 12: {
108 Filter f1 = new Filter();
109 f1.text = "highway";
110 f1.inverted = true;
111 f1.hiding = true;
112 Filter f2 = new Filter();
113 f2.text = "water";
114 f2.mode = SearchMode.remove;
115 filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
116 break;
117 }
118 case 13: {
119 Filter f1 = new Filter();
120 f1.text = "highway";
121 f1.inverted = true;
122 f1.hiding = true;
123 Filter f2 = new Filter();
124 f2.text = "water";
125 f2.mode = SearchMode.remove;
126 Filter f3 = new Filter();
127 f3.text = "natural";
128 filters.addAll(Arrays.asList(new Filter[] {f1, f2, f3}));
129 break;
130 }
131 case 14: {
132 /* show all highways and all water features, but not lakes
133 * except those that have a name */
134 Filter f1 = new Filter();
135 f1.text = "highway";
136 f1.inverted = true;
137 f1.hiding = true;
138 Filter f2 = new Filter();
139 f2.text = "water";
140 f2.mode = SearchMode.remove;
141 Filter f3 = new Filter();
142 f3.text = "natural";
143 Filter f4 = new Filter();
144 f4.text = "name";
145 f4.mode = SearchMode.remove;
146 filters.addAll(Arrays.asList(new Filter[] {f1, f2, f3, f4}));
147 break;
148 }
149 case 15: {
150 Filter f1 = new Filter();
151 f1.text = "highway";
152 f1.inverted = true;
153 f1.hiding = true;
154 Filter f2 = new Filter();
155 f2.text = "water";
156 f2.mode = SearchMode.remove;
157 f2.hiding = true; // Remove only hide flag so water should stay disabled
158 filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
159 break;
160 }
161 default: throw new AssertionError();
162 }
163
164 FilterMatcher filterMatcher = new FilterMatcher();
165 filterMatcher.update(filters);
166
167 FilterWorker.executeFilters(ds.allPrimitives(), filterMatcher);
168
169 boolean foundAtLeastOne = false;
170 System.err.println("Run #"+i);
171 StringBuilder failedPrimitives = new StringBuilder();
172 for (OsmPrimitive osm : ds.allPrimitives()) {
173 String key = "source:RESULT"+i; // use key that counts as untagged
174 if (osm.hasKey(key)) {
175 foundAtLeastOne = true;
176 if (!osm.get(key).equals(filterCode(osm))) {
177 failedPrimitives.append(String.format(
178 "Object %s. Expected [%s] but was [%s]%n", osm.toString(), osm.get(key), filterCode(osm)));
179 }
180 }
181 }
182 assertTrue(foundAtLeastOne);
183 if (failedPrimitives.length() != 0)
184 throw new AssertionError(String.format("Run #%d%n%s", i, failedPrimitives.toString()));
185 }
186 }
187
188 private String filterCode(OsmPrimitive osm) {
189 if (!osm.isDisabled())
190 return "v";
191 if (!osm.isDisabledAndHidden())
192 return "d";
193 return "h";
194 }
195}
Note: See TracBrowser for help on using the repository browser.