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

Last change on this file since 3459 was 3459, checked in by jttt, 14 years ago

Fix tests

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