Ticket #13033: patch-test-JoinAreasActionTest.patch
| File patch-test-JoinAreasActionTest.patch, 11.0 KB (added by , 9 years ago) |
|---|
-
src/org/openstreetmap/josm/actions/JoinAreasAction.java
diff --git a/src/org/openstreetmap/josm/actions/JoinAreasAction.java b/src/org/openstreetmap/josm/actions/JoinAreasAction.java index f1b45b8..f9697b9 100644
a b public class JoinAreasAction extends JosmAction { 499 499 } 500 500 if (ds != null) { 501 501 ds.setSelected(allWays); 502 Main.map.mapView.repaint();503 502 } 504 503 } else { 505 504 new Notification( -
src/org/openstreetmap/josm/actions/search/SearchAction.java
diff --git a/src/org/openstreetmap/josm/actions/search/SearchAction.java b/src/org/openstreetmap/josm/actions/search/SearchAction.java index 6d4eed1..59a9d47 100644
a b public class SearchAction extends JosmAction implements ParameterizedAction { 529 529 } 530 530 531 531 static void search(SearchSetting s) { 532 SearchTask.newSearchTask(s).run(); 532 SearchTask.newSearchTask(s, new SelectSearchReceiver()).run(); 533 } 534 535 /** 536 * Performs the search specified by the search string {@code search} and the search mode {@code mode} and returns the result of the search. 537 * 538 * @param search the search string to use 539 * @param mode the search mode to use 540 * @return The result of the search. 541 */ 542 public static Collection<OsmPrimitive> searchAndReturn(String search, SearchMode mode) { 543 final SearchSetting searchSetting = new SearchSetting(); 544 searchSetting.text = search; 545 searchSetting.mode = mode; 546 CapturingSearchReceiver receiver = new CapturingSearchReceiver(); 547 SearchTask.newSearchTask(searchSetting, receiver).run(); 548 return receiver.result; 549 } 550 551 /** 552 * Interfaces implementing this may receive the result of the current search. 553 * @author Michael Zangl 554 * @since xxx 555 */ 556 interface SearchReceiver { 557 /** 558 * Receive the search result 559 * @param ds The data set searched on. 560 * @param result The result collection, including the initial collection. 561 * @param foundMatches The number of matches added to the result. 562 * @param setting The setting used. 563 */ 564 public void receiveSearchResult(DataSet ds, Collection<OsmPrimitive> result, int foundMatches, SearchSetting setting); 565 } 566 567 /** 568 * Select the search result and display a status text for it. 569 * @since xxx 570 */ 571 private static class SelectSearchReceiver implements SearchReceiver { 572 573 @Override 574 public void receiveSearchResult(DataSet ds, Collection<OsmPrimitive> result, int foundMatches, SearchSetting setting) { 575 ds.setSelected(result); 576 if (foundMatches == 0) { 577 final String msg; 578 final String text = Utils.shortenString(setting.text, MAX_LENGTH_SEARCH_EXPRESSION_DISPLAY); 579 if (setting.mode == SearchMode.replace) { 580 msg = tr("No match found for ''{0}''", text); 581 } else if (setting.mode == SearchMode.add) { 582 msg = tr("Nothing added to selection by searching for ''{0}''", text); 583 } else if (setting.mode == SearchMode.remove) { 584 msg = tr("Nothing removed from selection by searching for ''{0}''", text); 585 } else if (setting.mode == SearchMode.in_selection) { 586 msg = tr("Nothing found in selection by searching for ''{0}''", text); 587 } else { 588 msg = null; 589 } 590 Main.map.statusLine.setHelpText(msg); 591 JOptionPane.showMessageDialog( 592 Main.parent, 593 msg, 594 tr("Warning"), 595 JOptionPane.WARNING_MESSAGE 596 ); 597 } else { 598 Main.map.statusLine.setHelpText(tr("Found {0} matches", foundMatches)); 599 } 600 } 601 } 602 603 /** 604 * This class stores the result of the search in a local variable. 605 * @author Michael Zangl 606 * @since xxx 607 */ 608 private static final class CapturingSearchReceiver implements SearchReceiver { 609 private Collection<OsmPrimitive> result; 610 611 @Override 612 public void receiveSearchResult(DataSet ds, Collection<OsmPrimitive> result, int foundMatches, 613 SearchSetting setting) { 614 this.result = result; 615 } 533 616 } 534 617 535 618 static final class SearchTask extends PleaseWaitRunnable { … … public class SearchAction extends JosmAction implements ParameterizedAction { 539 622 private final Predicate<OsmPrimitive> predicate; 540 623 private boolean canceled; 541 624 private int foundMatches; 625 private SearchReceiver resultReceiver; 542 626 543 private SearchTask(DataSet ds, SearchSetting setting, Collection<OsmPrimitive> selection, Predicate<OsmPrimitive> predicate) { 627 private SearchTask(DataSet ds, SearchSetting setting, Collection<OsmPrimitive> selection, Predicate<OsmPrimitive> predicate, 628 SearchReceiver resultReceiver) { 544 629 super(tr("Searching")); 545 630 this.ds = ds; 546 631 this.setting = setting; 547 632 this.selection = selection; 548 633 this.predicate = predicate; 634 this.resultReceiver = resultReceiver; 549 635 } 550 636 551 static SearchTask newSearchTask(SearchSetting setting ) {637 static SearchTask newSearchTask(SearchSetting setting, SearchReceiver resultReceiver) { 552 638 final DataSet ds = Main.getLayerManager().getEditDataSet(); 639 return newSearchTask(setting, ds, resultReceiver); 640 } 641 642 /** 643 * Create a new search task for the given search setting. 644 * @param setting The setting to use 645 * @param ds The data set to search on 646 * @return A new search task. 647 */ 648 private static SearchTask newSearchTask(SearchSetting setting, final DataSet ds, SearchReceiver resultReceiver) { 553 649 final Collection<OsmPrimitive> selection = new HashSet<>(ds.getAllSelected()); 554 650 return new SearchTask(ds, setting, selection, new Predicate<OsmPrimitive>() { 555 651 @Override 556 652 public boolean evaluate(OsmPrimitive o) { 557 653 return ds.isSelected(o); 558 654 } 559 } );655 }, resultReceiver); 560 656 } 561 657 562 658 @Override … … public class SearchAction extends JosmAction implements ParameterizedAction { 613 709 e.getMessage(), 614 710 tr("Error"), 615 711 JOptionPane.ERROR_MESSAGE 616 617 712 ); 618 713 } 619 714 } … … public class SearchAction extends JosmAction implements ParameterizedAction { 623 718 if (canceled) { 624 719 return; 625 720 } 626 ds.setSelected(selection); 627 if (foundMatches == 0) { 628 final String msg; 629 final String text = Utils.shortenString(setting.text, MAX_LENGTH_SEARCH_EXPRESSION_DISPLAY); 630 if (setting.mode == SearchMode.replace) { 631 msg = tr("No match found for ''{0}''", text); 632 } else if (setting.mode == SearchMode.add) { 633 msg = tr("Nothing added to selection by searching for ''{0}''", text); 634 } else if (setting.mode == SearchMode.remove) { 635 msg = tr("Nothing removed from selection by searching for ''{0}''", text); 636 } else if (setting.mode == SearchMode.in_selection) { 637 msg = tr("Nothing found in selection by searching for ''{0}''", text); 638 } else { 639 msg = null; 640 } 641 Main.map.statusLine.setHelpText(msg); 642 JOptionPane.showMessageDialog( 643 Main.parent, 644 msg, 645 tr("Warning"), 646 JOptionPane.WARNING_MESSAGE 647 ); 648 } else { 649 Main.map.statusLine.setHelpText(tr("Found {0} matches", foundMatches)); 650 } 721 resultReceiver.receiveSearchResult(ds, selection, foundMatches, setting); 651 722 } 652 723 } 653 724 -
test/unit/org/openstreetmap/josm/actions/JoinAreasActionTest.java
diff --git a/test/unit/org/openstreetmap/josm/actions/JoinAreasActionTest.java b/test/unit/org/openstreetmap/josm/actions/JoinAreasActionTest.java index 32ffc60..231f693 100644
a b import static org.junit.Assert.assertEquals; 5 5 6 6 import java.io.IOException; 7 7 import java.io.InputStream; 8 import java.util.Collection; 8 9 9 10 import org.junit.BeforeClass; 10 11 import org.junit.Test; … … import org.openstreetmap.josm.Main; 13 14 import org.openstreetmap.josm.TestUtils; 14 15 import org.openstreetmap.josm.actions.search.SearchAction; 15 16 import org.openstreetmap.josm.data.osm.DataSet; 17 import org.openstreetmap.josm.data.osm.OsmPrimitive; 18 import org.openstreetmap.josm.data.osm.Way; 16 19 import org.openstreetmap.josm.gui.layer.Layer; 17 20 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 18 21 import org.openstreetmap.josm.io.IllegalDataException; 19 22 import org.openstreetmap.josm.io.OsmReader; 23 import org.openstreetmap.josm.tools.Utils; 20 24 21 25 /** 22 26 * Unit tests of {@link JoinAreasAction} class. … … public class JoinAreasActionTest { 64 68 assertEquals(10, ds.getWays().size()); 65 69 Layer layer = new OsmDataLayer(ds, null, null); 66 70 Main.getLayerManager().addLayer(layer); 67 try { 68 for (String ref : new String[]{"A", "B", "C", "D", "E"}) { 69 System.out.print("Joining ways " + ref); 70 SearchAction.search("type:way ref="+ref, SearchAction.SearchMode.replace); 71 assertEquals(2, ds.getSelectedWays().size()); 72 Main.main.menu.joinAreas.join(ds.getSelectedWays()); 73 assertEquals(1, ds.getSelectedWays().size()); 74 System.out.println(" ==> OK"); 75 } 76 } finally { 77 // Ensure we clean the place before leaving, even if test fails. 78 Main.getLayerManager().removeLayer(layer); 71 for (String ref : new String[]{"A", "B", "C", "D", "E"}) { 72 System.out.print("Joining ways " + ref); 73 Collection<OsmPrimitive> found = SearchAction.searchAndReturn("type:way ref="+ref, SearchAction.SearchMode.replace); 74 assertEquals(2, found.size()); 75 76 Main.main.menu.joinAreas.join(Utils.filteredCollection(found, Way.class)); 77 78 Collection<OsmPrimitive> found2 = SearchAction.searchAndReturn("type:way ref="+ref, SearchAction.SearchMode.replace); 79 assertEquals(1, found2.size()); 80 System.out.println(" ==> OK"); 79 81 } 80 82 } 81 83 }
