// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.io; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.FileInputStream; import org.junit.BeforeClass; import org.junit.Test; import org.openstreetmap.josm.JOSMFixture; import org.openstreetmap.josm.TestUtils; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.gui.layer.OsmDataLayer; /** * Unit tests of {@link GeoJSONWriter} class. */ public class GeoJSONWriterTest { /** * Setup test. */ @BeforeClass public static void setUp() { JOSMFixture.createUnitTestFixture().init(); } /** * Unit test */ @Test public void testPoint() { final Node node = new Node(new LatLon(12.3, 4.56)); node.put("name", "foo"); node.put("source", "code"); final DataSet ds = new DataSet(); ds.addPrimitive(node); final OsmDataLayer layer = new OsmDataLayer(ds, "foo", null); final GeoJSONWriter writer = new GeoJSONWriter(layer); assertEquals(("" + "{\n" + " 'type':'FeatureCollection',\n" + " 'generator':'JOSM',\n" + " 'features':[\n" + " {\n" + " 'type':'Feature',\n" + " 'properties':{\n" + " 'name':'foo',\n" + " 'source':'code'\n" + " },\n" + " 'geometry':{\n" + " 'type':'Point',\n" + " 'coordinates':[\n" + " 4.56000000000,\n" + " 12.30000000000\n" + " ]\n" + " }\n" + " }\n" + " ]\n" + "}").replace("'", "\""), writer.write().trim()); } /** * Unit test for multipolygon * @throws Exception if an error occurs */ @Test public void testMultipolygon() throws Exception { try (FileInputStream in = new FileInputStream(TestUtils.getTestDataRoot() + "multipolygon.osm")) { DataSet ds = OsmReader.parseDataSet(in, null); final OsmDataLayer layer = new OsmDataLayer(ds, "foo", null); final GeoJSONWriter writer = new GeoJSONWriter(layer); assertTrue(writer.write().contains("MultiPolygon")); } } /** * Unit test for exporting invalid multipolygons, see #13827 * @throws Exception if an error occurs */ @Test public void testMultipolygonRobustness() throws Exception { try (FileInputStream in = new FileInputStream("data_nodist/multipolygon.osm")) { DataSet ds = OsmReader.parseDataSet(in, null); final OsmDataLayer layer = new OsmDataLayer(ds, "foo", null); final GeoJSONWriter writer = new GeoJSONWriter(layer); assertTrue(writer.write().contains("MultiPolygon")); } } }