/*
* Copyright (C) 2013-2017 たんらる
*/
package fourthline.mmlTools;
import static org.junit.Assert.*;
import org.junit.Ignore;
import org.junit.Test;
import fourthline.mmlTools.core.MMLTools;
import fourthline.mmlTools.core.UndefinedTickException;
/**
* @author fourthline
*
*/
public class MMLTrackTest {
/**
* Test method for {@link fourthline.mmlTools.MMLTrack#getMMLStrings()}.
* @throws UndefinedTickException
*/
@Test
public void testGetMMLStrings() throws UndefinedTickException {
MMLTrack track = new MMLTrack().setMML("MML@aaa,bbb,ccc,ddd;");
String expect[] = {
"a8t150v0a8v8aa", // melodyパートのみテンポ指定.
"bbb",
"ccc",
"d8t150v0d8v8dd"
};
new MMLTempoEvent(150, 48).appendToListElement(track.getGlobalTempoList());
String mml[] = track.generate().getMabiMMLArray();
assertArrayEquals(expect, mml);
}
private void checkPlayTimeAndMabinogiTime(String mml) {
MMLTrack track = new MMLTrack().setMML(mml);
MMLTools tools = new MMLTools(mml);
try {
tools.parseMMLforMabinogi();
tools.parsePlayMode(false);
double expectPlayTime = tools.getPlayTime();
double expectMabinogiTime = tools.getMabinogiTime();
System.out.printf("playTime: %f, mabinogiTime: %f\n", expectPlayTime, expectMabinogiTime);
assertEquals(expectPlayTime, track.getPlayTime(), 0.001);
assertEquals(expectMabinogiTime, track.getMabinogiTime(), 0.001);
} catch (UndefinedTickException e) {
e.printStackTrace();
}
}
/**
* test aaaa
* @throws Exception
*/
@Test
public void testTime_0() throws Exception {
String mml = "MML@aaaa;";
checkPlayTimeAndMabinogiTime(mml);
}
/**
* テンポ変速 途中で切れるタイプ
*/
@Test
public void testPlayingShort() throws Exception {
String mml = "MML@t90cccccccccccct150cccc,eeeeeeeeeeeeeeeedddd,;";
checkPlayTimeAndMabinogiTime(mml);
}
/**
* テンポ変速 終わらないタイプ
*/
@Test
public void testPlayingLong() throws Exception {
String mml = "MML@t150cccccccccccct90cccc,eeeeeeeeeeeeeeee,;";
checkPlayTimeAndMabinogiTime(mml);
}
/**
* テンポ変速 終わらないタイプ
*/
@Test
public void testPlayingLong2() throws Exception {
String mml = "MML@t150cccccccccccct90c,eeeeeeeeeeeeeeee;";
checkPlayTimeAndMabinogiTime(mml);
}
/**
* テンポ変速 途中で切れるタイプのMML補正
*/
@Ignore // 2017/01/07: MusicQアップデートでtailFix不要.
@Test
public void testPlayingShortMML() throws Exception {
String mml = "MML@t90cccccccccccct150cccc,eeeeeeeeeeeeeeeedddd,;";
String expectMML = "MML@t90cccccccccccct150ccccr1,eeeeeeeeeeeeeeeedddd,;";
MMLTrack track = new MMLTrack().setMML(mml);
assertEquals(expectMML, track.generate().getMabiMML());
}
/**
* テンポ変速 終わらないタイプのMML補正
*/
@Ignore // 2017/01/07: MusicQアップデートでtailFix不要.
@Test
public void testPlayingLongMML() throws Exception {
String mml = "MML@t150cccccccccccct90cccc,eeeeeeeeeeeeeeee,;";
String expectMML = "MML@t150cccccccccccct90cccct150,eeeeeeeeeeeeeeee,;";
MMLTrack track = new MMLTrack().setMML(mml);
assertEquals(expectMML, track.generate().getMabiMML());
}
/**
* テンポ変速 終わらないタイプのMML補正
*/
@Ignore // 2017/01/07: MusicQアップデートでtailFix不要.
@Test
public void testPlayingLong2MML() throws Exception {
String mml = "MML@t150cccccccccccct90c,eeeeeeeeeeeeeeee;";
String expectMML = "MML@t150cccccccccccct90cr2.v0c64t150,eeeeeeeeeeeeeeee,;";
MMLTrack track = new MMLTrack().setMML(mml);
assertEquals(expectMML, track.generate().getMabiMML());
}
/**
* テンポを跨ぐ場合の分割Tick-Undefined(最小Tick近似) = Exception
* @throws UndefinedTickException
*/
@Ignore // 2017/01/07: MusicQアップデートでtailFix不要.
@Test
public void testGeneric00() throws UndefinedTickException {
String mml = "MML@ggt150gg,rr8r16.a24aa;";
String expectMML = "MML@ggt150ggr64,rr8r16.a32&a64aa,;";
MMLTrack track = new MMLTrack().setMML(mml);
assertEquals(expectMML, track.generate().getMabiMML());
}
/**
* メロディが短い場合の、後続複数のテンポ指定
*/
@Test
public void testTempo_all0() throws Exception {
String mml = "MML@,t150c1c1t120c1c1t130c1c1;";
String expectMML1 = "MML@t150l1rrt120rrt130,l1cccccc,;";
String expectMML2 = "MML@t150v0l1cct120cct130,l1cccccc,;";
MMLTrack track = new MMLTrack().setMML(mml);
assertEquals(expectMML1, track.generate().getOriginalMML());
assertEquals(expectMML2, track.generate().getMabiMML());
}
/**
* tempo tail
* v0c補正と重なっている音は鳴らない場合があります. (mabi)
* @throws UndefinedTickException
*/
@Test
public void testTempo_tail0() throws UndefinedTickException {
String mml = "MML@,c2t130&c1.t200r1t180";
String expectMML1 = "MML@r2t130l1r.t200rt180,l1c&c,;";
String expectMML2 = "MML@v0c2t130,l1c&c,;";
MMLTrack track = new MMLTrack().setMML(mml);
assertEquals(expectMML1, track.generate().getOriginalMML());
assertEquals(expectMML2, track.generate().getMabiMML());
}
@Test
public void testEquals_0() {
MMLTrack track1 = new MMLTrack().setMML("MML@aaa");
MMLTrack track2 = new MMLTrack().setMML("MML@a8.&a16aa");
MMLTrack track3 = new MMLTrack().setMML("MML@aab");
MMLTrack track4 = new MMLTrack().setMML("MML@at150aa");
MMLTrack track5 = new MMLTrack().setMML("MML@aav10a");;
MMLTrack track6 = new MMLTrack().setMML("MML@aaa.");
MMLTrack track7 = new MMLTrack().setMML("MML@t120aaa");
MMLTrack track8 = new MMLTrack().setMML("MML@l16a&a&a&al4aa");
MMLTrack track9 = new MMLTrack().setMML("MML@l16a&a&a&al4aa");
assertTrue( track1.equals(track2) );
assertFalse( track1.equals(track3) );
assertFalse( track1.equals(track4) );
assertFalse( track1.equals(track5) );
assertFalse( track1.equals(track6) );
assertFalse( track1.equals(track7) );
assertFalse( track1.equals(track8) );
assertTrue( track8.equals(track9) );
assertFalse( track1.equals("") );
}
@Test
public void test_generate0() {
MMLTrack track = new MMLTrack();
System.out.println(track.mmlRankFormat());
assertEquals('R', track.mmlRankFormat().charAt(0)); // generated mml
}
@Test
public void test_generate1() {
MMLTrack track = new MMLTrack().setMML("MML@a4a4a4a4");
System.out.println(track.mmlRankFormat());
assertEquals('*', track.mmlRankFormat().charAt(0)); // not generated mml
}
/**
* 不要な終端テンポ(時間計算).
* @throws UndefinedTickException
*/
@Test
public void test_generateTailTempo0() throws UndefinedTickException {
String input = "MML@t120ddddddddrrrrt60,cccccccc";
String expect = "MML@t120dddddddd,cccccccc,;";
MMLTrack track = new MMLTrack().setMML(input);
track.generate();
assertEquals(expect, track.getMabiMML());
}
@Test
public void test_empty() {
MMLTrack track = new MMLTrack();
assertTrue( track.isEmpty() );
track.setMML("MML@aaa;");
assertFalse( track.isEmpty() );
}
@Test
public void test_setPanpot() {
MMLTrack track = new MMLTrack();
assertEquals(64, track.getPanpot());
track.setPanpot(-1);
assertEquals(0, track.getPanpot());
track.setPanpot(128);
assertEquals(127, track.getPanpot());
}
@Test
public void test_invalidMML() {
MMLTrack track = new MMLTrack();
assertEquals("MML@,,;", track.getOriginalMML());
assertEquals("MML@,,;", track.getMabiMML());
track.setMML("aaa");
assertEquals("MML@,,;", track.getOriginalMML());
assertEquals("MML@,,;", track.getMabiMML());
}
@Test
public void test_parseGameFormat() {
String mml = "タイトル : mml1\n作曲者 : author\nメロディー : AAA\n和音 1 : BBB\n和音 2 : CCC\n歌 : DDD\n";
String expect = "MML@AAA,BBB,CCC,DDD;";
MMLTrack track = new MMLTrack().setMML(mml);
assertEquals(expect, track.getOriginalMML());
assertEquals(expect, track.getMabiMML());
}
@Test
public void test_parseGameFormat_invalid() {
String mml = "タイトル : mml1\n作曲者 : author\nメロディー : AAA\n和音 1 : BBB\n和音 2 : CCC\nDDD\n";
String expect = "MML@,,;";
MMLTrack track = new MMLTrack().setMML(mml);
assertEquals(expect, track.getOriginalMML());
assertEquals(expect, track.getMabiMML());
}
}