package musicxmltestsuite.tests.musicxmlin; import com.xenoage.zong.core.Score; import com.xenoage.zong.core.music.direction.Direction; import com.xenoage.zong.core.music.direction.Words; import com.xenoage.zong.core.position.MP; import com.xenoage.zong.core.text.FormattedText; import com.xenoage.zong.core.text.FormattedTextElement; import com.xenoage.zong.core.text.FormattedTextParagraph; import lombok.val; import musicxmltestsuite.tests.base.Base32b; import org.junit.Test; import java.util.List; import static org.junit.Assert.*; public class Test32b implements Base32b, MusicXmlInTest { @Test public void testFontSize() { Score score = getScore(); //in the following pairs of words, the left words has smaller font size //than the right words int[][] indexPairs = { {1, 2}, //medium, large {4, 0}, //small, medium }; for (int[] indexPair : indexPairs) { float size1 = getFontSize(score, indexPair[0]); float size2 = getFontSize(score, indexPair[1]); assertTrue(size1 < size2); } } private float getFontSize(Score score, int wordsIndex) { MP mp = expectedTexts.get(wordsIndex).get1(); FormattedText text = getTextAt(score, mp); return getFontSize(text); } private FormattedText getTextAt(Score score, MP mp) { Words words = (Words) score.getMeasure(mp).getDirections().get(mp.beat); return (FormattedText) words.getText(); } private float getFontSize(FormattedText text) { return text.getFirstParagraph().getElements().get(0).getStyle().getFont().getSize(); } @Test public void testStyle() { Score score = getScore(); for (int i = 0; i < expectedTexts.size(); ) { MP mp = expectedTexts.get(i).get1(); List<Direction> directions = score.getMeasure(mp).getDirections().getAll(mp.beat); assertTrue(""+mp, directions.size() > 0); for (val direction : directions) { assertTrue("" + mp, direction instanceof Words); check((Words) direction, expectedTexts.get(i).get2(), mp); i++; } } } private void check(Words words, Text expectedText, MP mp) { FormattedTextElement elem = getFormattedTextElement(words, mp); assertEquals(""+mp, expectedText.getText(), elem.getText()); assertEquals(""+mp, expectedText.getStyle(), elem.getStyle().getFont().getStyle()); assertEquals(""+mp, expectedText.getColor(), elem.getStyle().getColor()); //TODO: wrong position coordinates in MusicXML file. for example, placement says "below" //but default-y is positive. and default-x should be relative to the measure start //bug reported: https://code.google.com/p/lilypond/issues/detail?id=4172 //assertEquals(""+mp, expectedText.getPlacement(), words.getPositioning()); } private FormattedTextElement getFormattedTextElement(Words words, MP mp) { assertTrue(""+mp, words.getText() instanceof FormattedText); FormattedText wordsText = (FormattedText) words.getText(); assertEquals(""+mp, 1, wordsText.getParagraphs().size()); FormattedTextParagraph wordsPara = wordsText.getFirstParagraph(); assertEquals(""+mp, 1, wordsPara.getElements().size()); FormattedTextElement wordsElem = wordsPara.getElements().getFirst(); return wordsElem; } }