Index: trunk/test/unit/org/openstreetmap/josm/data/preferences/StrokePropertyTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/preferences/StrokePropertyTest.java	(revision 10874)
+++ trunk/test/unit/org/openstreetmap/josm/data/preferences/StrokePropertyTest.java	(revision 10874)
@@ -0,0 +1,108 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.preferences;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import java.awt.BasicStroke;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Test {@link StrokeProperty}
+ * @author Michael Zangl
+ */
+public class StrokePropertyTest {
+    /**
+     * This is a preference test
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().preferences();
+
+    /**
+     * Test {@link StrokeProperty#get()}
+     */
+    @Test
+    public void testGetValue() {
+        StrokeProperty property = new StrokeProperty("x", "1");
+
+        Main.pref.put("x", "11");
+        BasicStroke bs = property.get();
+        assertWide(bs);
+        assertEquals(11, bs.getLineWidth(), 1e-10);
+        assertEquals(null, bs.getDashArray());
+
+        Main.pref.put("x", ".5");
+        bs = property.get();
+        assertThin(bs);
+        assertEquals(.5, bs.getLineWidth(), 1e-10);
+        assertEquals(null, bs.getDashArray());
+
+        Main.pref.put("x", "2 1");
+        bs = property.get();
+        assertWide(bs);
+        assertEquals(2, bs.getLineWidth(), 1e-10);
+        assertArrayEquals(new float[] {1}, bs.getDashArray(), 1e-10f);
+
+        Main.pref.put("x", "2 0.1 1 10");
+        bs = property.get();
+        assertWide(bs);
+        assertEquals(2, bs.getLineWidth(), 1e-10);
+        assertArrayEquals(new float[] {0.1f, 1, 10}, bs.getDashArray(), 1e-10f);
+
+        Main.pref.put("x", "x");
+        bs = property.get();
+        assertThin(bs);
+        assertEquals(1, bs.getLineWidth(), 1e-10);
+        assertEquals(null, bs.getDashArray());
+
+        // ignore dashes
+        Main.pref.put("x", "11 0 0 0.0001");
+        bs = property.get();
+        assertWide(bs);
+        assertEquals(11, bs.getLineWidth(), 1e-10);
+        assertEquals(null, bs.getDashArray());
+    }
+
+    /**
+     * Test {@link StrokeProperty#put(BasicStroke)}
+     */
+    @Test
+    public void testPutValue() {
+        StrokeProperty property = new StrokeProperty("x", new BasicStroke(12));
+        BasicStroke bs = property.get();
+
+        assertWide(bs);
+        assertEquals(12, bs.getLineWidth(), 1e-10);
+        assertEquals(null, bs.getDashArray());
+
+        property.put(new BasicStroke(2, 0, 0, 1, new float[] {0.1f, 1, 10}, 0));
+        bs = property.get();
+        assertWide(bs);
+        assertEquals(2, bs.getLineWidth(), 1e-10);
+        assertArrayEquals(new float[] {0.1f, 1, 10}, bs.getDashArray(), 1e-10f);
+    }
+
+    private static void assertThin(BasicStroke bs) {
+        assertBase(bs);
+        assertEquals(BasicStroke.CAP_BUTT, bs.getEndCap());
+        assertEquals(BasicStroke.JOIN_MITER, bs.getLineJoin());
+    }
+
+    private static void assertWide(BasicStroke bs) {
+        assertBase(bs);
+        assertEquals(BasicStroke.CAP_ROUND, bs.getEndCap());
+        assertEquals(BasicStroke.JOIN_ROUND, bs.getLineJoin());
+    }
+
+    private static void assertBase(BasicStroke bs) {
+        assertEquals(10, bs.getMiterLimit(), 1e-10);
+        assertEquals(0, bs.getDashPhase(), 1e-10);
+    }
+}
