source: josm/trunk/test/unit/org/openstreetmap/josm/actions/CreateMultipolygonActionTest.java@ 12731

Last change on this file since 12731 was 12731, checked in by Don-vip, 7 years ago

see #13036 - execute commands in CreateMultipolygonActionTest when relation is reused. Does not fix one of the tests, don't know why

  • Property svn:eol-style set to native
File size: 4.5 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.junit.Assert.assertEquals;
5
6import java.io.FileInputStream;
7import java.util.Collection;
8import java.util.Map;
9import java.util.TreeMap;
10
11import org.junit.Rule;
12import org.junit.Test;
13import org.openstreetmap.josm.TestUtils;
14import org.openstreetmap.josm.command.SequenceCommand;
15import org.openstreetmap.josm.data.osm.DataSet;
16import org.openstreetmap.josm.data.osm.Relation;
17import org.openstreetmap.josm.data.osm.RelationMember;
18import org.openstreetmap.josm.data.osm.Way;
19import org.openstreetmap.josm.data.osm.search.SearchCompiler;
20import org.openstreetmap.josm.data.osm.search.SearchParseError;
21import org.openstreetmap.josm.data.osm.search.SearchSetting;
22import org.openstreetmap.josm.io.OsmReader;
23import org.openstreetmap.josm.testutils.JOSMTestRules;
24import org.openstreetmap.josm.tools.Pair;
25import org.openstreetmap.josm.tools.SubclassFilteredCollection;
26
27import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
28
29/**
30 * Unit test of {@link CreateMultipolygonAction}
31 */
32public class CreateMultipolygonActionTest {
33
34 /**
35 * Setup test.
36 */
37 @Rule
38 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
39 public JOSMTestRules test = new JOSMTestRules().projection();
40
41 private static Map<String, String> getRefToRoleMap(Relation relation) {
42 Map<String, String> refToRole = new TreeMap<>();
43 for (RelationMember i : relation.getMembers()) {
44 String ref = i.getMember().get("ref");
45 if (ref != null) {
46 refToRole.put(ref, i.getRole());
47 }
48 }
49 return refToRole;
50 }
51
52 private static SearchSetting regexpSearch(String search) {
53 SearchSetting setting = new SearchSetting();
54 setting.text = search;
55 setting.regexSearch = true;
56 return setting;
57 }
58
59 @SuppressWarnings("unchecked")
60 private static Pair<SequenceCommand, Relation> createMultipolygonCommand(Collection<Way> ways, String pattern, Relation r)
61 throws SearchParseError {
62 return CreateMultipolygonAction.createMultipolygonCommand(
63 (Collection<Way>) (Collection<?>) SubclassFilteredCollection.filter(ways, SearchCompiler.compile(regexpSearch(pattern))), r);
64 }
65
66 @Test
67 public void testCreate1() throws Exception {
68 DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
69 Pair<SequenceCommand, Relation> mp = CreateMultipolygonAction.createMultipolygonCommand(ds.getWays(), null);
70 assertEquals("Sequence: Create multipolygon", mp.a.getDescriptionText());
71 assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.1.2=outer, 1.2=inner}", getRefToRoleMap(mp.b).toString());
72 }
73
74 @Test
75 public void testCreate2() throws Exception {
76 DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
77 Pair<SequenceCommand, Relation> mp = createMultipolygonCommand(ds.getWays(), "ref=1 OR ref:1.1.", null);
78 assertEquals("{1=outer, 1.1.1=inner, 1.1.2=inner}", getRefToRoleMap(mp.b).toString());
79 }
80
81 @Test
82 public void testUpdate1() throws Exception {
83 DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
84 Pair<SequenceCommand, Relation> mp = createMultipolygonCommand(ds.getWays(), "ref=\".*1$\"", null);
85 mp.a.executeCommand();
86 assertEquals(3, mp.b.getMembersCount());
87 assertEquals("{1=outer, 1.1=inner, 1.1.1=outer}", getRefToRoleMap(mp.b).toString());
88 Pair<SequenceCommand, Relation> mp2 = createMultipolygonCommand(ds.getWays(), "ref=1.2", mp.b);
89 assertEquals(4, mp2.b.getMembersCount());
90 assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.2=inner}", getRefToRoleMap(mp2.b).toString());
91 }
92
93 @Test
94 public void testUpdate2() throws Exception {
95 DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
96 Pair<SequenceCommand, Relation> mp = createMultipolygonCommand(ds.getWays(), "ref=1 OR ref:1.1.1", null);
97 mp.a.executeCommand();
98 assertEquals("{1=outer, 1.1.1=inner}", getRefToRoleMap(mp.b).toString());
99 Pair<SequenceCommand, Relation> mp2 = createMultipolygonCommand(ds.getWays(), "ref=1.1 OR ref=1.2 OR ref=1.1.2", mp.b);
100 assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.1.2=outer, 1.2=inner}", getRefToRoleMap(mp2.b).toString());
101 }
102}
Note: See TracBrowser for help on using the repository browser.