package com.xenoage.zong.musiclayout; import com.xenoage.utils.math.geom.Point2f; import com.xenoage.utils.math.geom.Rectangle2f; import com.xenoage.zong.musiclayout.stampings.Stamping; import com.xenoage.zong.musiclayout.stampings.Stamping.Level; import com.xenoage.zong.musiclayout.stampings.StampingMock; import org.junit.Test; import java.util.ArrayList; import static com.xenoage.utils.collections.CollectionUtils.alist; import static org.junit.Assert.*; /** * Test cases for a ScoreFrameLayout. * * @author Andreas Wenger */ public class ScoreFrameLayoutTest { @Test public void getLayoutElementAt() { /* 0 5 10 15 20 | 0 * * *********** 2 * +----* [0] * * | * *~~~~~~~ 4 * |[1] *********** | * +--------+ [2] | 6 * | | * ~~~~~~~~~~~~~~~~~~~~ 8 */ Stamping[] stampings = new Stamping[3]; StampingMock s1 = new StampingMock(Level.Music, new Rectangle2f(6, 2, 10, 3)); stampings[0] = s1; StampingMock s2 = new StampingMock(Level.Staff, new Rectangle2f(1, 3, 9, 3)); stampings[1] = s2; StampingMock s3 = new StampingMock(Level.EmptySpace, new Rectangle2f(4, 4, 19, 4)); stampings[2] = s3; ScoreFrameLayout layout = new ScoreFrameLayout(null, new ArrayList<>(), alist(stampings), new ArrayList<>()); //no hit (but empty space) assertTrue(isNot(layout.getStampingAt(new Point2f(0, 0)), s1, s2, s3)); assertTrue(isNot(layout.getStampingAt(new Point2f(3, 7)), s1, s2, s3)); assertTrue(isNot(layout.getStampingAt(new Point2f(17, 3)), s1, s2, s3)); //single hit assertEquals(s1, layout.getStampingAt(new Point2f(10, 2))); assertEquals(s2, layout.getStampingAt(new Point2f(3, 5))); assertEquals(s3, layout.getStampingAt(new Point2f(22, 8))); //intersection hit assertEquals(s1, layout.getStampingAt(new Point2f(15, 4))); assertEquals(s2, layout.getStampingAt(new Point2f(5, 5))); assertEquals(s1, layout.getStampingAt(new Point2f(8, 4))); } private boolean isNot(Object object, Object this1, Object this2, Object this3) { return (object != this1) && (object != this2) && (object != this3); } }