Skip to content

Commit 139d649

Browse files
doc: add JTSTestBuilder smoke-test recipe to module README
Phase 4-A's test plan marked the manual JTSTestBuilder smoke test as "defer to maintainer review". Land a concrete recipe so a reviewer (or a future contributor verifying a regression) can paste a row, click Load, and check the geometry-tree label without having to guess at the expected outcome. The table covers all eight new types plus a Z/M/ZM dimension variant and ends with the round-trip-via-Save step that exercises the .jts file path through CurvedWKTReader / CurvedGeometryFactory. The toLinear escape hatch is referenced as a programmatic API, flagged as still-deferred-to-Phase-4-B for the UI panel binding. Assisted-by: Claude (Opus-4.7) Signed-off-by: Jeroen Bloemscheer <jeroen@jeroentechsolutions.uk>
1 parent 6e0ced0 commit 139d649

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

modules/curved/README.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,39 @@ explicitly instantiate `CurvedWKTReader` / `CurvedWKTWriter` /
106106
module GraalVM native-image friendly and avoids surprising other
107107
classpath users.
108108

109+
## Verifying the JTSTestBuilder integration
110+
111+
Phase 4-A wires `JTSTestBuilder` to use the curve-aware reader and
112+
factory on every WKT-parsing path, so curved WKT round-trips through
113+
the existing UI with no new controls. To smoke-test a build:
114+
115+
```sh
116+
mvn -B -q install -DskipTests -Dcheckstyle.skip=true
117+
java -jar modules/app/target/JTSTestBuilder.jar
118+
```
119+
120+
Then, for each row below, paste the WKT into **Input A**, click
121+
**Load**, and check the geometry-tree label on the left:
122+
123+
| Paste this WKT | Expected type |
124+
|------------------------------------------------------------------|--------------------|
125+
| `CIRCULARSTRING(1 5, 6 2, 7 3)` | `CircularString` |
126+
| `COMPOUNDCURVE((5 3, 5 13), CIRCULARSTRING(5 13, 7 15, 9 13))` | `CompoundCurve` |
127+
| `CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0))` | `CurvePolygon` |
128+
| `MULTICURVE((0 0, 1 1), CIRCULARSTRING(2 2, 3 3, 4 2))` | `MultiCurve` |
129+
| `MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0)))` | `MultiSurface` |
130+
| `TRIANGLE((0 0, 1 0, 0 1, 0 0))` | `Triangle` |
131+
| `POLYHEDRALSURFACE(((0 0, 0 1, 1 1, 1 0, 0 0)))` | `PolyhedralSurface`|
132+
| `TIN(((0 0, 1 0, 0 1, 0 0)), ((1 0, 1 1, 0 1, 1 0)))` | `Tin` |
133+
| `CIRCULARSTRING ZM(1 2 3 4, 5 6 7 8, 9 10 11 12)` | `CircularString` |
134+
135+
Save the case (`File ▸ Save…`), reopen it, and confirm the tree
136+
labels survive the round-trip. Spatial functions in the **Geometry
137+
Functions** panel still operate on each curve's polyline / polygon
138+
parent (per the phase-1 contract); the explicit linearised form is
139+
available programmatically via `((Linearizable) g).toLinear(0.0)`.
140+
A function-panel binding and drawing tools are deferred to Phase 4-B.
141+
109142
## References
110143

111144
- Discussion: <https://github.com/locationtech/jts/discussions/1193>

0 commit comments

Comments
 (0)