/* * Copyright (C) 2008 Steve Ratcliffe * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License 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. * * * Author: Steve Ratcliffe * Create date: 29-Nov-2008 */ package uk.me.parabola.mkgmap.general; import java.util.Arrays; import java.util.List; import uk.me.parabola.imgfmt.app.Area; import uk.me.parabola.imgfmt.app.Coord; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import org.junit.Test; public class LineClipperTest { /** * This is the example as given on the referenced web page. * We now use integers instead of floats so the 101.425 from the * example is just 101 here. */ @Test public void testExampleClip() { Area a = new Area(60, 70, 150, 230); Coord[] co = { new Coord(20, 30), new Coord(160, 280), }; List<List<Coord>> listList = LineClipper.clip(a, Arrays.asList(co)); assertTrue("list should be empty", !listList.isEmpty()); Coord[] result = { new Coord(60, 101), new Coord(132, 230) }; assertArrayEquals("example result", result, listList.get(0).toArray()); } /** * Test an original line that enters the area, leaves it and then goes back * into the area. This should give two lines in the result set. */ @Test public void testListClip() { // Add your code here Area a = new Area(100, 100, 200, 200); List<Coord> l = Arrays.asList(new Coord(20, 30), new Coord(40, 60), new Coord(102, 110), new Coord(150, 150), new Coord(210, 220), new Coord(190, 135) ); List<List<Coord>> list = LineClipper.clip(a, l); // There should be exactly two lines assertEquals("should be two lines", 2, list.size()); // No empty lists for (List<Coord> lco : list) assertTrue("empty list", !lco.isEmpty()); // Check values Coord[] firstExpectedLine = { new Coord(100, 108), new Coord(102, 110), new Coord(150, 150), new Coord(193, 200) }; assertArrayEquals(firstExpectedLine, list.get(0).toArray()); Coord[] secondExpectedLine = { new Coord(200, 178), new Coord(190, 135) }; assertArrayEquals(secondExpectedLine, list.get(1).toArray()); } /** * If all the lines are inside, then it should just return null to indicate that. */ @Test public void testAllInside() { Area a = new Area(100, 100, 200, 200); List<Coord> l = Arrays.asList( new Coord(102, 110), new Coord(150, 150), new Coord(190, 195) ); List<List<Coord>> list = LineClipper.clip(a, l); assertNull("all lines inside", list); } }