source: josm/trunk/test/unit/org/openstreetmap/josm/io/OsmChangeBuilderTest.java@ 17275

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

see #16567 - upgrade almost all tests to JUnit 5, except those depending on WiremockRule

See https://github.com/tomakehurst/wiremock/issues/684

  • Property svn:eol-style set to native
File size: 5.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5import static org.junit.jupiter.api.Assertions.fail;
6
7import java.util.Arrays;
8
9import org.junit.jupiter.api.extension.RegisterExtension;
10import org.junit.jupiter.api.Test;
11import org.openstreetmap.josm.data.coor.LatLon;
12import org.openstreetmap.josm.data.osm.Changeset;
13import org.openstreetmap.josm.data.osm.Node;
14import org.openstreetmap.josm.testutils.JOSMTestRules;
15import org.openstreetmap.josm.tools.Logging;
16
17import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
18
19/**
20 * Unit tests of {@link OsmChangeBuilder}
21 */
22class OsmChangeBuilderTest {
23
24 /**
25 * Setup rule
26 */
27 @RegisterExtension
28 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
29 public JOSMTestRules test = new JOSMTestRules();
30
31 private static void shouldFail(Runnable r) {
32 try {
33 r.run();
34 fail("should throw exception");
35 } catch (IllegalStateException e) {
36 Logging.trace(e);
37 }
38 }
39
40 /**
41 * Test various constructor invocations
42 */
43 @Test
44 void testConstructor() {
45 Changeset cs = new Changeset(1);
46 // should not fail
47 new OsmChangeBuilder(cs);
48 new OsmChangeBuilder(null);
49 new OsmChangeBuilder(cs, "0.5");
50 new OsmChangeBuilder(cs, null);
51 new OsmChangeBuilder(null, null);
52 }
53
54 /**
55 * Test the sequence of method calls. Should throw IllegalStateException if
56 * the protocol start(),append()*, finish() is violated.
57 */
58 @Test
59 void testSequenceOfMethodCalls() {
60 Changeset cs = new Changeset(1);
61 OsmChangeBuilder csBuilder = new OsmChangeBuilder(cs);
62
63 // should be OK
64 csBuilder.start();
65 Node n = new Node(LatLon.ZERO);
66 csBuilder.append(n);
67 csBuilder.finish();
68
69 shouldFail(() -> {
70 OsmChangeBuilder builder = new OsmChangeBuilder(cs);
71 builder.append(n);
72 });
73
74 shouldFail(() -> {
75 OsmChangeBuilder builder = new OsmChangeBuilder(cs);
76 builder.append(Arrays.asList(n));
77 });
78
79 shouldFail(() -> {
80 OsmChangeBuilder builder = new OsmChangeBuilder(cs);
81 builder.finish();
82 });
83
84 shouldFail(() -> {
85 OsmChangeBuilder builder = new OsmChangeBuilder(cs);
86 builder.start();
87 builder.start();
88 });
89 }
90
91 /**
92 * Test building a document with a new node
93 */
94 @Test
95 void testDocumentWithNewNode() {
96 Changeset cs = new Changeset(1);
97 OsmChangeBuilder builder = new OsmChangeBuilder(cs);
98 Node n = new Node(LatLon.ZERO);
99
100 builder.start();
101 builder.append(n);
102 builder.finish();
103
104 assertEquals(String.format(
105 "<osmChange version=\"0.6\" generator=\"JOSM\">%n" +
106 "<create>%n" +
107 " <node id='" + n.getUniqueId() + "' changeset='1' lat='0.0' lon='0.0' />%n" +
108 "</create>%n" +
109 "</osmChange>%n"), builder.getDocument());
110 }
111
112 /**
113 * Test building a document with a modified node
114 */
115 @Test
116 void testDocumentWithModifiedNode() {
117 Changeset cs = new Changeset(1);
118 OsmChangeBuilder builder = new OsmChangeBuilder(cs);
119 Node n = new Node(LatLon.ZERO);
120 n.setOsmId(1, 1);
121 n.setModified(true);
122
123 builder.start();
124 builder.append(n);
125 builder.finish();
126
127 assertEquals(String.format(
128 "<osmChange version=\"0.6\" generator=\"JOSM\">%n" +
129 "<modify>%n" +
130 " <node id='1' version='1' changeset='1' lat='0.0' lon='0.0' />%n" +
131 "</modify>%n" +
132 "</osmChange>%n"), builder.getDocument());
133 }
134
135 /**
136 * Test building a document with a deleted node
137 */
138 @Test
139 void testDocumentWithDeletedNode() {
140 Changeset cs = new Changeset(1);
141 OsmChangeBuilder builder = new OsmChangeBuilder(cs);
142 Node n = new Node(LatLon.ZERO);
143 n.setOsmId(1, 1);
144 n.setDeleted(true);
145
146 builder.start();
147 builder.append(n);
148 builder.finish();
149
150 assertEquals(String.format(
151 "<osmChange version=\"0.6\" generator=\"JOSM\">%n" +
152 "<delete>%n" +
153 " <node id='1' version='1' changeset='1'/>%n" +
154 "</delete>%n" +
155 "</osmChange>%n"), builder.getDocument());
156 }
157
158 /**
159 * Test building a mixed document.
160 */
161 @Test
162 void testMixed() {
163 Changeset cs = new Changeset(1);
164 OsmChangeBuilder builder = new OsmChangeBuilder(cs);
165 Node n1 = new Node(LatLon.ZERO);
166 n1.setOsmId(1, 1);
167 n1.setDeleted(true);
168
169 Node n2 = new Node(LatLon.ZERO);
170
171 Node n3 = new Node(LatLon.ZERO);
172 n3.setOsmId(2, 1);
173 n3.setModified(true);
174
175 builder.start();
176 builder.append(Arrays.asList(n1, n2, n3));
177 builder.finish();
178
179 assertEquals(String.format(
180 "<osmChange version=\"0.6\" generator=\"JOSM\">%n" +
181 "<delete>%n" +
182 " <node id='1' version='1' changeset='1'/>%n" +
183 "</delete>%n" +
184 "<create>%n" +
185 " <node id='" + n2.getUniqueId() + "' changeset='1' lat='0.0' lon='0.0' />%n" +
186 "</create>%n" +
187 "<modify>%n" +
188 " <node id='2' version='1' changeset='1' lat='0.0' lon='0.0' />%n" +
189 "</modify>%n" +
190 "</osmChange>%n"), builder.getDocument());
191 }
192}
Note: See TracBrowser for help on using the repository browser.