Skip to content

Commit 9c97c8c

Browse files
committed
Add more carto tests
1 parent 724bdeb commit 9c97c8c

32 files changed

+1126
-35
lines changed

src/main/groovy/geoscript/carto/Java2DCartoBuilder.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ class Java2DCartoBuilder implements CartoBuilder {
485485
int entryX = legendItem.x
486486
int entryY = legendItem.y + titleHeight + legendItem.gapBetweenEntries
487487
int maxTextWidth = -1
488+
int maxHeight = legendItem.y + legendItem.height
488489

489490
legendItem.entries.eachWithIndex { LegendItem.LegendEntry entry, int i ->
490491

@@ -597,7 +598,7 @@ class Java2DCartoBuilder implements CartoBuilder {
597598
if (i < (legendItem.entries.size() - 1)) {
598599
// Check to make sure the next entry can fit in the remaining space
599600
int nextHeight = getLegendItemHeight(legendItem, legendItem.entries[i + 1])
600-
if ((entryY + nextHeight) > legendItem.height) {
601+
if ((entryY + nextHeight) > maxHeight) {
601602
// Move the entry x over to the right to a separate column
602603
entryX += legendItem.legendEntryWidth + legendItem.gapBetweenEntries + maxTextWidth
603604
// Reset the entry y to the top
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package geoscript.carto
2+
3+
import org.junit.jupiter.api.io.TempDir
4+
5+
class AbstractCartoTest {
6+
7+
@TempDir
8+
private File folder
9+
10+
boolean saveToTarget = false
11+
12+
void draw(String name, int width, int height, Closure closure) {
13+
String fileName = "carto_${name}.png"
14+
File file = saveToTarget ? new File("target/${fileName}") : new File(folder, fileName)
15+
file.withOutputStream { OutputStream outputStream ->
16+
CartoBuilder cartoBuilder = new ImageCartoBuilder(new PageSize(width, height), ImageCartoBuilder.ImageType.PNG)
17+
closure.call(cartoBuilder)
18+
cartoBuilder.build(outputStream)
19+
}
20+
}
21+
22+
}

src/test/groovy/geoscript/carto/DateTextItemTest.groovy

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import java.awt.Font
77
import java.text.SimpleDateFormat
88
import static org.junit.jupiter.api.Assertions.*
99

10-
class DateTextItemTest {
10+
class DateTextItemTest extends AbstractCartoTest {
1111

1212
@Test
1313
void create() {
@@ -42,5 +42,18 @@ class DateTextItemTest {
4242
assertTrue(itemString.endsWith("horizontal-align = CENTER, vertical-align = MIDDLE)"))
4343
}
4444

45+
@Test
46+
void draw() {
47+
draw("datetext", 150, 50, { CartoBuilder cartoBuilder ->
48+
cartoBuilder.dateText(new DateTextItem(10, 10, 140, 30)
49+
.date(new Date())
50+
.format("MM/dd/yyy")
51+
.horizontalAlign(HorizontalAlign.CENTER)
52+
.verticalAlign(VerticalAlign.MIDDLE)
53+
.color(Color.BLACK)
54+
.font(new Font("Arial", Font.PLAIN, 14))
55+
)
56+
})
57+
}
4558

4659
}

src/test/groovy/geoscript/carto/GridItemTest.groovy

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import java.awt.*
66

77
import static org.junit.jupiter.api.Assertions.assertEquals
88

9-
class GridItemTest {
9+
class GridItemTest extends AbstractCartoTest {
1010

1111
@Test
1212
void create() {
@@ -27,5 +27,15 @@ class GridItemTest {
2727
"stroke-color = java.awt.Color[r=0,g=0,b=255], stroke-width = 2.0)", item.toString())
2828
}
2929

30+
@Test
31+
void draw() {
32+
draw("grid", 100, 100, { CartoBuilder cartoBuilder ->
33+
cartoBuilder.grid(new GridItem(0,0,100,100)
34+
.size(10)
35+
.strokeColor(Color.BLUE)
36+
.strokeWidth(0.5f)
37+
)
38+
})
39+
}
3040

3141
}

src/test/groovy/geoscript/carto/ImageCartoBuilderTest.groovy

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package geoscript.carto
22

33
import geoscript.layer.GeoTIFF
4+
import geoscript.layer.Layer
45
import geoscript.layer.Shapefile
56
import geoscript.render.Map
7+
import geoscript.style.UniqueValues
68
import org.junit.jupiter.api.io.TempDir
79

810
import java.awt.Color
@@ -65,4 +67,59 @@ all copies or substantial portions of the Software.
6567
}
6668
}
6769

70+
@Test
71+
void buildAnother() {
72+
73+
Layer layer = new Shapefile(new File(getClass().getClassLoader().getResource("states.shp").toURI()))
74+
layer.style = new UniqueValues(layer, "SUB_REGION", "Pastel1")
75+
76+
Map map = new Map(layers: [
77+
layer
78+
])
79+
80+
boolean saveToTarget = false
81+
File file = saveToTarget ? new File("target/carto_map.png") : new File(folder, "carto_map.png")
82+
file.withOutputStream { OutputStream outputStream ->
83+
new ImageCartoBuilder(PageSize.LETTER_LANDSCAPE, ImageCartoBuilder.ImageType.PNG)
84+
// Entire Canvas
85+
.rectangle(new RectangleItem(0, 0, 792, 612).strokeColor(Color.WHITE).fillColor(Color.WHITE))
86+
// Outer border
87+
.rectangle(new RectangleItem(5, 5, 782, 602).strokeColor(Color.BLACK).strokeWidth(3f))
88+
// Title border
89+
.rectangle(new RectangleItem(10, 10, 772, 80).strokeColor(Color.BLACK).strokeWidth(1f))
90+
// Map border
91+
.rectangle(new RectangleItem(10, 95, 600, 490).strokeColor(Color.BLACK).strokeWidth(1f))
92+
// Legend border
93+
.rectangle(new RectangleItem(615, 95, 167, 300).strokeColor(Color.BLACK).strokeWidth(1f))
94+
// Scale border
95+
.rectangle(new RectangleItem(615, 400, 167, 50).strokeColor(Color.BLACK).strokeWidth(1f))
96+
// Overview border
97+
.rectangle(new RectangleItem(615, 455, 167, 80).strokeColor(Color.BLACK).strokeWidth(1f))
98+
// Logo border
99+
.rectangle(new RectangleItem(615, 540, 167, 62).strokeColor(Color.BLACK).strokeWidth(1f))
100+
// Title
101+
.text(new TextItem(15, 15, 700, 60).text("United States").verticalAlign(VerticalAlign.TOP).font(new Font("Arial", Font.BOLD, 36)))
102+
// Map
103+
.map(new MapItem(15, 100, 590, 480).map(map))
104+
// Legend
105+
.legend(new LegendItem(620, 100, 157, 290).addMap(map).legendEntryHeight(15).legendEntryWidth(20))
106+
// Disclaimer
107+
.paragraph(new ParagraphItem(15, 587,590, 30).font(new Font("Arial", Font.ITALIC, 8))
108+
.text("The map features are approximate and are intended only to provide an indication of said feature. " +
109+
"Additional areas that have not been mapping may by present. This is not a survey."))
110+
// Scale bar
111+
.scaleBar(new ScaleBarItem(615, 410, 145, 30).map(map).strokeColor(Color.WHITE))
112+
// Overview
113+
.overViewMap(new OverviewMapItem(620, 460, 157, 70).linkedMap(map).overviewMap(map))
114+
// North arrow
115+
.northArrow(new NorthArrowItem(755, 465, 20, 20))
116+
// Date text
117+
.dateText(new DateTextItem(620, 550, 167, 10).font(new Font("Arial", Font.PLAIN, 12)))
118+
// Logo
119+
.image(new ImageItem(620, 565, 30, 30).path(new File("src/test/resources/image.png")))
120+
.text(new TextItem(655, 565, 100, 30).text("GeoScript").font(new Font("Arial", Font.BOLD, 24)))
121+
.build(outputStream)
122+
}
123+
}
124+
68125
}

src/test/groovy/geoscript/carto/ImageItemTest.groovy

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package geoscript.carto
22

33
import org.junit.jupiter.api.Test
4+
45
import static org.junit.jupiter.api.Assertions.*
56

6-
class ImageItemTest {
7+
class ImageItemTest extends AbstractCartoTest {
78

89
@Test
910
void create() {
@@ -20,5 +21,13 @@ class ImageItemTest {
2021
assertTrue(item.toString().endsWith("image.png)"))
2122
}
2223

24+
@Test
25+
void draw() {
26+
draw("image", 292, 295, { CartoBuilder cartoBuilder ->
27+
cartoBuilder.image(new ImageItem(10,10,272,275)
28+
.path(new File(getClass().getClassLoader().getResource("image.png").toURI()))
29+
)
30+
})
31+
}
2332

2433
}

src/test/groovy/geoscript/carto/LegendItemTest.groovy

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package geoscript.carto
22

3-
import geoscript.layer.GeoTIFF
43
import geoscript.layer.Shapefile
54
import geoscript.render.Map
65
import geoscript.style.ColorMap
76
import geoscript.style.Fill
87
import geoscript.style.Shape
98
import geoscript.style.Stroke
109
import geoscript.style.UniqueValues
11-
import org.junit.jupiter.api.io.TempDir
1210

1311
import java.awt.Color
1412
import org.junit.jupiter.api.Test
@@ -17,10 +15,7 @@ import java.awt.Font
1715

1816
import static org.junit.jupiter.api.Assertions.*
1917

20-
class LegendItemTest {
21-
22-
@TempDir
23-
private File folder
18+
class LegendItemTest extends AbstractCartoTest {
2419

2520
@Test
2621
void create() {
@@ -65,13 +60,10 @@ class LegendItemTest {
6560
shapefile
6661
])
6762

68-
File mapFile = new File("target/carto_legend_symbolizer_name.png")
69-
mapFile.withOutputStream { OutputStream outputStream ->
70-
new ImageCartoBuilder(PageSize.LETTER_LANDSCAPE, ImageCartoBuilder.ImageType.PNG)
71-
.map(new MapItem(30, 120, 742, 470).map(map))
72-
.legend(new LegendItem(640, 500, 180,80).addMap(map))
73-
.build(outputStream)
74-
}
63+
draw("legend_symbolizer_name", 792, 612, { CartoBuilder cartoBuilder ->
64+
cartoBuilder.map(new MapItem(30, 120, 742, 470).map(map))
65+
cartoBuilder.legend(new LegendItem(640, 500, 180,80).addMap(map))
66+
})
7567
}
7668

7769
@Test
@@ -84,13 +76,10 @@ class LegendItemTest {
8476
shapefile
8577
])
8678

87-
File mapFile = new File("target/carto_legend_symbolizer_unique_name.png")
88-
mapFile.withOutputStream { OutputStream outputStream ->
89-
new ImageCartoBuilder(PageSize.LETTER_LANDSCAPE, ImageCartoBuilder.ImageType.PNG)
90-
.map(new MapItem(240, 120, 542, 470).map(map))
91-
.legend(new LegendItem(10, 10, 220,600).addMap(map))
92-
.build(outputStream)
93-
}
79+
draw("legend_symbolizer_unique_name", 792, 612, { CartoBuilder cartoBuilder ->
80+
cartoBuilder.map(new MapItem(240, 120, 542, 470).map(map))
81+
cartoBuilder.legend(new LegendItem(10, 10, 220,600).addMap(map))
82+
})
9483
}
9584

9685
}

src/test/groovy/geoscript/carto/LineItemTest.groovy

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import java.awt.*
66

77
import static org.junit.jupiter.api.Assertions.assertEquals
88

9-
class LineItemTest {
9+
class LineItemTest extends AbstractCartoTest {
1010

1111
@Test
1212
void create() {
@@ -25,5 +25,14 @@ class LineItemTest {
2525
"stroke-color = java.awt.Color[r=0,g=0,b=255], stroke-width = 2.0)", item.toString())
2626
}
2727

28+
@Test
29+
void draw() {
30+
draw("line", 200, 50, { CartoBuilder cartoBuilder ->
31+
cartoBuilder.line(new LineItem(10,10,180,0)
32+
.strokeColor(Color.BLUE)
33+
.strokeWidth(1.2)
34+
)
35+
})
36+
}
2837

2938
}

src/test/groovy/geoscript/carto/MapItemTest.groovy

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import org.junit.jupiter.api.Test
77
import static org.junit.jupiter.api.Assertions.assertEquals
88
import static org.junit.jupiter.api.Assertions.assertTrue
99

10-
class MapItemTest {
10+
class MapItemTest extends AbstractCartoTest {
1111

1212
@Test
1313
void create() {
@@ -28,5 +28,14 @@ class MapItemTest {
2828
assertTrue(item.toString().endsWith(")"))
2929
}
3030

31+
@Test
32+
void draw() {
33+
draw("map_states", 400, 300, { CartoBuilder cartoBuilder ->
34+
Map map = new Map(layers: [
35+
new Shapefile(new File(getClass().getClassLoader().getResource("states.shp").toURI()))
36+
])
37+
cartoBuilder.map(new MapItem(10,10,380,280).map(map))
38+
})
39+
}
3140

3241
}

src/test/groovy/geoscript/carto/NorthArrowItemTest.groovy

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import java.awt.*
66

77
import static org.junit.jupiter.api.Assertions.*
88

9-
class NorthArrowItemTest {
9+
class NorthArrowItemTest extends AbstractCartoTest {
1010

1111
@Test
1212
void create() {
@@ -38,5 +38,11 @@ class NorthArrowItemTest {
3838
"stroke-width = 1.2"))
3939
}
4040

41+
@Test
42+
void draw() {
43+
draw("northarrow", 150, 150, { CartoBuilder cartoBuilder ->
44+
cartoBuilder.northArrow(new NorthArrowItem(10,10,130,130))
45+
})
46+
}
4147

4248
}

0 commit comments

Comments
 (0)