/* * Copyright (C) 2006, 2012. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 or * version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. */ package uk.me.parabola.util; import java.awt.geom.Area; import java.awt.geom.Path2D; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import uk.me.parabola.imgfmt.app.Coord; import org.junit.Test; import static org.junit.Assert.*; public class Java2DConverterTest { /** * Test if a polygon converted and converted back is equal */ @Test public void testPolygonConversion() throws Exception { List<Coord> polygon = new ArrayList<Coord>(); polygon.add(new Coord(0,0)); polygon.add(new Coord(100,10)); polygon.add(new Coord(120,89)); polygon.add(new Coord(20,44)); polygon.add(new Coord(50,43)); polygon.add(new Coord(0,0)); // Note that shape is not closed with identical points Area a = Java2DConverter.createArea(polygon); List<List<Coord>> convPolygon = Java2DConverter.areaToShapes(a); List<Coord> singularPolygon = Java2DConverter.singularAreaToPoints(a); assertEquals(convPolygon.size(), 1); assertEquals(polygon, convPolygon.get(0)); assertEquals(polygon, singularPolygon); assertTrue(convPolygon.get(0).get(0) == convPolygon.get(0).get(convPolygon.get(0).size()-1)); assertTrue(singularPolygon.get(0) == singularPolygon.get(singularPolygon.size()-1)); } @Test public void testPolygonConversionWithEqualPoints() throws Exception { Path2D path1 = new Path2D.Double(); Path2D path2 = new Path2D.Double(); Path2D path3 = new Path2D.Double(); path1.moveTo(0,0); path1.lineTo(100,-10); path1.lineTo(50,-43); path1.closePath(); path2.moveTo(0,0); path2.lineTo(100,-10); path2.lineTo(50,-43); path2.lineTo(-0.0001,0); // point that is equal to closing points (in map units) path2.closePath(); path3.moveTo(0,0); path3.lineTo(100,-10); path3.lineTo(50,-43); path3.lineTo(-0.5001,0); // point that is not equal to closing points (in map units) path3.closePath(); Area a1 = new Area(path1); Area a2 = new Area(path2); Area a3 = new Area(path3); List<List<Coord>> convPolygon1 = Java2DConverter.areaToShapes(a1); List<List<Coord>> convPolygon2 = Java2DConverter.areaToShapes(a2); List<List<Coord>> convPolygon3 = Java2DConverter.areaToShapes(a3); List<Coord> singularPolygon1 = Java2DConverter.singularAreaToPoints(a1); List<Coord> singularPolygon2 = Java2DConverter.singularAreaToPoints(a2); List<Coord> singularPolygon3 = Java2DConverter.singularAreaToPoints(a3); assertTrue(a1.equals(a2) == false); assertTrue(a1.equals(a3) == false); assertTrue(a2.equals(a3) == false); assertEquals(1, convPolygon1.size()); assertEquals(1, convPolygon2.size()); assertEquals(1, convPolygon3.size()); assertTrue(Arrays.deepEquals(convPolygon1.toArray(), convPolygon2.toArray()) == true); assertTrue(Arrays.deepEquals(convPolygon1.toArray(), convPolygon3.toArray()) == false); assertEquals(4, convPolygon1.get(0).size()); assertEquals(4, convPolygon2.get(0).size()); assertEquals(5, convPolygon3.get(0).size()); assertEquals(4,singularPolygon1.size()); assertEquals(4,singularPolygon2.size()); assertEquals(5,singularPolygon3.size()); assertTrue(convPolygon1.get(0).get(0) == convPolygon1.get(0).get(convPolygon1.get(0).size()-1)); assertTrue(convPolygon2.get(0).get(0) == convPolygon2.get(0).get(convPolygon2.get(0).size()-1)); assertTrue(convPolygon3.get(0).get(0) == convPolygon3.get(0).get(convPolygon3.get(0).size()-1)); assertTrue(singularPolygon1.get(0) == singularPolygon1.get(singularPolygon1.size()-1)); assertTrue(singularPolygon2.get(0) == singularPolygon2.get(singularPolygon2.size()-1)); assertTrue(singularPolygon3.get(0) == singularPolygon3.get(singularPolygon3.size()-1)); } }