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

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

Fix tests

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