[7938] | 1 | package org.openstreetmap.josm.io;
|
---|
| 2 |
|
---|
[14019] | 3 | import static groovy.test.GroovyAssert.shouldFail
|
---|
[7938] | 4 | import static org.junit.Assert.*
|
---|
| 5 |
|
---|
| 6 | import org.junit.Test
|
---|
| 7 | import org.openstreetmap.josm.data.coor.LatLon
|
---|
| 8 | import org.openstreetmap.josm.data.osm.Changeset
|
---|
| 9 | import org.openstreetmap.josm.data.osm.Node
|
---|
| 10 |
|
---|
| 11 | class OsmChangeBuilderTest {
|
---|
| 12 |
|
---|
[8510] | 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)
|
---|
[7938] | 21 |
|
---|
[8510] | 22 | // should not fail either - null allowed
|
---|
| 23 | builder = new OsmChangeBuilder(null)
|
---|
[7938] | 24 |
|
---|
[8510] | 25 | // should not fail
|
---|
| 26 | builder = new OsmChangeBuilder(cs, "0.5")
|
---|
[7938] | 27 |
|
---|
[8510] | 28 | builder = new OsmChangeBuilder(cs, null)
|
---|
[7938] | 29 |
|
---|
[8510] | 30 | builder = new OsmChangeBuilder(null, null)
|
---|
| 31 | }
|
---|
[7938] | 32 |
|
---|
[8510] | 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)
|
---|
[7938] | 41 |
|
---|
[8510] | 42 | // should be OK
|
---|
| 43 | builder.start()
|
---|
[9214] | 44 | Node n = new Node(LatLon.ZERO)
|
---|
[8510] | 45 | builder.append n
|
---|
| 46 | builder.finish()
|
---|
[7938] | 47 |
|
---|
[8510] | 48 | shouldFail(IllegalStateException) {
|
---|
| 49 | builder = new OsmChangeBuilder(cs)
|
---|
| 50 | builder.append n
|
---|
| 51 | }
|
---|
[7938] | 52 |
|
---|
[8510] | 53 | shouldFail(IllegalStateException) {
|
---|
| 54 | builder = new OsmChangeBuilder(cs)
|
---|
| 55 | builder.append([n])
|
---|
| 56 | }
|
---|
[7938] | 57 |
|
---|
[8510] | 58 | shouldFail(IllegalStateException) {
|
---|
| 59 | builder = new OsmChangeBuilder(cs)
|
---|
| 60 | builder.finish()
|
---|
| 61 | }
|
---|
[7938] | 62 |
|
---|
[8510] | 63 | shouldFail(IllegalStateException) {
|
---|
| 64 | builder = new OsmChangeBuilder(cs)
|
---|
| 65 | builder.start()
|
---|
| 66 | builder.start()
|
---|
| 67 | }
|
---|
| 68 | }
|
---|
[7938] | 69 |
|
---|
[8510] | 70 | @Test
|
---|
| 71 | public void testDocumentWithNewNode() {
|
---|
| 72 | def Changeset cs = new Changeset(1)
|
---|
| 73 | OsmChangeBuilder builder = new OsmChangeBuilder(cs)
|
---|
[9214] | 74 | Node n = new Node(LatLon.ZERO)
|
---|
[7938] | 75 |
|
---|
[8510] | 76 | builder.start()
|
---|
| 77 | builder.append n
|
---|
| 78 | builder.finish()
|
---|
[7938] | 79 |
|
---|
[8510] | 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
|
---|
[7938] | 87 |
|
---|
[8510] | 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 | }
|
---|
[7938] | 97 |
|
---|
[8510] | 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)
|
---|
[9214] | 106 | n.coor = LatLon.ZERO
|
---|
[8510] | 107 | n.incomplete = false
|
---|
| 108 | n.modified = true
|
---|
[7938] | 109 |
|
---|
[8510] | 110 | builder.start()
|
---|
| 111 | builder.append n
|
---|
| 112 | builder.finish()
|
---|
[7938] | 113 |
|
---|
[8510] | 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
|
---|
[7938] | 121 |
|
---|
[8510] | 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 | }
|
---|
[7938] | 131 |
|
---|
[8510] | 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)
|
---|
[9214] | 140 | n.coor = LatLon.ZERO
|
---|
[8510] | 141 | n.incomplete = false
|
---|
| 142 | n.deleted = true
|
---|
[7938] | 143 |
|
---|
[8510] | 144 | builder.start()
|
---|
| 145 | builder.append n
|
---|
| 146 | builder.finish()
|
---|
[7938] | 147 |
|
---|
[8510] | 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
|
---|
[7938] | 155 |
|
---|
[8510] | 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 | }
|
---|
[7938] | 165 |
|
---|
[8510] | 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)
|
---|
[9214] | 175 | n1.coor = LatLon.ZERO
|
---|
[8510] | 176 | n1.incomplete = false
|
---|
| 177 | n1.deleted = true
|
---|
[7938] | 178 |
|
---|
[9214] | 179 | Node n2 = new Node(LatLon.ZERO)
|
---|
[7938] | 180 |
|
---|
[8510] | 181 | Node n3 = new Node(2)
|
---|
[9214] | 182 | n3.coor = LatLon.ZERO
|
---|
[8510] | 183 | n3.incomplete = false
|
---|
| 184 | n3.modified = true
|
---|
[7938] | 185 |
|
---|
[8510] | 186 | builder.start()
|
---|
| 187 | builder.append([n1,n2,n3])
|
---|
| 188 | builder.finish()
|
---|
[7938] | 189 |
|
---|
[8510] | 190 | def doc = new XmlParser().parseText(builder.document)
|
---|
[7938] | 191 |
|
---|
[8510] | 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"
|
---|
[7938] | 196 |
|
---|
[8510] | 197 | def node = doc.children()[0].node[0]
|
---|
| 198 | assert node.@id == n1.uniqueId.toString()
|
---|
[7938] | 199 |
|
---|
[8510] | 200 | node = doc.children()[1].node[0]
|
---|
| 201 | assert node.@id == n2.uniqueId.toString()
|
---|
[7938] | 202 |
|
---|
[8510] | 203 | node = doc.children()[2].node[0]
|
---|
| 204 | assert node.@id == n3.uniqueId.toString()
|
---|
| 205 | }
|
---|
[2605] | 206 | }
|
---|