[2605] | 1 | package org.openstreetmap.josm.io;
|
---|
| 2 |
|
---|
| 3 | import org.junit.Test
|
---|
[2690] | 4 | import org.openstreetmap.josm.data.coor.LatLon
|
---|
| 5 | import org.openstreetmap.josm.data.osm.Changeset
|
---|
[2605] | 6 |
|
---|
| 7 | import static org.junit.Assert.*;
|
---|
[2690] | 8 |
|
---|
[2605] | 9 | class OsmChangeBuilderTest {
|
---|
| 10 |
|
---|
| 11 | /**
|
---|
| 12 | * Test various constructor invocations
|
---|
| 13 | */
|
---|
| 14 | @Test
|
---|
| 15 | public void testConstructor() {
|
---|
| 16 | def Changeset cs = new Changeset(1)
|
---|
| 17 | // should not fail
|
---|
| 18 | OsmChangeBuilder builder = new OsmChangeBuilder(cs)
|
---|
| 19 |
|
---|
| 20 | // should not fail either - null allowed
|
---|
| 21 | builder = new OsmChangeBuilder(null)
|
---|
| 22 |
|
---|
| 23 | // should not fail
|
---|
| 24 | builder = new OsmChangeBuilder(cs, "0.5")
|
---|
| 25 |
|
---|
| 26 | builder = new OsmChangeBuilder(cs, null)
|
---|
| 27 |
|
---|
[2690] | 28 | builder = new OsmChangeBuilder(null, null)
|
---|
[2605] | 29 | }
|
---|
| 30 |
|
---|
| 31 | /**
|
---|
| 32 | * Test the sequence of method calls. Should throw IllegalStateException if
|
---|
| 33 | * the protocol start(),append()*, finish() is violated.
|
---|
| 34 | */
|
---|
| 35 | @Test
|
---|
| 36 | public void testSequenceOfMethodCalls() {
|
---|
| 37 | def Changeset cs = new Changeset(1)
|
---|
| 38 | OsmChangeBuilder builder = new OsmChangeBuilder(cs)
|
---|
| 39 |
|
---|
| 40 | final shouldFail = new GroovyTestCase().&shouldFail
|
---|
[2690] | 41 |
|
---|
[2605] | 42 | // should be OK
|
---|
| 43 | builder.start()
|
---|
| 44 | Node n = new Node(new LatLon(0,0))
|
---|
| 45 | builder.append n
|
---|
| 46 | builder.finish()
|
---|
| 47 |
|
---|
| 48 | shouldFail(IllegalStateException) {
|
---|
[2690] | 49 | builder = new OsmChangeBuilder(cs)
|
---|
[2605] | 50 | builder.append n
|
---|
| 51 | }
|
---|
| 52 |
|
---|
| 53 | shouldFail(IllegalStateException) {
|
---|
| 54 | builder = new OsmChangeBuilder(cs)
|
---|
| 55 | builder.append([n])
|
---|
| 56 | }
|
---|
| 57 |
|
---|
| 58 | shouldFail(IllegalStateException) {
|
---|
[2690] | 59 | builder = new OsmChangeBuilder(cs)
|
---|
[2605] | 60 | builder.finish()
|
---|
| 61 | }
|
---|
| 62 |
|
---|
| 63 | shouldFail(IllegalStateException) {
|
---|
| 64 | builder = new OsmChangeBuilder(cs)
|
---|
| 65 | builder.start()
|
---|
| 66 | builder.start()
|
---|
[2690] | 67 | }
|
---|
[2605] | 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(new LatLon(0,0))
|
---|
| 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
|
---|
[2690] | 95 | assert node.@changeset == cs.id.toString()
|
---|
| 96 | }
|
---|
[2605] | 97 |
|
---|
[2690] | 98 | /**
|
---|
| 99 | * Test building a document with a modified node
|
---|
| 100 | */
|
---|
[2605] | 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 = new LatLon(0,0)
|
---|
| 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 = new LatLon(0,0)
|
---|
| 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 = new LatLon(0,0)
|
---|
| 176 | n1.incomplete = false
|
---|
| 177 | n1.deleted = true
|
---|
| 178 |
|
---|
| 179 | Node n2 = new Node(new LatLon(0,0))
|
---|
| 180 |
|
---|
| 181 | Node n3 = new Node(2)
|
---|
| 182 | n3.coor = new LatLon(0,0)
|
---|
| 183 | n3.incomplete = false
|
---|
| 184 | n3.modified = true
|
---|
| 185 |
|
---|
| 186 | builder.start()
|
---|
| 187 | builder.append([n1,n2,n3])
|
---|
| 188 | builder.finish()
|
---|
[2690] | 189 |
|
---|
[2605] | 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]
|
---|
[2690] | 204 | assert node.@id == n3.uniqueId.toString()
|
---|
[2605] | 205 | }
|
---|
| 206 | }
|
---|