/*******************************************************************************
* Copyright (c) 2015 Voyager Search and MITRE
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Apache License, Version 2.0 which
* accompanies this distribution and is available at
* http://www.apache.org/licenses/LICENSE-2.0.txt
******************************************************************************/
package org.locationtech.spatial4j.io;
import com.carrotsearch.randomizedtesting.RandomizedTest;
import com.carrotsearch.randomizedtesting.annotations.ParametersFactory;
import org.locationtech.spatial4j.context.SpatialContext;
import org.locationtech.spatial4j.context.jts.JtsSpatialContext;
import org.locationtech.spatial4j.shape.Shape;
import org.junit.Test;
import java.io.IOException;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class LegacyShapeReadWriterTest extends RandomizedTest {
private final LegacyShapeReader reader;
private final LegacyShapeWriter writer;
@ParametersFactory
public static Iterable<Object[]> parameters() {
return Arrays.asList($$(
$(SpatialContext.GEO),
$(JtsSpatialContext.GEO)
));
}
private final SpatialContext ctx;
public LegacyShapeReadWriterTest(SpatialContext ctx) {
this.ctx = ctx;
this.reader = new LegacyShapeReader(ctx, null);
this.writer = new LegacyShapeWriter(ctx, null);
}
@SuppressWarnings("unchecked")
private <T extends Shape> T writeThenRead(T s ) throws IOException {
String buff = writer.toString( s );
return (T) read( buff );
}
private Shape read(String value) {
return reader.readIfSupported(value);
}
@Test
public void testPoint() throws IOException {
Shape s = read("10 20");
assertEquals(ctx.makePoint(10,20),s);
assertEquals(s,writeThenRead(s));
assertEquals(s,read("20,10"));//check comma for y,x format
assertEquals(s,read("20, 10"));//test space
assertFalse(s.hasArea());
}
@Test
public void testRectangle() throws IOException {
Shape s = read("-10 -20 10 20");
assertEquals(ctx.makeRectangle(-10, 10, -20, 20),s);
assertEquals(s,writeThenRead(s));
assertTrue(s.hasArea());
}
@Test
public void testCircle() throws IOException {
Shape s = read("Circle(1.23 4.56 distance=7.89)");
assertEquals(ctx.makeCircle(1.23, 4.56, 7.89),s);
assertEquals(s,writeThenRead(s));
assertEquals(s,read("CIRCLE( 4.56,1.23 d=7.89 )")); // use lat,lon and use 'd' abbreviation
assertTrue(s.hasArea());
}
// Looking for more tests? Shapes are tested in TestShapes2D.
}