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

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

see #8172 - fix JUnit tests

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