@@ -28,42 +28,64 @@ package com.acervera.osm4scala
28
28
import com .acervera .osm4scala .model .{Info , NodeEntity }
29
29
import org .openstreetmap .osmosis .osmbinary .osmformat .{DenseNodes , StringTable }
30
30
import org .scalatest .matchers .should .Matchers
31
+ import org .scalatest .prop .TableDrivenPropertyChecks
31
32
import org .scalatest .wordspec .AnyWordSpec
32
33
33
34
import java .io .FileInputStream
34
35
import java .time .Instant
35
36
36
- class DenseNodesIteratorSpec extends AnyWordSpec with Matchers {
37
+ class DenseNodesIteratorSpec extends AnyWordSpec with Matchers with TableDrivenPropertyChecks {
37
38
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
+ )
46
49
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
+ )
62
76
)
63
77
)
64
78
)
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 )))
65
86
)
87
+
88
+ an[Exception ] shouldBe thrownBy(DenseNodesIterator (strTable, osmosisDenseVisibleFalse))
66
89
}
67
90
}
68
-
69
91
}
0 commit comments