Index: trunk/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java	(revision 3362)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java	(revision 3367)
@@ -2,7 +2,9 @@
 package org.openstreetmap.josm.data.osm;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-
 import java.util.Arrays;
 import java.util.Collection;
@@ -11,10 +13,6 @@
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import org.junit.BeforeClass;
 import org.junit.Test;
-
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.search.SearchAction.SearchMode;
@@ -31,5 +29,5 @@
         Main.proj = new Mercator();
     }
-    
+
     @Test
     public void basic_test() throws ParseError {
@@ -40,4 +38,5 @@
         n2.put("fixme", "continue");
         ds.addPrimitive(n1);
+        ds.addPrimitive(n2);
         OsmPrimitive p = ds.getPrimitiveById(1,OsmPrimitiveType.NODE);
         assertNotNull(p);
@@ -63,83 +62,95 @@
     @Test
     public void filter_test() throws ParseError, IllegalDataException, FileNotFoundException {
-        for (int i : new int [] {1,2,3, 11,12,13,14}) {
+        for (int i : new int [] {1,2,3, 11,12,13,14, 15}) {
             DataSet ds = OsmReader.parseDataSet(new FileInputStream("data_nodist/filterTests.osm"), NullProgressMonitor.INSTANCE);
 
             List<Filter> filters = new LinkedList<Filter>();
             switch (i) {
-                case 1: {
-                    Filter f1 = new Filter();
-                    f1.text = "power";
-                    f1.hiding = true;
-                    filters.add(f1);
-                    break;
-                }
-                case 2: {
-                    Filter f1 = new Filter();
-                    f1.text = "highway";
-                    f1.inverted = true;
-                    filters.add(f1);
-                    break;
-                }
-                case 3: {
-                    Filter f1 = new Filter();
-                    f1.text = "power";
-                    f1.inverted = true;
-                    f1.hiding = true;
-                    Filter f2 = new Filter();
-                    f2.text = "highway";
-                    filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
-                    break;
-                }
-                case 11: {
-                    Filter f1 = new Filter();
-                    f1.text = "highway";
-                    f1.inverted = true;
-                    f1.hiding = true;
-                    filters.add(f1);
-                    break;
-                }
-                case 12: {
-                    Filter f1 = new Filter();
-                    f1.text = "highway";
-                    f1.inverted = true;
-                    f1.hiding = true;
-                    Filter f2 = new Filter();
-                    f2.text = "water";
-                    f2.mode = SearchMode.remove;
-                    filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
-                    break;
-                }
-                case 13: {
-                    Filter f1 = new Filter();
-                    f1.text = "highway";
-                    f1.inverted = true;
-                    f1.hiding = true;
-                    Filter f2 = new Filter();
-                    f2.text = "water";
-                    f2.mode = SearchMode.remove;
-                    Filter f3 = new Filter();
-                    f3.text = "natural";
-                    filters.addAll(Arrays.asList(new Filter[] {f1, f2, f3}));
-                    break;
-                }
-                case 14: {
-                    /* show all highways and all water features, but not lakes
-                     * except those that have a name */
-                    Filter f1 = new Filter();
-                    f1.text = "highway";
-                    f1.inverted = true;
-                    f1.hiding = true;
-                    Filter f2 = new Filter();
-                    f2.text = "water";
-                    f2.mode = SearchMode.remove;
-                    Filter f3 = new Filter();
-                    f3.text = "natural";
-                    Filter f4 = new Filter();
-                    f4.text = "name";
-                    f4.mode = SearchMode.remove;
-                    filters.addAll(Arrays.asList(new Filter[] {f1, f2, f3, f4}));
-                    break;
-                }
+            case 1: {
+                Filter f1 = new Filter();
+                f1.text = "power";
+                f1.hiding = true;
+                filters.add(f1);
+                break;
+            }
+            case 2: {
+                Filter f1 = new Filter();
+                f1.text = "highway";
+                f1.inverted = true;
+                filters.add(f1);
+                break;
+            }
+            case 3: {
+                Filter f1 = new Filter();
+                f1.text = "power";
+                f1.inverted = true;
+                f1.hiding = true;
+                Filter f2 = new Filter();
+                f2.text = "highway";
+                filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
+                break;
+            }
+            case 11: {
+                Filter f1 = new Filter();
+                f1.text = "highway";
+                f1.inverted = true;
+                f1.hiding = true;
+                filters.add(f1);
+                break;
+            }
+            case 12: {
+                Filter f1 = new Filter();
+                f1.text = "highway";
+                f1.inverted = true;
+                f1.hiding = true;
+                Filter f2 = new Filter();
+                f2.text = "water";
+                f2.mode = SearchMode.remove;
+                filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
+                break;
+            }
+            case 13: {
+                Filter f1 = new Filter();
+                f1.text = "highway";
+                f1.inverted = true;
+                f1.hiding = true;
+                Filter f2 = new Filter();
+                f2.text = "water";
+                f2.mode = SearchMode.remove;
+                Filter f3 = new Filter();
+                f3.text = "natural";
+                filters.addAll(Arrays.asList(new Filter[] {f1, f2, f3}));
+                break;
+            }
+            case 14: {
+                /* show all highways and all water features, but not lakes
+                 * except those that have a name */
+                Filter f1 = new Filter();
+                f1.text = "highway";
+                f1.inverted = true;
+                f1.hiding = true;
+                Filter f2 = new Filter();
+                f2.text = "water";
+                f2.mode = SearchMode.remove;
+                Filter f3 = new Filter();
+                f3.text = "natural";
+                Filter f4 = new Filter();
+                f4.text = "name";
+                f4.mode = SearchMode.remove;
+                filters.addAll(Arrays.asList(new Filter[] {f1, f2, f3, f4}));
+                break;
+            }
+            case 15: {
+                Filter f1 = new Filter();
+                f1.text = "highway";
+                f1.inverted = true;
+                f1.hiding = true;
+                Filter f2 = new Filter();
+                f2.text = "water";
+                f2.mode = SearchMode.remove;
+                f2.hiding = true; // Remove only hide flag so water should stay disabled
+                filters.addAll(Arrays.asList(new Filter[] {f1, f2}));
+                break;
+            }
             }
 
@@ -151,13 +162,17 @@
             boolean foundAtLeastOne = false;
             System.err.println("Run #"+i);
+            StringBuilder failedPrimitives = new StringBuilder();
             for (OsmPrimitive osm : ds.allPrimitives()) {
                 String key = "source:RESULT"+i; // use key that counts as untagged
                 if (osm.hasKey(key)) {
                     foundAtLeastOne = true;
-//                    System.err.println("osm "+osm.getId()+" "+filterCode(osm)+" "+osm.get(key));
-                    assertEquals(String.format("Run #%d Object %s", i,osm.toString()), filterCode(osm), osm.get(key));
+                    if (!osm.get(key).equals(filterCode(osm))) {
+                        failedPrimitives.append(String.format("Object %s. Expected [%s] but was [%s]\n", osm.toString(), osm.get(key), filterCode(osm)));
+                    }
                 }
             }
             assertTrue(foundAtLeastOne);
+            if (failedPrimitives.length() != 0)
+                throw new AssertionError(String.format("Run #%d\n%s", i, failedPrimitives.toString()));
         }
     }
