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

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

convert unit tests from Groovy to Java

  • Property svn:eol-style set to native
File size: 4.4 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.actions.search.SearchAction.SearchSetting;
15import org.openstreetmap.josm.actions.search.SearchCompiler;
16import org.openstreetmap.josm.actions.search.SearchCompiler.ParseError;
17import org.openstreetmap.josm.command.SequenceCommand;
18import org.openstreetmap.josm.data.osm.DataSet;
19import org.openstreetmap.josm.data.osm.Relation;
20import org.openstreetmap.josm.data.osm.RelationMember;
21import org.openstreetmap.josm.data.osm.Way;
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 refToRole.put(i.getMember().get("ref"), i.getRole());
45 }
46 return refToRole;
47 }
48
49 private static SearchSetting regexpSearch(String search) {
50 SearchSetting setting = new SearchSetting();
51 setting.text = search;
52 setting.regexSearch = true;
53 return setting;
54 }
55
56 @SuppressWarnings("unchecked")
57 private static Pair<SequenceCommand, Relation> createMultipolygonCommand(Collection<Way> ways, String pattern, Relation r)
58 throws ParseError {
59 return CreateMultipolygonAction.createMultipolygonCommand(
60 (Collection<Way>) (Collection<?>) SubclassFilteredCollection.filter(ways, SearchCompiler.compile(regexpSearch(pattern))), r);
61 }
62
63 @Test
64 public void testCreate1() throws Exception {
65 DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
66 Pair<SequenceCommand, Relation> mp = CreateMultipolygonAction.createMultipolygonCommand(ds.getWays(), null);
67 assertEquals("Sequence: Create multipolygon", mp.a.getDescriptionText());
68 assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.1.2=outer, 1.2=inner}", getRefToRoleMap(mp.b).toString());
69 }
70
71 @Test
72 public void testCreate2() throws Exception {
73 DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
74 Pair<SequenceCommand, Relation> mp = createMultipolygonCommand(ds.getWays(), "ref=1 OR ref:1.1.", null);
75 assertEquals("{1=outer, 1.1.1=inner, 1.1.2=inner}", getRefToRoleMap(mp.b).toString());
76 }
77
78 @Test
79 public void testUpdate1() throws Exception {
80 DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
81 Pair<SequenceCommand, Relation> mp = createMultipolygonCommand(ds.getWays(), "ref=\".*1$\"", null);
82 assertEquals(3, mp.b.getMembersCount());
83 assertEquals("{1=outer, 1.1=inner, 1.1.1=outer}", getRefToRoleMap(mp.b).toString());
84 Pair<SequenceCommand, Relation> mp2 = createMultipolygonCommand(ds.getWays(), "ref=1.2", mp.b);
85 assertEquals(4, mp2.b.getMembersCount());
86 assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.2=inner}", getRefToRoleMap(mp2.b).toString());
87 }
88
89 @Test
90 public void testUpdate2() throws Exception {
91 DataSet ds = OsmReader.parseDataSet(new FileInputStream(TestUtils.getTestDataRoot() + "create_multipolygon.osm"), null);
92 Pair<SequenceCommand, Relation> mp = createMultipolygonCommand(ds.getWays(), "ref=1 OR ref:1.1.1", null);
93 assertEquals("{1=outer, 1.1.1=inner}", getRefToRoleMap(mp.b).toString());
94 Pair<SequenceCommand, Relation> mp2 = createMultipolygonCommand(ds.getWays(), "ref=1.1 OR ref=1.2 OR ref=1.1.2", mp.b);
95 assertEquals("{1=outer, 1.1=inner, 1.1.1=outer, 1.1.2=outer, 1.2=inner}", getRefToRoleMap(mp2.b).toString());
96 }
97}
Note: See TracBrowser for help on using the repository browser.