package musicxmltestsuite.tests.musicxmlin;
import com.xenoage.utils.kernel.Tuple2;
import com.xenoage.zong.core.Score;
import com.xenoage.zong.core.music.MusicElementType;
import com.xenoage.zong.core.music.direction.Direction;
import com.xenoage.zong.core.music.direction.NavigationSign;
import com.xenoage.zong.core.music.direction.Tempo;
import com.xenoage.zong.core.position.MP;
import musicxmltestsuite.tests.base.Base31a;
import musicxmltestsuite.tests.utils.ToDo;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.*;
public class Test31a
implements Base31a, MusicXmlInTest {
@ToDo("add support for multiple direction-types within a single MusicXML direction")
@Test public void test() {
Score score = getScore();
//test directions
for (Tuple2<MP, ?> item : expectedDirections) {
MP mp = item.get1();
List<?> directions = null;
//this test contains also tempo and navigation marker directions, which we find
//in the column header instead, and not in the measure
if (item.get2() instanceof Tempo)
directions = score.getColumnHeader(mp.measure).getTempos().getAll(mp.beat);
else if (item.get2() instanceof NavigationSign)
directions = score.getColumnHeader(mp.measure).getOtherDirections().getAll(mp.beat);
else
directions = score.getMeasure(mp).getDirections().getAll(mp.beat);
//check correct classes
if (item.get2() instanceof Direction) {
//single direction at this beat expected
assertEquals(""+mp, 1, directions.size());
assertEquals(""+mp, item.get2().getClass(), directions.get(0).getClass());
}
else if (item.get2() instanceof List<?>) {
//List<?> l = (List<?>) item.get2();
//multiple directions at this beat expected
//TODO: add support for multiple direction-types within a single MusicXML direction
//assertEquals(""+mp, l.size(), directions.size());
//for (int i : range(l))
// assertEquals(""+mp+"["+i+"]", l.get(i).getClass(), directions.get(i).getClass());
}
}
//segno and coda
assertEquals(MusicElementType.Segno,
score.getColumnHeader(1).getNavigationTarget().getMusicElementType());
assertEquals(MusicElementType.Coda,
score.getColumnHeader(1).getNavigationOrigin().getMusicElementType());
}
}