package com.xenoage.zong.core.util;
import static com.xenoage.utils.kernel.Range.range;
import static com.xenoage.utils.math.Fraction.fr;
import static com.xenoage.zong.core.position.MP.atBeat;
import static com.xenoage.zong.core.position.MP.atElement;
import static com.xenoage.zong.core.position.MP.unknown;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.xenoage.zong.core.Score;
import com.xenoage.zong.core.music.MeasureElement;
import com.xenoage.zong.core.music.direction.Words;
import com.xenoage.zong.core.music.rest.Rest;
import com.xenoage.zong.core.position.MP;
import com.xenoage.zong.core.text.UnformattedText;
import com.xenoage.zong.io.selection.Cursor;
/**
* Tests for {@link MeasureElementIterator}.
*
* @author Andreas Wenger
*/
public class MeasureElementIteratorTest {
@Test public void test() {
MeasureElementIterator it = new MeasureElementIterator(createTestScore());
for (int staff : new int[]{1, 3}) {
for (int measure : new int[]{1, 3}) {
for (int element : range(2)) {
assertTrue(it.hasNext());
assertEquals("staff " + staff + ", measure " + measure + ", element " + element,
((Words) it.next()).getText().toString());
assertEquals(atBeat(staff, measure, unknown, fr(element + 1, 4)), it.getMp());
}
}
}
assertFalse(it.hasNext());
}
/**
* Test score with 4 staves and 4 measures. In staves 1 and 3, the measures 1 and 3 have each
* three words with text "staff x, measure y, element z" on beats 1/4 and 2/4
*/
public static Score createTestScore() {
Score score = new Score();
Cursor cursor = new Cursor(score, MP.mp0, true);
for (int staff : new int[]{1, 3}) {
for (int measure : new int[]{1, 3}) {
cursor.setMp(atElement(staff, measure, 0, 0));
for (int element : range(2)) {
cursor.write(new Rest(fr(1, 4)));
cursor.write((MeasureElement) new Words(new UnformattedText(
"staff " + staff + ", measure " + measure + ", element " + element)));
}
}
}
return score;
}
}