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

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

checkstyle: enable relevant whitespace checks and fix them

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