Ticket #19197: 19197.2.patch

File 19197.2.patch, 6.0 KB (added by taylor.smock, 6 years ago)

Add tests (extends FunctionsTest.testPref, and abstracts the base code for testing preferences)

  • src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java

     
    2020import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
    2121import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon;
    2222import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
     23import org.openstreetmap.josm.data.preferences.NamedColorProperty;
    2324import org.openstreetmap.josm.gui.MainApplication;
    2425import org.openstreetmap.josm.gui.NavigatableComponent;
    2526import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     
    3940import org.openstreetmap.josm.spi.preferences.Config;
    4041import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
    4142import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
     43import org.openstreetmap.josm.tools.ColorHelper;
    4244import org.openstreetmap.josm.tools.Pair;
    4345
    4446/**
     
    603605     * as frequent preference lookup (using <code>Config.getPref().get()</code>) for
    604606     * each primitive can be slow during rendering.
    605607     *
     608     * @param source style source
    606609     * @param key preference key
    607610     * @param def default value
    608611     * @return the corresponding preference value
    609612     * @see org.openstreetmap.josm.data.Preferences#get(String, String)
    610613     */
    611     public String getPreferenceCached(String key, String def) {
     614    public String getPreferenceCached(StyleSource source, String key, String def) {
    612615        String res;
    613616        if (preferenceCache.containsKey(key)) {
    614617            res = preferenceCache.get(key);
    615618        } else {
    616             res = Config.getPref().get(key, null);
     619            Object realDef = Cascade.convertTo(def, Color.class);
     620            if (realDef instanceof Color) {
     621                String prefName = source != null ? source.getFileNamePart() : "unknown";
     622                res = ColorHelper.color2html(new NamedColorProperty(NamedColorProperty.COLOR_CATEGORY_MAPPAINT, prefName, key, (Color) realDef).get());
     623            } else {
     624                res = Config.getPref().get(key, null);
     625            }
    617626            preferenceCache.put(key, res);
    618627        }
    619628        return res != null ? res : def;
  • src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java

     
    773773     * @return value for key, or default value if not found
    774774     */
    775775    public static String JOSM_pref(Environment env, String key, String def) { // NO_UCD (unused code)
    776         return MapPaintStyles.getStyles().getPreferenceCached(key, def);
     776        return MapPaintStyles.getStyles().getPreferenceCached(env != null ? env.source : null, key, def);
    777777    }
    778778
    779779    /**
  • test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/FunctionsTest.java

     
    55import static org.junit.Assert.assertTrue;
    66import static org.openstreetmap.josm.data.osm.OsmPrimitiveType.NODE;
    77
     8import java.util.Collections;
     9import java.util.function.BiConsumer;
     10
    811import org.junit.Rule;
    912import org.junit.Test;
    1013import org.openstreetmap.josm.TestUtils;
     
    1114import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1215import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    1316import org.openstreetmap.josm.data.osm.User;
     17import org.openstreetmap.josm.data.preferences.NamedColorProperty;
    1418import org.openstreetmap.josm.gui.mappaint.Environment;
    1519import org.openstreetmap.josm.gui.util.GuiHelper;
    1620import org.openstreetmap.josm.spi.preferences.Config;
     
    111115     */
    112116    @Test
    113117    public void testPref() {
     118        testPrefKey("", "foobar", "baz", (key, def) -> Config.getPref().put(key, def));
     119        testPrefKey(NamedColorProperty.NAMED_COLOR_PREFIX + NamedColorProperty.COLOR_CATEGORY_MAPPAINT + ".unknown.", "#000000", "#00FF00",
     120                (key, def) -> {
     121                    if (def != null) {
     122                        Config.getPref().putList(key, Collections.singletonList(def));
     123                    } else {
     124                        Config.getPref().put(key, def);
     125                    }
     126                });
     127    }
     128
     129    /**
     130     * Test a preference key
     131     * @param prefix A prefix, if necessary. Some objects (color specifically) will add a prefix.
     132     * @param def The default value
     133     * @param toSet The value to set and test against
     134     * @param setPref A biconsumer to set the key and pref values
     135     */
     136    private void testPrefKey(String prefix, String def, String toSet, BiConsumer<String, String> setPref) {
    114137        String key = "Functions.JOSM_pref";
    115         assertEquals("foobar", Functions.JOSM_pref(null, key, "foobar"));
    116         Config.getPref().put(key, "baz");
     138        setPref.accept(prefix + key, null);
     139        assertEquals(def, Functions.JOSM_pref(null, key, def));
     140        setPref.accept(prefix + key, toSet);
    117141        GuiHelper.runInEDTAndWait(() -> {
    118142            // await org.openstreetmap.josm.gui.mappaint.ElemStyles.clearCached
    119143        });
    120         assertEquals("baz", Functions.JOSM_pref(null, key, "foobar"));
    121         Config.getPref().put(key, null);
     144        assertEquals(toSet, Functions.JOSM_pref(null, key, def));
     145        setPref.accept(prefix + key, null);
    122146        GuiHelper.runInEDTAndWait(() -> {
    123147            // await org.openstreetmap.josm.gui.mappaint.ElemStyles.clearCached
    124148        });
    125         assertEquals("foobar", Functions.JOSM_pref(null, key, "foobar"));
     149        assertEquals(def, Functions.JOSM_pref(null, key, def));
     150        setPref.accept(prefix + key, null);
    126151    }
    127152}