/* * Copyright (C) 2015 たんらる */ package fourthline.mabiicco.ui.editor; import static org.junit.Assert.*; import java.lang.reflect.Field; import java.util.List; import javax.swing.AbstractButton; import javax.swing.JComponent; import org.junit.Test; import fourthline.mmlTools.MMLEventList; import fourthline.mmlTools.MMLNoteEvent; public final class MMLNotePropertyPanelTest { private void assertNotePropertyEnabled(MMLNotePropertyPanel panel, String name, boolean b) { try { Field field = panel.getClass().getDeclaredField(name); field.setAccessible(true); boolean actual = ((JComponent)field.get(panel)).isEnabled(); assertEquals(b, actual); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { fail(e.getMessage()); } } private void setNotePropertySelected(MMLNotePropertyPanel panel, String name, boolean b) { try { Field field = panel.getClass().getDeclaredField(name); field.setAccessible(true); ((AbstractButton)field.get(panel)).setSelected(b); } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) { fail(e.getMessage()); } } private void assertCheckBoxStatus(String mml, boolean velocityCheckBox, // 音量コマンドチェックBox boolean velocityValueField, // 音量入力欄 boolean incDecrVelocityEditOption, // 増減入力チェックBox boolean tuningNoteCheckBox, // 調律チェックBox boolean tuningBaseList // 調律設定 ) { MMLEventList eventList = new MMLEventList(mml); List<MMLNoteEvent> noteList = eventList.getMMLNoteEventList(); MMLNoteEvent noteEvent[] = new MMLNoteEvent[] { noteList.get(1), noteList.get(2) }; MMLNotePropertyPanel panel = new MMLNotePropertyPanel(noteEvent, eventList); assertNotePropertyEnabled(panel, "velocityCheckBox", velocityCheckBox); assertNotePropertyEnabled(panel, "velocityValueField", velocityValueField); assertNotePropertyEnabled(panel, "incDecrVelocityEditOption", incDecrVelocityEditOption); assertNotePropertyEnabled(panel, "tuningNoteCheckBox", tuningNoteCheckBox); assertNotePropertyEnabled(panel, "tuningBaseList", tuningBaseList); } @Test public void test() { assertCheckBoxStatus( "abc", true, // 音量コマンドチェックBox false, // 音量入力欄 false, // 増減入力チェックBox true, // 調律チェックBox false); // 調律設定 assertCheckBoxStatus( "av5bc", true, // 音量コマンドチェックBox true, // 音量入力欄 false, // 増減入力チェックBox true, // 調律チェックBox false); // 調律設定 assertCheckBoxStatus( "al64b&b&b&b&b&b&b&bc", true, // 音量コマンドチェックBox false, // 音量入力欄 false, // 増減入力チェックBox false, // 調律チェックBox false); // 調律設定 assertCheckBoxStatus( "al64b&b&b&b&b&b&b&bc&c&c&c&c&c&c&c", true, // 音量コマンドチェックBox false, // 音量入力欄 false, // 増減入力チェックBox true, // 調律チェックBox true); // 調律設定 assertCheckBoxStatus( "al64b&b&b&b&b&b&b&bl32c&c&c&c&c&c&c&c", true, // 音量コマンドチェックBox false, // 音量入力欄 false, // 増減入力チェックBox false, // 調律チェックBox false); // 調律設定 } @Test public void test_editVelocityOptionView() { MMLEventList eventList = new MMLEventList("abc"); List<MMLNoteEvent> noteList = eventList.getMMLNoteEventList(); MMLNoteEvent noteEvent[] = new MMLNoteEvent[] { noteList.get(1), noteList.get(2) }; MMLNotePropertyPanel panel = new MMLNotePropertyPanel(noteEvent, eventList); // 音量コマンドが選択されていない状態. assertNotePropertyEnabled(panel, "velocityCheckBox", true); assertNotePropertyEnabled(panel, "velocityValueField", false); assertNotePropertyEnabled(panel, "onlySelectedNoteOption", true); assertNotePropertyEnabled(panel, "incDecrVelocityEditOption", false); assertNotePropertyEnabled(panel, "velocityValueField2", false); // 音量コマンドを選択. setNotePropertySelected(panel, "velocityCheckBox", true); panel.actionPerformed(null); assertNotePropertyEnabled(panel, "velocityCheckBox", true); assertNotePropertyEnabled(panel, "velocityValueField", true); assertNotePropertyEnabled(panel, "onlySelectedNoteOption", true); assertNotePropertyEnabled(panel, "incDecrVelocityEditOption", false); assertNotePropertyEnabled(panel, "velocityValueField2", false); // 選択したノートだけを変更. setNotePropertySelected(panel, "onlySelectedNoteOption", true); panel.actionPerformed(null); assertNotePropertyEnabled(panel, "velocityCheckBox", false); assertNotePropertyEnabled(panel, "velocityValueField", true); assertNotePropertyEnabled(panel, "onlySelectedNoteOption", true); assertNotePropertyEnabled(panel, "incDecrVelocityEditOption", true); assertNotePropertyEnabled(panel, "velocityValueField2", false); // 増減量指定. setNotePropertySelected(panel, "incDecrVelocityEditOption", true); panel.actionPerformed(null); assertNotePropertyEnabled(panel, "velocityCheckBox", false); assertNotePropertyEnabled(panel, "velocityValueField", false); assertNotePropertyEnabled(panel, "onlySelectedNoteOption", true); assertNotePropertyEnabled(panel, "incDecrVelocityEditOption", true); assertNotePropertyEnabled(panel, "velocityValueField2", true); } }