/*
* Catroid: An on-device visual programming system for Android devices
* Copyright (C) 2010-2016 The Catrobat Team
* (<http://developer.catrobat.org/credits>)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* An additional term exception under section 7 of the GNU Affero
* General Public License, version 3, is available at
* http://developer.catrobat.org/license_additional_term
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.catrobat.catroid.test.pocketmusic.note;
import android.test.AndroidTestCase;
import org.catrobat.catroid.pocketmusic.note.MusicalInstrument;
import org.catrobat.catroid.pocketmusic.note.MusicalKey;
import org.catrobat.catroid.pocketmusic.note.NoteEvent;
import org.catrobat.catroid.pocketmusic.note.NoteLength;
import org.catrobat.catroid.pocketmusic.note.NoteName;
import org.catrobat.catroid.pocketmusic.note.Project;
import org.catrobat.catroid.pocketmusic.note.Track;
public class TrackTest extends AndroidTestCase {
public void testGetInstrument() {
Track track = TrackTestDataFactory.createTrack();
assertEquals("Failed to create Track", MusicalInstrument.ACOUSTIC_GRAND_PIANO, track.getInstrument());
}
public void testAddNoteEvent1() {
Track track = TrackTestDataFactory.createTrack();
track.addNoteEvent(0, NoteEventTestDataFactory.createNoteEvent());
assertEquals("Failed to add note Event", 1, track.size());
}
public void testAddNoteEvent2() {
Track track = TrackTestDataFactory.createTrack();
track.addNoteEvent(0, NoteEventTestDataFactory.createNoteEvent());
track.addNoteEvent(0, NoteEventTestDataFactory.createNoteEvent());
assertEquals("Failed to add note Event", 1, track.size());
}
public void testGetNoteEventsForTick() {
Track track = TrackTestDataFactory.createTrack();
long tick = 0;
NoteEvent noteEvent = NoteEventTestDataFactory.createNoteEvent();
track.addNoteEvent(tick, noteEvent);
assertEquals("Failed to get Note event for Tick", noteEvent, track.getNoteEventsForTick(tick).get(0));
}
public void testEquals1() {
long tick = 0;
Track track1 = TrackTestDataFactory.createTrack();
track1.addNoteEvent(tick, NoteEventTestDataFactory.createNoteEvent());
Track track2 = TrackTestDataFactory.createTrack();
track2.addNoteEvent(tick, NoteEventTestDataFactory.createNoteEvent());
assertTrue("Equal comparison failed", track1.equals(track2));
}
public void testEquals2() {
long tick = 0;
Track track1 = TrackTestDataFactory.createTrack();
track1.addNoteEvent(tick, NoteEventTestDataFactory.createNoteEvent(NoteName.C1));
Track track2 = TrackTestDataFactory.createTrack();
track2.addNoteEvent(tick, NoteEventTestDataFactory.createNoteEvent(NoteName.C2));
assertFalse("Equal comparison failed", track1.equals(track2));
}
public void testEquals3() {
Track track1 = TrackTestDataFactory.createTrack();
track1.addNoteEvent(0, NoteEventTestDataFactory.createNoteEvent());
Track track2 = TrackTestDataFactory.createTrack();
assertFalse("Equal comparison failed", track1.equals(track2));
}
public void testEquals4() {
Track track1 = TrackTestDataFactory.createTrack(MusicalInstrument.ACCORDION);
Track track2 = TrackTestDataFactory.createTrack(MusicalInstrument.ALTO_SAX);
assertFalse("Equal comparison failed", track1.equals(track2));
}
public void testEquals5() {
Track track1 = TrackTestDataFactory.createTrack(MusicalKey.BASS);
Track track2 = TrackTestDataFactory.createTrack(MusicalKey.VIOLIN);
assertFalse("Equal comparison failed", track1.equals(track2));
}
public void testEquals6() {
Track track = TrackTestDataFactory.createTrack();
assertFalse("Equal comparison failed", track.equals(null));
}
public void testEquals7() {
Track track = TrackTestDataFactory.createTrack();
assertFalse("Equal comparison failed", track.equals(""));
}
public void testToString() {
Track track = TrackTestDataFactory.createTrack();
String expectedString = "[Track] instrument=" + MusicalInstrument.ACOUSTIC_GRAND_PIANO
+ " key=" + track.getKey()
+ " size=" + track.size();
assertEquals("Failed to create String from track", expectedString, track.toString());
}
public void testSetTickBasedOnTrack1() {
Track track = TrackTestDataFactory.createTrack();
assertEquals("Failed to set Tick based on Track", 0, track.getLastTick());
}
public void testSetTickBasedOnTrack2() {
Track track = TrackTestDataFactory.createTrack();
long tick = 0;
track.addNoteEvent(tick, NoteEventTestDataFactory.createNoteEvent(true));
tick += NoteLength.QUARTER.toTicks(Project.DEFAULT_BEATS_PER_MINUTE);
track.addNoteEvent(tick, NoteEventTestDataFactory.createNoteEvent(false));
assertEquals("Failed to set Tick based on Track", tick, track.getLastTick());
}
public void testCopyTrack() {
Track track = TrackTestDataFactory.createSimpleTrack();
Track copyTrack = new Track(track);
assertTrue("Failed to create copy from Track", track != copyTrack);
assertTrue("Copied Track not equal to original Track", track.equals(copyTrack));
}
public void testEmpty1() {
Track track = TrackTestDataFactory.createTrack();
assertTrue("Track not empty", track.empty());
}
public void testEmpty2() {
Track track = TrackTestDataFactory.createTrack();
long tick = 0;
track.addNoteEvent(tick, NoteEventTestDataFactory.createNoteEvent());
assertFalse("Track not empty", track.empty());
}
public void testGetTotalTimeInMilliseconds() {
Track track = TrackTestDataFactory.createTrack();
NoteLength noteLength = NoteLength.QUARTER;
long expecteTotalTime = noteLength.toMilliseconds(Project.DEFAULT_BEATS_PER_MINUTE);
long tick = 0;
track.addNoteEvent(tick, NoteEventTestDataFactory.createNoteEvent(true));
tick += noteLength.toTicks(Project.DEFAULT_BEATS_PER_MINUTE);
track.addNoteEvent(tick, NoteEventTestDataFactory.createNoteEvent(false));
assertEquals("Failed to get total time in Milliseconds", expecteTotalTime, track.getTotalTimeInMilliseconds());
}
}