package com.xenoage.zong.io.midi.out.repetitions; import com.xenoage.zong.commands.core.music.MeasureAdd; import com.xenoage.zong.core.Score; import com.xenoage.zong.core.ScoreFactory; import com.xenoage.zong.core.music.volta.Volta; import lombok.val; import org.junit.Test; import static com.xenoage.utils.collections.ArrayUtils.getFirst; import static com.xenoage.utils.collections.ArrayUtils.getLast; import static com.xenoage.utils.kernel.Range.range; import static org.junit.Assert.*; /** * Tests for {@link VoltaGroupFinder}. * * @author Andreas Wenger */ public class VoltaGroupFinderTest { int[][] voltaGroups = { {5, 7, 10, 13}, //1st from measure 5-7, 2nd 7-10, 3rd 10-13 {14, 15}, {19, 21, 23} }; @Test public void findAllVoltaGroupsTest() { Score score = createScore(); val found = new VoltaGroupFinder(score).findAllVoltaGroups(); assertEquals(voltaGroups.length, found.voltaGroups.size()); for (val expectedGroups : voltaGroups) { val voltaGroup = found.getVoltaGroupAt(expectedGroups[0]); assertNotNull(voltaGroup); assertEquals(getLast(expectedGroups) - getFirst(expectedGroups), voltaGroup.getMeasuresCount()); assertEquals(expectedGroups.length - 1, voltaGroup.voltasStartMeasures.size()); for (int iVolta : range(0, expectedGroups.length - 2)) //-2: last measure is just for marking the ending assertEquals(expectedGroups[iVolta], voltaGroup.voltasStartMeasures.get(iVolta).startMeasure); } } private Score createScore() { Score score = ScoreFactory.create1Staff(); new MeasureAdd(score, getLast(getLast(voltaGroups)) + 4).execute(); for (val voltaGroup : voltaGroups) { for (int iVolta = 0; iVolta < voltaGroup.length - 1; iVolta++) { int startMeasure = voltaGroup[iVolta]; int length = voltaGroup[iVolta + 1] - voltaGroup[iVolta]; val numbers = range(iVolta + 1, iVolta + 1); score.getHeader().getColumnHeader(startMeasure).setVolta(new Volta(length, numbers, numbers.toString(), false)); } } return score; } }