// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.dialogs.properties; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.junit.Rule; import org.junit.Test; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.OsmPrimitiveComparator; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.testutils.JOSMTestRules; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Unit tests of {@link PropertiesDialog} class. */ public class PropertiesDialogTest { /** * Setup tests */ @Rule @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") public JOSMTestRules test = new JOSMTestRules(); private static String createSearchSetting(DataSet ds, boolean sameType) { List<OsmPrimitive> sel = new ArrayList<>(ds.allPrimitives()); Collections.sort(sel, OsmPrimitiveComparator.comparingUniqueId()); return PropertiesDialog.createSearchSetting("foo", sel, sameType).text; } /** * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/12504">#12504</a>. */ @Test public void testTicket12504() { DataSet ds = new DataSet(); // 160 objects with foo=bar, 400 objects without foo for (int i = 0; i < 160+400; i++) { Node n = new Node(LatLon.ZERO); if (i < 160) { n.put("foo", "bar"); } ds.addPrimitive(n); } assertEquals("(\"foo\"=\"bar\")", createSearchSetting(ds, false)); Node n = new Node(LatLon.ZERO); n.put("foo", "baz"); ds.addPrimitive(n); assertEquals("(\"foo\"=\"baz\") OR (\"foo\"=\"bar\")", createSearchSetting(ds, false)); ds.removePrimitive(n); Way w = new Way(); w.put("foo", "bar"); ds.addPrimitive(w); assertEquals("(type:way \"foo\"=\"bar\") OR (type:node \"foo\"=\"bar\")", createSearchSetting(ds, true)); } }