Skip to content

Commit db1c75b

Browse files
Accept nodes that have visible flag set explicitly to true (#105)
close #104
1 parent c181793 commit db1c75b

File tree

2 files changed

+48
-26
lines changed

2 files changed

+48
-26
lines changed

core/src/main/scala/com/acervera/osm4scala/DenseNodesIterator.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class DenseNodesIterator(osmosisStringTable: StringTable,
5555
granularity: Int = 100)
5656
extends Iterator[NodeEntity] {
5757

58-
if (osmosisDenseNode.denseinfo.isDefined && osmosisDenseNode.denseinfo.get.visible.nonEmpty) {
58+
if (osmosisDenseNode.denseinfo.isDefined && osmosisDenseNode.denseinfo.get.visible.exists(b => !b)) {
5959
throw new Exception("Only visible nodes are implemented.")
6060
}
6161

core/src/test/scala/com/acervera/osm4scala/DenseNodesIteratorSpec.scala

+47-25
Original file line numberDiff line numberDiff line change
@@ -28,42 +28,64 @@ package com.acervera.osm4scala
2828
import com.acervera.osm4scala.model.{Info, NodeEntity}
2929
import org.openstreetmap.osmosis.osmbinary.osmformat.{DenseNodes, StringTable}
3030
import org.scalatest.matchers.should.Matchers
31+
import org.scalatest.prop.TableDrivenPropertyChecks
3132
import org.scalatest.wordspec.AnyWordSpec
3233

3334
import java.io.FileInputStream
3435
import java.time.Instant
3536

36-
class DenseNodesIteratorSpec extends AnyWordSpec with Matchers {
37+
class DenseNodesIteratorSpec extends AnyWordSpec with Matchers with TableDrivenPropertyChecks {
3738

38-
"The DenseNodesIterator should" should {
39-
"Read known node" in {
40-
val strTable = StringTable parseFrom new FileInputStream(
41-
"core/src/test/resources/com/acervera/osm4scala/primitives/dense/strTable"
42-
)
43-
val osmosisDense = DenseNodes parseFrom new FileInputStream(
44-
"core/src/test/resources/com/acervera/osm4scala/primitives/dense/dense"
45-
)
39+
private val strTable = StringTable parseFrom new FileInputStream(
40+
"core/src/test/resources/com/acervera/osm4scala/primitives/dense/strTable"
41+
)
42+
private val osmosisDense = DenseNodes parseFrom new FileInputStream(
43+
"core/src/test/resources/com/acervera/osm4scala/primitives/dense/dense"
44+
)
45+
46+
private val osmosisDenseVisibleTrue = osmosisDense.copy(denseinfo =
47+
Option(osmosisDense.denseinfo.get.copy(visible = Vector.fill(osmosisDense.id.size)(true)))
48+
)
4649

47-
DenseNodesIterator(strTable, osmosisDense)
48-
.find(_.id == 4020124946L) shouldBe Some(
49-
NodeEntity(
50-
id = 4020124946L,
51-
latitude = 43.732560499999984,
52-
longitude = 7.418018399999998,
53-
tags = Map("entrance" -> "yes", "addr:street" -> "Rue de la Colle", "addr:housenumber" -> "4"),
54-
info = Some(
55-
Info(
56-
version = Some(1),
57-
timestamp = Some(Instant.parse("2016-02-22T17:20:29Z")),
58-
changeset = Some(0),
59-
userId = Some(0),
60-
userName = Some(""),
61-
visible = None
50+
private val expectedDenseNodes =
51+
Table(
52+
("testName", "osmosisDense", "visible"),
53+
("with visible flag unset", osmosisDense, None),
54+
("with visible flag explicitly set to true", osmosisDenseVisibleTrue, Some(true))
55+
)
56+
57+
"The DenseNodesIterator" should {
58+
forAll(expectedDenseNodes) { (testName, osmosisDense, visible) =>
59+
s"Read known node $testName" in {
60+
DenseNodesIterator(strTable, osmosisDense)
61+
.find(_.id == 4020124946L) shouldBe Some(
62+
NodeEntity(
63+
id = 4020124946L,
64+
latitude = 43.732560499999984,
65+
longitude = 7.418018399999998,
66+
tags = Map("entrance" -> "yes", "addr:street" -> "Rue de la Colle", "addr:housenumber" -> "4"),
67+
info = Some(
68+
Info(
69+
version = Some(1),
70+
timestamp = Some(Instant.parse("2016-02-22T17:20:29Z")),
71+
changeset = Some(0),
72+
userId = Some(0),
73+
userName = Some(""),
74+
visible = visible
75+
)
6276
)
6377
)
6478
)
79+
}
80+
}
81+
82+
"Throw an exception when non-visible nodes are included" in {
83+
84+
val osmosisDenseVisibleFalse = osmosisDense.copy(denseinfo =
85+
Option(osmosisDense.denseinfo.get.copy(visible = Vector.fill(osmosisDense.id.size)(false)))
6586
)
87+
88+
an[Exception] shouldBe thrownBy(DenseNodesIterator(strTable, osmosisDenseVisibleFalse))
6689
}
6790
}
68-
6991
}

0 commit comments

Comments
 (0)