package musicxmltestsuite.tests.musicxmlin;
import static com.xenoage.utils.collections.CollectionUtils.set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.List;
import musicxmltestsuite.tests.base.Base32a;
import org.junit.Test;
import com.xenoage.utils.kernel.Tuple2;
import com.xenoage.zong.core.Score;
import com.xenoage.zong.core.music.chord.Chord;
import com.xenoage.zong.core.music.direction.Direction;
import com.xenoage.zong.core.position.MP;
public class Test32a
implements Base32a, MusicXmlInTest {
@Test public void test() {
Score score = getScore();
for (Tuple2<MP, ?> item : expectedAnnotations) {
MP mp = item.get1();
List<?> annotations = null;
Chord chord = (Chord) score.getVoice(mp).getElementAt(mp.beat);
assertNotNull(""+mp, chord);
//in this test, the chords contain either directions or annotations
if (false == chord.getDirections().isEmpty())
annotations = chord.getDirections();
else
annotations = chord.getAnnotations();
//check correct classes
if (item.get2() instanceof Direction) {
//single direction at this beat expected
assertEquals(""+mp, 1, annotations.size());
assertEquals(""+mp, item.get2().getClass(), annotations.get(0).getClass());
}
else if (item.get2() instanceof List<?>) {
//list of annotations
//we ignore the order here (MusicXML does not contain a order)
assertEquals(""+mp, set((List<?>) item.get2()), set(annotations));
}
else {
//single annotation
assertEquals(""+mp, 1, annotations.size());
assertEquals(""+mp, item.get2(), annotations.get(0));
}
}
}
}