package com.xenoage.zong.commands.core.music;
import static com.xenoage.utils.math.Fraction.fr;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.xenoage.utils.document.command.CommandPerformer;
import com.xenoage.zong.core.Score;
import com.xenoage.zong.core.ScoreFactory;
import com.xenoage.zong.core.header.ColumnHeader;
import com.xenoage.zong.core.music.MeasureSide;
import com.xenoage.zong.core.music.barline.Barline;
import com.xenoage.zong.core.music.barline.BarlineStyle;
/**
* Tests for {@link ColumnElementWrite}.
*
* @author Andreas Wenger
*/
public class ColumnElementWriteTest {
@Test public void test() {
Score score = ScoreFactory.create1Staff4Measures();
CommandPerformer cmd = score.getCommandPerformer();
ColumnHeader column2 = score.getColumnHeader(2);
//write start barline, middle barline and end barline
Barline b1 = Barline.barlineRegular();
Barline b2 = Barline.barlineRegular();
Barline b3 = Barline.barline(BarlineStyle.LightHeavy);
cmd.execute(new ColumnElementWrite(b1, column2, null, MeasureSide.Left));
cmd.execute(new ColumnElementWrite(b2, column2, fr(1, 4), null));
cmd.execute(new ColumnElementWrite(b3, column2, null, MeasureSide.Right));
assertEquals(b1, column2.getStartBarline());
assertEquals(b2, column2.getMiddleBarlines().get(fr(1, 4)));
assertEquals(b3, column2.getEndBarline());
//overwrite middle barline
Barline b4 = Barline.barlineRegular();
cmd.execute(new ColumnElementWrite(b4, column2, fr(1, 4), null));
assertEquals(b4, column2.getMiddleBarlines().get(fr(1, 4)));
//undo. b2 should be here again
cmd.undo();
assertEquals(b2, column2.getMiddleBarlines().get(fr(1, 4)));
//undo all steps. the middle barline should not exist any more
cmd.undoMultipleSteps(3);
assertEquals(0, column2.getMiddleBarlines().size());
}
}