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

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

fix #21064 - Add JUnit 5 extension for preferences (patch by taylor.smock)

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