/******************************************************************************* * Copyright (c) 2015 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 org.locationtech.spatial4j.context.SpatialContext; import org.locationtech.spatial4j.shape.Shape; import org.junit.Test; public abstract class BaseRoundTripTest<T extends SpatialContext> extends RandomizedTest { protected T ctx; protected BinaryCodec binaryCodec; protected BaseRoundTripTest() { this.ctx = initContext(); binaryCodec = ctx.getBinaryCodec();//stateless } public abstract T initContext(); public boolean shouldBeEqualAfterRoundTrip() { return true; } //This test uses WKT to specify the shapes because the Jts based subclass tests will test // using floats instead of doubles, and WKT is normalized whereas ctx.makeXXX is not. @Test public void testPoint() throws Exception { assertRoundTrip(wkt("POINT(-10 80.3)")); } /** Convenience to read static data. */ protected Shape wkt(String wkt) { try { return ctx.getFormats().getWktReader().read(wkt); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } } protected Shape randomShape() { switch (randomInt(2)) {//inclusive case 0: return wkt("POINT(-10 80.3)"); case 1: return wkt("ENVELOPE(-10, 180, 42.3, 0)"); case 2: return wkt("BUFFER(POINT(-10 30), 5.2)"); default: throw new Error(); } } protected final void assertRoundTrip(Shape shape) throws Exception { assertRoundTrip(shape, shouldBeEqualAfterRoundTrip()); } protected abstract void assertRoundTrip(Shape shape, boolean andEquals) throws Exception; }