// 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); } }