Index: trunk/test/unit/org/openstreetmap/josm/gui/autofilter/AutoFilterManagerTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/autofilter/AutoFilterManagerTest.java	(revision 15838)
+++ 	(revision )
@@ -1,75 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.autofilter;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.Arrays;
-import java.util.OptionalInt;
-import java.util.TreeSet;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.openstreetmap.josm.data.osm.OsmUtils;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
-/**
- * Unit tests of {@link AutoFilterManager} class.
- */
-public class AutoFilterManagerTest {
-
-    /**
-     * Setup tests
-     */
-    @Rule
-    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules();
-
-    /**
-     * Unit test of {@link AutoFilterManager#getTagValuesForPrimitive}.
-     */
-    @Test
-    public void testTagValuesForPrimitive() {
-        AutoFilterManager.getInstance().setCurrentAutoFilter(null);
-        final TreeSet<Integer> values = Stream.of(
-                OsmUtils.createPrimitive("way level=-4--5"),
-                OsmUtils.createPrimitive("way level=-2"),
-                OsmUtils.createPrimitive("node level=0"),
-                OsmUtils.createPrimitive("way level=1"),
-                OsmUtils.createPrimitive("way level=2;3"),
-                OsmUtils.createPrimitive("way level=6-9"),
-                OsmUtils.createPrimitive("way level=10;12-13"))
-                .flatMapToInt(o -> AutoFilterManager.getInstance().getTagValuesForPrimitive("level", o))
-                .boxed()
-                .collect(Collectors.toCollection(TreeSet::new));
-        assertEquals(new TreeSet<>(Arrays.asList(-5, -4, -2, 0, 1, 2, 3, 6, 7, 8, 9, 10, 12, 13)), values);
-
-    }
-
-    /**
-     * Unit test of {@link AutoFilterManager#getTagValuesForPrimitive} provides sensible defaults, see #17496.
-     */
-    @Test
-    public void testTagValuesForPrimitivesDefaults() {
-        AutoFilterManager.getInstance().setCurrentAutoFilter(null);
-        assertEquals(OptionalInt.empty(), getLayer("way foo=bar"));
-        AutoFilterRule.getDefaultRule("layer").ifPresent(AutoFilterManager.getInstance()::enableAutoFilterRule);
-        assertEquals(OptionalInt.empty(), getLayer("way foo=bar"));
-        assertEquals(OptionalInt.of(1), getLayer("way bridge=yes"));
-        assertEquals(OptionalInt.of(1), getLayer("way power=line"));
-        assertEquals(OptionalInt.of(-1), getLayer("way tunnel=yes"));
-        assertEquals(OptionalInt.of(0), getLayer("way tunnel=building_passage"));
-        assertEquals(OptionalInt.of(0), getLayer("way highway=residential"));
-        assertEquals(OptionalInt.of(0), getLayer("way railway=rail"));
-        assertEquals(OptionalInt.of(0), getLayer("way waterway=canal"));
-    }
-
-    private OptionalInt getLayer(final String assertion) {
-        return AutoFilterManager.getInstance()
-                .getTagValuesForPrimitive("layer", OsmUtils.createPrimitive(assertion))
-                .findFirst();
-    }
-}
Index: trunk/test/unit/org/openstreetmap/josm/gui/autofilter/AutoFilterRuleTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/autofilter/AutoFilterRuleTest.java	(revision 15839)
+++ trunk/test/unit/org/openstreetmap/josm/gui/autofilter/AutoFilterRuleTest.java	(revision 15839)
@@ -0,0 +1,88 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.autofilter;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import java.util.NoSuchElementException;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmUtils;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Unit tests of {@link AutoFilterRule} class.
+ */
+public class AutoFilterRuleTest {
+
+    /**
+     * Setup tests
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
+
+    /**
+     * Unit test of {@link AutoFilterRule#getTagValuesForPrimitive}.
+     */
+    @Test
+    public void testTagValuesForPrimitive() {
+        final AutoFilterRule level = AutoFilterRule.getDefaultRule("level").orElseThrow(NoSuchElementException::new);
+        assertTagValuesForPrimitive(level, "way level=-4--5", -5, -4);
+        assertTagValuesForPrimitive(level, "way level=-2", -2);
+        assertTagValuesForPrimitive(level, "node level=0", 0);
+        assertTagValuesForPrimitive(level, "way level=1", 1);
+        assertTagValuesForPrimitive(level, "way level=2;3", 2, 3);
+        assertTagValuesForPrimitive(level, "way level=6-9", 6, 7, 8, 9);
+        assertTagValuesForPrimitive(level, "way level=10;12-13", 10, 12, 13);
+    }
+
+    /**
+     * Unit test of {@link AutoFilterRule#getTagValuesForPrimitive} to deal with {@code %} of key {@code incline}.
+     */
+    @Test
+    public void testTagValuesForPrimitiveInclineUnit() {
+        final AutoFilterRule incline = AutoFilterRule.getDefaultRule("incline").orElseThrow(NoSuchElementException::new);
+        assertTagValuesForPrimitive(incline, "way incline=up");
+        assertTagValuesForPrimitive(incline, "way incline=20", 20);
+        assertTagValuesForPrimitive(incline, "way incline=20%", 20);
+    }
+
+    /**
+     * Unit test of {@link AutoFilterRule#getTagValuesForPrimitive} provides sensible defaults, see #17496.
+     */
+    @Test
+    public void testTagValuesForPrimitivesDefaults() {
+        final AutoFilterRule layer = AutoFilterRule.getDefaultRule("layer").orElseThrow(NoSuchElementException::new);
+        assertTagValuesForPrimitive(layer, "way foo=bar");
+        assertTagValuesForPrimitive(layer, "way bridge=yes", 1);
+        assertTagValuesForPrimitive(layer, "way power=line", 1);
+        assertTagValuesForPrimitive(layer, "way tunnel=yes", -1);
+        assertTagValuesForPrimitive(layer, "way tunnel=building_passage", 0);
+        assertTagValuesForPrimitive(layer, "way highway=residential", 0);
+        assertTagValuesForPrimitive(layer, "way railway=rail", 0);
+        assertTagValuesForPrimitive(layer, "way waterway=canal", 0);
+    }
+
+    private void assertTagValuesForPrimitive(AutoFilterRule rule, String assertion, int... expected) {
+        final OsmPrimitive primitive = OsmUtils.createPrimitive(assertion);
+        final int[] actual = rule.getTagValuesForPrimitive(primitive).toArray();
+        assertArrayEquals(expected, actual);
+    }
+
+    /**
+     * Unit test of {@link AutoFilterRule#formatValue}
+     */
+    @Test
+    public void testValueFormatter() {
+        final AutoFilterRule voltage = AutoFilterRule.getDefaultRule("voltage").orElseThrow(NoSuchElementException::new);
+        assertEquals("230V", voltage.formatValue(230));
+        assertEquals("1kV", voltage.formatValue(1000));
+        assertEquals("15kV", voltage.formatValue(15000));
+        assertEquals("380kV", voltage.formatValue(380000));
+    }
+}
