Changeset 12464 in josm for trunk/test/unit/org
- Timestamp:
- 2017-07-10T23:12:16+02:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/test/unit/org/openstreetmap/josm/actions/search/SearchCompilerTest.java
r11978 r12464 8 8 import static org.junit.Assert.fail; 9 9 10 import java.lang.reflect.Field; 10 11 import java.nio.charset.StandardCharsets; 11 12 import java.nio.file.Files; 12 13 import java.nio.file.Paths; 14 import java.util.Arrays; 15 import java.util.Collection; 16 import java.util.Collections; 13 17 14 18 import org.junit.Rule; … … 31 35 import org.openstreetmap.josm.data.osm.Way; 32 36 import org.openstreetmap.josm.data.osm.WayData; 37 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset; 38 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType; 39 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets; 40 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetMenu; 41 import org.openstreetmap.josm.gui.tagging.presets.items.Key; 33 42 import org.openstreetmap.josm.testutils.JOSMTestRules; 34 43 import org.openstreetmap.josm.tools.date.DateUtils; … … 491 500 TestUtils.superficialEnumCodeCoverage(ExactKeyValue.Mode.class); 492 501 } 502 503 /** 504 * Robustness test for preset searching. Ensures that the query 'preset:' is not accepted. 505 * @throws ParseError always 506 * @since 12464 507 */ 508 @Test(expected = ParseError.class) 509 public void testPresetSearchMissingValue() throws ParseError { 510 SearchSetting settings = new SearchSetting(); 511 settings.text = "preset:"; 512 settings.mapCSSSearch = false; 513 514 TaggingPresets.readFromPreferences(); 515 516 SearchCompiler.compile(settings); 517 } 518 519 /** 520 * Robustness test for preset searching. Validates that it is not possible to search for 521 * non existing presets. 522 * @throws ParseError always 523 * @since 12464 524 */ 525 @Test(expected = ParseError.class) 526 public void testPresetNotExist() throws ParseError { 527 String testPresetName = "groupnamethatshouldnotexist/namethatshouldnotexist"; 528 SearchSetting settings = new SearchSetting(); 529 settings.text = "preset:" + testPresetName; 530 settings.mapCSSSearch = false; 531 532 // load presets 533 TaggingPresets.readFromPreferences(); 534 535 SearchCompiler.compile(settings); 536 } 537 538 /** 539 * Robustness tests for preset searching. Ensures that combined preset names (having more than 540 * 1 word) must be enclosed with " . 541 * @throws ParseError always 542 * @since 12464 543 */ 544 @Test(expected = ParseError.class) 545 public void testPresetMultipleWords() throws ParseError { 546 TaggingPreset testPreset = new TaggingPreset(); 547 testPreset.name = "Test Combined Preset Name"; 548 testPreset.group = new TaggingPresetMenu(); 549 testPreset.group.name = "TestGroupName"; 550 551 String combinedPresetname = testPreset.getRawName(); 552 SearchSetting settings = new SearchSetting(); 553 settings.text = "preset:" + combinedPresetname; 554 settings.mapCSSSearch = false; 555 556 // load presets 557 TaggingPresets.readFromPreferences(); 558 559 SearchCompiler.compile(settings); 560 } 561 562 563 /** 564 * Ensures that correct presets are stored in the {@link org.openstreetmap.josm.actions.search.SearchCompiler.Preset} 565 * class against which the osm primitives are tested. 566 * @throws ParseError if an error has been encountered while compiling 567 * @throws NoSuchFieldException if there is no field called 'presets' 568 * @throws IllegalAccessException if cannot access the field where all matching presets are stored 569 * @since 12464 570 */ 571 @Test 572 public void testPresetLookup() throws ParseError, NoSuchFieldException, IllegalAccessException { 573 TaggingPreset testPreset = new TaggingPreset(); 574 testPreset.name = "Test Preset Name"; 575 testPreset.group = new TaggingPresetMenu(); 576 testPreset.group.name = "Test Preset Group Name"; 577 578 String query = "preset:" + 579 "\"" + testPreset.getRawName() + "\""; 580 SearchSetting settings = new SearchSetting(); 581 settings.text = query; 582 settings.mapCSSSearch = false; 583 584 // load presets and add the test preset 585 TaggingPresets.readFromPreferences(); 586 TaggingPresets.addTaggingPresets(Collections.singletonList(testPreset)); 587 588 Match match = SearchCompiler.compile(settings); 589 590 // access the private field where all matching presets are stored 591 // and ensure that indeed the correct ones are there 592 Field field = match.getClass().getDeclaredField("presets"); 593 field.setAccessible(true); 594 Collection<TaggingPreset> foundPresets = (Collection<TaggingPreset>) field.get(match); 595 596 assertEquals(1, foundPresets.size()); 597 assertTrue(foundPresets.contains(testPreset)); 598 } 599 600 /** 601 * Ensures that the wildcard search works and that correct presets are stored in 602 * the {@link org.openstreetmap.josm.actions.search.SearchCompiler.Preset} class against which 603 * the osm primitives are tested. 604 * @throws ParseError if an error has been encountered while compiling 605 * @throws NoSuchFieldException if there is no field called 'presets' 606 * @throws IllegalAccessException if cannot access the field where all matching presets are stored 607 * @since 12464 608 */ 609 @Test 610 public void testPresetLookupWildcard() throws ParseError, NoSuchFieldException, IllegalAccessException { 611 TaggingPresetMenu group = new TaggingPresetMenu(); 612 group.name = "TestPresetGroup"; 613 614 TaggingPreset testPreset1 = new TaggingPreset(); 615 testPreset1.name = "TestPreset1"; 616 testPreset1.group = group; 617 618 TaggingPreset testPreset2 = new TaggingPreset(); 619 testPreset2.name = "TestPreset2"; 620 testPreset2.group = group; 621 622 TaggingPreset testPreset3 = new TaggingPreset(); 623 testPreset3.name = "TestPreset3"; 624 testPreset3.group = group; 625 626 String query = "preset:" + "\"" + group.getRawName() + "/*\""; 627 SearchSetting settings = new SearchSetting(); 628 settings.text = query; 629 settings.mapCSSSearch = false; 630 631 TaggingPresets.readFromPreferences(); 632 TaggingPresets.addTaggingPresets(Arrays.asList(testPreset1, testPreset2, testPreset3)); 633 634 Match match = SearchCompiler.compile(settings); 635 636 // access the private field where all matching presets are stored 637 // and ensure that indeed the correct ones are there 638 Field field = match.getClass().getDeclaredField("presets"); 639 field.setAccessible(true); 640 Collection<TaggingPreset> foundPresets = (Collection<TaggingPreset>) field.get(match); 641 642 assertEquals(3, foundPresets.size()); 643 assertTrue(foundPresets.contains(testPreset1)); 644 assertTrue(foundPresets.contains(testPreset2)); 645 assertTrue(foundPresets.contains(testPreset3)); 646 } 647 648 /** 649 * Ensures that correct primitives are matched against the specified preset. 650 * @throws ParseError if an error has been encountered while compiling 651 * @since 12464 652 */ 653 @Test 654 public void testPreset() throws ParseError { 655 final String presetName = "Test Preset Name"; 656 final String presetGroupName = "Test Preset Group"; 657 final String key = "test_key1"; 658 final String val = "test_val1"; 659 660 Key key1 = new Key(); 661 key1.key = key; 662 key1.value = val; 663 664 TaggingPreset testPreset = new TaggingPreset(); 665 testPreset.name = presetName; 666 testPreset.types = Collections.singleton(TaggingPresetType.NODE); 667 testPreset.data.add(key1); 668 testPreset.group = new TaggingPresetMenu(); 669 testPreset.group.name = presetGroupName; 670 671 TaggingPresets.readFromPreferences(); 672 TaggingPresets.addTaggingPresets(Collections.singleton(testPreset)); 673 674 String query = "preset:" + "\"" + testPreset.getRawName() + "\""; 675 676 SearchContext ctx = new SearchContext(query); 677 ctx.n1.put(key, val); 678 ctx.n2.put(key, val); 679 680 for (OsmPrimitive osm : new OsmPrimitive[] {ctx.n1, ctx.n2}) { 681 ctx.match(osm, true); 682 } 683 684 for (OsmPrimitive osm : new OsmPrimitive[] {ctx.r1, ctx.r2, ctx.w1, ctx.w2}) { 685 ctx.match(osm, false); 686 } 687 } 493 688 } 689
Note:
See TracChangeset
for help on using the changeset viewer.