source: josm/trunk/test/unit/org/openstreetmap/josm/io/OsmChangeBuilderTest.groovy @ 14019

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

update to Groovy 2.5.0 and Eclipse Photon (4.8.0)

  • Property svn:eol-style set to native
File size: 5.7 KB
Line 
1package org.openstreetmap.josm.io;
2
3import static groovy.test.GroovyAssert.shouldFail
4import static org.junit.Assert.*
5
6import org.junit.Test
7import org.openstreetmap.josm.data.coor.LatLon
8import org.openstreetmap.josm.data.osm.Changeset
9import org.openstreetmap.josm.data.osm.Node
10
11class OsmChangeBuilderTest {
12
13    /**
14     * Test various constructor invocations
15     */
16    @Test
17    public void testConstructor() {
18        def Changeset cs = new Changeset(1)
19        // should not fail
20        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
21
22        // should not fail either - null allowed
23        builder = new OsmChangeBuilder(null)
24
25        // should not fail
26        builder = new OsmChangeBuilder(cs, "0.5")
27
28        builder = new OsmChangeBuilder(cs, null)
29
30        builder = new OsmChangeBuilder(null, null)
31    }
32
33    /**
34     * Test the sequence of method calls. Should throw IllegalStateException if
35     * the protocol start(),append()*, finish() is violated.
36     */
37    @Test
38    public void testSequenceOfMethodCalls() {
39        def Changeset cs = new Changeset(1)
40        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
41
42        // should be OK
43        builder.start()
44        Node n = new Node(LatLon.ZERO)
45        builder.append n
46        builder.finish()
47
48        shouldFail(IllegalStateException) {
49            builder = new OsmChangeBuilder(cs)
50            builder.append n
51        }
52
53        shouldFail(IllegalStateException) {
54            builder = new OsmChangeBuilder(cs)
55            builder.append([n])
56        }
57
58        shouldFail(IllegalStateException) {
59            builder = new OsmChangeBuilder(cs)
60            builder.finish()
61        }
62
63        shouldFail(IllegalStateException) {
64            builder = new OsmChangeBuilder(cs)
65            builder.start()
66            builder.start()
67        }
68    }
69
70    @Test
71    public void testDocumentWithNewNode() {
72        def Changeset cs = new Changeset(1)
73        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
74        Node n = new Node(LatLon.ZERO)
75
76        builder.start()
77        builder.append n
78        builder.finish()
79
80        def doc = new XmlParser().parseText(builder.document)
81        assert doc.@version == "0.6"
82        assert doc.@generator == "JOSM"
83        assert doc.name() == "osmChange"
84        assert doc.children().size() == 1
85        def create = doc.create
86        assert create != null
87
88        assert create.size() == 1
89        def nodes = create[0].node
90        assert nodes.size() == 1
91        def node = nodes[0]
92        assert node.@id == n.uniqueId.toString()
93        assert node.@lat != null
94        assert node.@lon != null
95        assert node.@changeset == cs.id.toString()
96    }
97
98    /**
99     * Test building a document with a modified node
100     */
101    @Test
102    public void testDocumentWithModifiedNode() {
103        def Changeset cs = new Changeset(1)
104        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
105        Node n = new Node(1)
106        n.coor = LatLon.ZERO
107        n.incomplete = false
108        n.modified = true
109
110        builder.start()
111        builder.append n
112        builder.finish()
113
114        def doc = new XmlParser().parseText(builder.document)
115        assert doc.@version == "0.6"
116        assert doc.@generator == "JOSM"
117        assert doc.name() == "osmChange"
118        assert doc.children().size() == 1
119        def modify = doc.modify
120        assert modify != null
121
122        assert modify.size() == 1
123        def nodes = modify[0].node
124        assert nodes.size() == 1
125        def node = nodes[0]
126        assert node.@id == n.uniqueId.toString()
127        assert node.@lat != null
128        assert node.@lon != null
129        assert node.@changeset == cs.id.toString()
130    }
131
132    /**
133     * Test building a document with a deleted node
134     */
135    @Test
136    public void testDocumentWithDeletedNode() {
137        def Changeset cs = new Changeset(1)
138        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
139        Node n = new Node(1)
140        n.coor = LatLon.ZERO
141        n.incomplete = false
142        n.deleted = true
143
144        builder.start()
145        builder.append n
146        builder.finish()
147
148        def doc = new XmlParser().parseText(builder.document)
149        assert doc.@version == "0.6"
150        assert doc.@generator == "JOSM"
151        assert doc.name() == "osmChange"
152        assert doc.children().size() == 1
153        def delete = doc.delete
154        assert delete != null
155
156        assert delete.size() == 1
157        def nodes = delete[0].node
158        assert nodes.size() == 1
159        def node = nodes[0]
160        assert node.@id == n.uniqueId.toString()
161        assert node.@lat == null
162        assert node.@lon == null
163        assert node.@changeset == cs.id.toString()
164    }
165
166    /**
167     * Test building a mixed document.
168     *
169     */
170    @Test
171    public void testMixed() {
172        def Changeset cs = new Changeset(1)
173        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
174        Node n1 = new Node(1)
175        n1.coor = LatLon.ZERO
176        n1.incomplete = false
177        n1.deleted = true
178
179        Node n2 = new Node(LatLon.ZERO)
180
181        Node n3 = new Node(2)
182        n3.coor = LatLon.ZERO
183        n3.incomplete = false
184        n3.modified = true
185
186        builder.start()
187        builder.append([n1,n2,n3])
188        builder.finish()
189
190        def doc = new XmlParser().parseText(builder.document)
191
192        assert doc.children().size() == 3
193        assert doc.children()[0].name() == "delete"
194        assert doc.children()[1].name() == "create"
195        assert doc.children()[2].name() == "modify"
196
197        def node = doc.children()[0].node[0]
198        assert node.@id == n1.uniqueId.toString()
199
200        node = doc.children()[1].node[0]
201        assert node.@id == n2.uniqueId.toString()
202
203        node = doc.children()[2].node[0]
204        assert node.@id == n3.uniqueId.toString()
205    }
206}
Note: See TracBrowser for help on using the repository browser.