/*
* Jajuk
* Copyright (C) The Jajuk Team
* http://jajuk.info
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package org.jajuk.services.players;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.io.FileUtils;
import org.jajuk.JajukTestCase;
import org.jajuk.MockPlayer;
import org.jajuk.TestHelpers;
import org.jajuk.base.Album;
import org.jajuk.base.Artist;
import org.jajuk.base.Device;
import org.jajuk.base.Directory;
import org.jajuk.base.DirectoryManager;
import org.jajuk.base.File;
import org.jajuk.base.FileManager;
import org.jajuk.base.Genre;
import org.jajuk.base.Track;
import org.jajuk.base.TrackManager;
import org.jajuk.base.Type;
import org.jajuk.base.Year;
import org.jajuk.services.core.SessionService;
import org.jajuk.services.startup.StartupCollectionService;
import org.jajuk.util.Conf;
import org.jajuk.util.Const;
import org.jajuk.util.UtilFeatures;
import org.jajuk.util.error.JajukException;
/**
* .
*/
public class TestQueueModel extends JajukTestCase {
@Override
protected void specificSetUp() throws Exception {
UtilFeatures.storePersistedPlayingPosition(0);
// reset before each test to have a clean start for each test as most
// data is held statically for QueueModel
QueueModel.reset();
QueueModel.itemLast = null;
QueueModel.stopRequest();
// reset conf changes to default
Conf.setProperty(Const.CONF_STATE_CONTINUE, "false");
Conf.setProperty(Const.CONF_STATE_CONTINUE, "false");
Conf.setProperty(Const.CONF_STATE_SHUFFLE, "false");
// remove any registered files
for (File file : FileManager.getInstance().getFiles()) {
FileManager.getInstance().removeFile(file);
}
}
// helper method to emma-coverage of the unused constructor
/**
* Test private constructor.
*
*
* @throws Exception the exception
*/
public void testPrivateConstructor() throws Exception {
// For EMMA code-coverage tests
TestHelpers.executePrivateConstructor(QueueModel.class);
}
/*
* (non-Javadoc)
*
* @see junit.framework.TestCase#tearDown()
*/
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#reset()}.
*
* @throws Exception the exception
*/
public void testReset() throws Exception {
// nothing to reset up-front
QueueModel.reset();
assertEquals(0, QueueModel.getQueueSize());
// things are reset with queued items
addItems(10);
QueueModel.goTo(4);
QueueModel.reset();
assertEquals(0, QueueModel.getQueueSize());
assertEquals(-1, QueueModel.getIndex());
}
/**
* Test method for.
*
* {@link org.jajuk.services.players.QueueModel#setRepeatModeToAll(boolean)}.
*/
public void testSetRepeatModeToAll() {
QueueModel.setRepeatModeToAll(false);
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#push(java.util.List, boolean)}
* .
*/
public void testPushListOfStackItemBoolean() throws Exception {
StackItem item = new StackItem(TestHelpers.getFile("file1", true));
TestHelpers.push(item, true, false);
assertEquals(1, QueueModel.getQueue().size());
}
/**
* Test push list of stack item boolean no push.
*
*
* @throws Exception the exception
*/
public void testPushListOfStackItemBooleanNoPush() throws Exception {
StackItem item = new StackItem(TestHelpers.getFile("file1", true));
TestHelpers.push(item, false, false);
assertEquals(1, QueueModel.getQueue().size());
}
/**
* Check right behavior when pushing void list of items.
* If run with GUI, you should get a warning popup
*
* @throws Exception the exception
*/
public void testPushListOfStackItemVoid() throws Exception {
List<StackItem> list = new ArrayList<StackItem>();
QueueModel.push(list, false);
// there is a thread started, so delay a bit to let that happen...
Thread.sleep(400);
assertEquals(0, QueueModel.getQueue().size());
}
/**
* Test push list of stack item boolean null items.
*
*
* @throws Exception the exception
*/
public void testPushListOfStackItemBooleanNullItems() throws Exception {
List<StackItem> list = new ArrayList<StackItem>();
list.add(new StackItem(TestHelpers.getFile("file1", true)));
list.add(null);
list.add(new StackItem(TestHelpers.getFile("file3", true)));
TestHelpers.push(list, true, false);
assertEquals(2, QueueModel.getQueue().size());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#push(java.util.List, boolean, boolean)}
* .
*/
public void testPushListOfStackItemBooleanBoolean() throws Exception {
StackItem item = new StackItem(TestHelpers.getFile("file1", true));
TestHelpers.push(item, true, true);
assertEquals(1, QueueModel.getQueue().size());
}
/**
* Test push list of stack item boolean boolean no push next.
*
*
* @throws Exception the exception
*/
public void testPushListOfStackItemBooleanBooleanNoPushNext() throws Exception {
StackItem item = new StackItem(TestHelpers.getFile("file1", true));
TestHelpers.push(item, false, false);
// we try to wait for the thread started inside push() to finish
TestHelpers.waitForThreadToFinish("Queue Push Thread");
assertEquals(1, QueueModel.getQueue().size());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#push(org.jajuk.services.players.StackItem, boolean)}
* .
*/
public void testPushStackItemBoolean() throws Exception {
QueueModel.push(new StackItem(TestHelpers.getFile("file1", true)), true);
// we try to wait for the thread started inside push() to finish
TestHelpers.waitForThreadToFinish("Queue Push Thread");
assertEquals(1, QueueModel.getQueue().size());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#push(org.jajuk.services.players.StackItem, boolean, boolean)}
* .
*/
public void testPushStackItemBooleanBoolean() throws Exception {
QueueModel.push(new StackItem(TestHelpers.getFile("file1", true)), true, true);
// we try to wait for the thread started inside push() to finish
TestHelpers.waitForThreadToFinish("Queue Push Thread");
assertEquals(1, QueueModel.getQueue().size());
}
/**
* Adds the items.
*
*
* @param count number of items to create
* @param repeat repeat mode ?
* @param userLaunched : is it an excplicite user action ?
* @throws Exception the exception
*/
private List<StackItem> addItems(int count, boolean repeat, boolean userLaunched)
throws Exception {
List<StackItem> list = new ArrayList<StackItem>();
for (int i = 0; i < count; i++) {
list.add(new StackItem(TestHelpers.getFile("file" + i, true), userLaunched, repeat));
}
QueueModel.insert(list, QueueModel.getQueueSize());
return list;
}
/**
* Adds the items.
*
*
* @param count number of items to create
* @throws Exception the exception
*/
private List<StackItem> addItems(int count) throws Exception {
List<StackItem> list = new ArrayList<StackItem>();
for (int i = 0; i < count; i++) {
list.add(new StackItem(TestHelpers.getFile("file" + i, true)));
}
QueueModel.insert(list, QueueModel.getQueueSize());
return list;
}
/**
* Test method for.
*
* {@link org.jajuk.services.players.QueueModel#launchRadio(org.jajuk.services.webradio.WebRadio)}
* .
*/
public void testLaunchRadio() {
QueueModel.launchRadio(TestHelpers.getWebRadio());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#containsRepeat()}.
*/
public void testContainsRepeat() throws Exception {
addItems(2);
assertFalse(QueueModel.containsRepeat());
QueueModel.setRepeatModeToAll(true);
assertTrue("Items: " + QueueModel.getQueue(), QueueModel.containsRepeat());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#finished()}.
*
* @throws Exception the exception
*/
public void testFinished() throws Exception {
// without item it just returns
QueueModel.finished();
// with items, it will go to the next ine
addItems(10);
QueueModel.goTo(0);
assertEquals(0, QueueModel.getIndex());
QueueModel.finished();
assertEquals(1, QueueModel.getIndex());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#finished()}.
*
* @throws Exception the exception
*/
public void testFinishedStoped() throws Exception {
// without item it just returns
QueueModel.finished();
// with items, it will go to the next ine
addItems(10);
QueueModel.goTo(0);
assertEquals(0, QueueModel.getIndex());
QueueModel.stopRequest();
QueueModel.finished();
assertEquals(1, QueueModel.getIndex());
assertTrue(QueueModel.isStopped());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#finished()}.
* Test for feature #1441 (Repeat all shuffle mode) : in repeat
* all mode + shuffle mode, queue should be shuffled when reaching its end
*/
public void testFinishedRepeatAndShuffle() throws Exception {
QueueModel.clear();
addItems(5);
StackItem firstItem = QueueModel.getItem(0);
QueueModel.setRepeatModeToAll(true);
Conf.setProperty(Const.CONF_STATE_REPEAT, "false");
Conf.setProperty(Const.CONF_STATE_REPEAT_ALL, "true");
Conf.setProperty(Const.CONF_STATE_SHUFFLE, "true");
assertTrue(QueueModel.containsOnlyRepeat());
QueueModel.finished();
QueueModel.finished();
QueueModel.finished();
QueueModel.finished();
assertTrue(QueueModel.getItem(0).equals(firstItem));
QueueModel.finished();
// Make sure that first item is no more the same
assertFalse("Item0: " + QueueModel.getItem(0) + "\nFirstItem: " + firstItem,
!(QueueModel.getItem(0).equals(firstItem)));
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#finished(boolean)}.
*/
public void testFinishedBoolean() throws Exception {
// without item it just returns
QueueModel.finished(true);
// with items, it will go to the next line
addItems(10);
QueueModel.goTo(0);
assertEquals(0, QueueModel.getIndex());
QueueModel.finished(true);
assertEquals(1, QueueModel.getIndex());
// still 10 as we do not remove items from queue in default setup
assertEquals(10, QueueModel.getQueueSize());
}
/**
* Test finished end of queue no planned.
*
*
* @throws Exception the exception
*/
public void testFinishedEndOfQueueNoPlanned() throws Exception {
// without item it just returns
QueueModel.finished(true);
// with items, it will go to the next line
addItems(2);
QueueModel.goTo(0);
assertEquals(0, QueueModel.getIndex());
QueueModel.finished(true);
assertEquals(1, QueueModel.getIndex());
// still 2 as we do not remove items from queue in default setup
assertEquals(2, QueueModel.getQueueSize());
}
/**
* Test finished end of queue with planned.
*
*
* @throws Exception the exception
*/
public void testFinishedEndOfQueueWithPlanned() throws Exception {
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
Conf.setProperty(Const.CONF_STATE_REPEAT, "false");
Conf.setProperty(Const.CONF_STATE_REPEAT_ALL, "false");
// without item it just returns
QueueModel.finished(true);
// with items, it will go to the next line
addItems(2);
QueueModel.goTo(0);
assertEquals(0, QueueModel.getIndex());
QueueModel.finished(true);
assertEquals(1, QueueModel.getIndex());
// still 2 as we do not remove items from queue in default setup
assertEquals(2, QueueModel.getQueueSize());
// start a track
StackItem item = new StackItem(TestHelpers.getFile("file" + 21, true));
TestHelpers.push(item, true, false);
// we try to wait for the thread started inside push() to finish
TestHelpers.waitForThreadToFinish("Queue Push Thread");
assertEquals(3, QueueModel.getQueue().size());
QueueModel.finished(true);
QueueModel.finished(true);
assertEquals(4, QueueModel.getQueue().size()); // a planned track has been selected, we have now 4 tracks in queue
assertEquals(3, QueueModel.getIndex());
}
/**
* Test finished end of queue without continue mode.
*
*
* @throws Exception the exception
*/
public void testFinishedNoContinueMode() throws Exception {
Conf.setProperty(Const.CONF_STATE_CONTINUE, "false");
// without item it just returns
QueueModel.finished(true);
// with items, it will go to the next line
addItems(1);
QueueModel.goTo(0);
assertEquals(0, QueueModel.getIndex());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#finished(boolean)}.
*/
public void testFinishedRepeatSingleItem() throws Exception {
addItems(1);
StackItem si = QueueModel.getItem(0);
si.setRepeat(true);
QueueModel.goTo(0);
// Finish the track, should play again
QueueModel.finished();
StackItem newSi = QueueModel.getItem(0);
assertEquals(0, QueueModel.getIndex());
assertTrue(newSi.isRepeat());
assertEquals(newSi, QueueModel.getCurrentItem());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#finished(boolean)}.
*/
public void testFinishedRepeatLastItem() throws Exception {
// We want to make sure that everything's ok when current item is in repeat
// mode and the last in the queue
addItems(10);
StackItem si = QueueModel.getItem(9);
si.setRepeat(true);
QueueModel.goTo(9);
// Finish the track, should play again
QueueModel.finished();
// same track should be played again as it is in repeat mode and the first
// one at index 0 is not
StackItem newSi = QueueModel.getCurrentItem();
assertEquals(newSi, si);
assertTrue(newSi.isRepeat());
// Now the same with first track in repeat mode
QueueModel.getItem(0).setRepeat(true);
QueueModel.finished();
newSi = QueueModel.getCurrentItem();
assertEquals(newSi, QueueModel.getItem(0));
assertTrue(newSi.isRepeat());
assertTrue(si.isRepeat());
}
/**
* Test finished repeat last item not last.
*
*
* @throws Exception the exception
*/
public void testFinishedRepeatLastItemNotLast() throws Exception {
// We want to make sure that everything's ok when current item is in repeat
// mode and the last in the queue
addItems(10);
StackItem si = QueueModel.getItem(5);
si.setRepeat(true);
QueueModel.goTo(5);
// Finish the track, should play again
QueueModel.finished();
// same track should be played again as it is in repeat mode and the first
// one at index 0 is not
StackItem newSi = QueueModel.getCurrentItem();
assertEquals(newSi, si);
assertTrue(newSi.isRepeat());
// Now the same with first track in repeat mode
QueueModel.getItem(6).setRepeat(true);
QueueModel.finished();
newSi = QueueModel.getCurrentItem();
assertEquals(newSi, QueueModel.getItem(6));
assertTrue(newSi.isRepeat());
assertTrue(si.isRepeat());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#finished(boolean)}.
*/
public void testFinishedRepeatNotLastItem() throws Exception {
// We want to make sure that everything's ok when current item is in repeat
// mode and *not* the last in the queue
addItems(10);
StackItem si = QueueModel.getItem(5);
si.setRepeat(true);
QueueModel.goTo(5);
// Finish the track, should play again
QueueModel.finished();
// same track should be played again as it is in repeat mode and the first
// one at index 0 is not
StackItem newSi = QueueModel.getCurrentItem();
assertEquals(newSi, si);
assertTrue(newSi.isRepeat());
// Now the same with first track in repeat mode
QueueModel.getItem(6).setRepeat(true);
QueueModel.finished();
newSi = QueueModel.getCurrentItem();
assertEquals(newSi, QueueModel.getItem(6));
assertTrue(newSi.isRepeat());
assertTrue(si.isRepeat());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#goTo(int)}
* .
*
* @throws Exception the exception
*/
public void testSetAndGetIndex() throws Exception {
// with items, it will go to the next ine
addItems(10);
QueueModel.goTo(0);
assertEquals(0, QueueModel.getIndex());
QueueModel.goTo(3);
assertEquals(3, QueueModel.getIndex());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#computesPlanned(boolean)}.
*/
public void testComputesPlanned() throws Exception {
// without tracks it will not do much
QueueModel.computesPlanned(false);
// with tracks, it will look at planned items
addItems(10);
QueueModel.computesPlanned(true);
}
/**
* Test computes planned clear.
*
*
* @throws Exception the exception
*/
public void testComputesPlannedClear() throws Exception {
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
// without tracks it will not do much, but it will hit the "clearPlanned"
QueueModel.computesPlanned(true);
}
/**
* Test computes planned shuffle.
*
*
* @throws Exception the exception
*/
public void testComputesPlannedShuffle() throws Exception {
// set Property to hit the "Shuffle" branch
Conf.setProperty(Const.CONF_STATE_SHUFFLE, "true");
// with tracks, it will look at planned items
addItems(10);
QueueModel.computesPlanned(true);
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#clear()}.
*
* @throws Exception the exception
*/
public void testClear() throws Exception {
// nothing to reset up-front
QueueModel.clear();
assertEquals(0, QueueModel.getQueueSize());
// things are reset with queued items
addItems(10);
QueueModel.goTo(4);
QueueModel.clear();
assertEquals(0, QueueModel.getQueueSize());
assertEquals(-1, QueueModel.getIndex());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#containsOnlyRepeat()}.
*/
public void testContainsOnlyRepeat() throws Exception {
assertTrue(QueueModel.containsOnlyRepeat());
addItems(10);
assertFalse(QueueModel.containsOnlyRepeat());
QueueModel.setRepeatModeToAll(true);
assertTrue(QueueModel.containsOnlyRepeat());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#playPrevious()}.
*/
public void testPlayPrevious() throws Exception {
// do nothing without items
QueueModel.playPrevious();
// with items:
addItems(10);
QueueModel.goTo(2);
QueueModel.playPrevious();
assertEquals(1, QueueModel.getIndex());
}
/**
* Test play previous at zero.
*
*
* @throws Exception the exception
*/
public void testPlayPreviousAtZero() throws Exception {
// do nothing without items
QueueModel.playPrevious();
// with items:
addItems(10);
QueueModel.goTo(0);
QueueModel.playPrevious();
assertEquals(0, QueueModel.getIndex());
}
/**
* Test play previous at zero with repeat.
*
*
* @throws Exception the exception
*/
public void testPlayPreviousAtZeroWithRepeat() throws Exception {
// do nothing without items
QueueModel.playPrevious();
// with items:
addItems(10);
QueueModel.goTo(0);
QueueModel.getItem(0).setRepeat(true);
QueueModel.playPrevious();
assertEquals(0, QueueModel.getIndex());
}
/**
* Test method for.
*
* {@link org.jajuk.services.players.QueueModel#playPreviousAlbum()}.
*/
public void testPlayPreviousAlbum() {
QueueModel.playPreviousAlbum();
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#playNext()}.
*
* @throws Exception the exception
*/
public void testPlayNext() throws Exception {
// do nothing without items
QueueModel.playNext();
// with items:
addItems(10);
QueueModel.goTo(2);
QueueModel.playNext();
assertEquals(3, QueueModel.getIndex());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#playNext()}.
* We test case where we launch several tracks in simple repeat mode and we force a next.
*
* @throws Exception the exception
*/
public void testPlayNextSetOfSimpleRepeat() throws Exception {
// with items:
addItems(10, true, true);
assertTrue(QueueModel.getItem(0).isRepeat());
assertTrue(QueueModel.getItem(9).isRepeat());
assertEquals(QueueModel.getQueueSize(), 10);
QueueModel.goTo(0);
Thread.sleep(100);
assertEquals(0, QueueModel.getIndex());
QueueModel.finished(true);
Thread.sleep(100);
assertTrue(QueueModel.getItem(0).isRepeat());
assertEquals(1, QueueModel.getIndex());
assertEquals(QueueModel.getQueueSize(), 10);
}
/**
* Test method for.
*
* {@link org.jajuk.services.players.QueueModel#playNextAlbum()}.
*/
public void testPlayNextAlbum() {
QueueModel.playNextAlbum();
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#getPlayingFile()}.
*/
public void testGetPlayingFile() throws Exception {
assertNull(QueueModel.getPlayingFile());
addItems(10);
// QueueModel.finished(true);
QueueModel.goTo(0);
assertFalse(QueueModel.isStopped());
assertNotNull(QueueModel.getPlayingFile());
// we start at 0
assertEquals("file0", QueueModel.getPlayingFile().getName());
}
/**
* Test get playing file title.
*
*
* @throws Exception the exception
*/
public void testGetPlayingFileTitle() throws Exception {
assertNull(QueueModel.getPlayingFileTitle());
addItems(10);
// QueueModel.finished(true);
QueueModel.goTo(0);
assertFalse(QueueModel.isStopped());
assertNotNull(QueueModel.getPlayingFileTitle());
// we start at 0
assertTrue(QueueModel.getPlayingFileTitle(), QueueModel.getPlayingFileTitle().contains("file"));
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#getCurrentItem()}.
*/
public void testGetCurrentItem() throws Exception {
// no item without items
assertNull(QueueModel.getCurrentItem());
addItems(10);
QueueModel.goTo(2);
assertEquals("file2", QueueModel.getCurrentItem().getFile().getName());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#getItem(int)}.
*
* @throws Exception the exception
*/
public void testGetItem() throws Exception {
addItems(10);
assertEquals("file0", QueueModel.getItem(0).getFile().getName());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#canUnmount(org.jajuk.base.Device)}
* .
*/
public void testCanUnmount() throws Exception {
Device device = TestHelpers.getDevice();
assertTrue(QueueModel.canUnmount(device));
addItems(10);
// still true as we are not playing
assertTrue(QueueModel.canUnmount(device));
// try to start playing/planning
QueueModel.goTo(0);
assertFalse(QueueModel.canUnmount(QueueModel.getItem(1).getFile().getDevice()));
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#stopRequest()}
* .
*/
public void testStopRequest() {
QueueModel.stopRequest();
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#isStopped()}.
*
* @throws Exception the exception
*/
public void testIsStopped() throws Exception {
assertTrue(QueueModel.isStopped());
addItems(10);
// try to start playing/planning
QueueModel.goTo(0);
assertFalse(QueueModel.isStopped());
QueueModel.stopRequest();
assertTrue(QueueModel.isStopped());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#getQueue()}.
*
* @throws Exception the exception
*/
public void testGetQueue() throws Exception {
assertEquals(0, QueueModel.getQueue().size());
addItems(10);
assertEquals(10, QueueModel.getQueue().size());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#getQueueSize()}.
*/
public void testGetQueueSize() throws Exception {
assertEquals(0, QueueModel.getQueueSize());
addItems(10);
assertEquals(10, QueueModel.getQueueSize());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#insert(org.jajuk.services.players.StackItem, int)}
* .
*/
public void testInsertStackItemInt() throws Exception {
assertEquals(0, QueueModel.getQueueSize());
QueueModel.insert(new StackItem(TestHelpers.getFile("file0", true)), 0);
assertEquals(1, QueueModel.getQueueSize());
// when we insert the next one at 0, the previous one should be moved
QueueModel.insert(new StackItem(TestHelpers.getFile("file1", true)), 0);
assertEquals(2, QueueModel.getQueueSize());
assertEquals("file1", QueueModel.getItem(0).getFile().getName());
assertEquals("file0", QueueModel.getItem(1).getFile().getName());
// adding in between now, should again adjust the queue accordingly
QueueModel.insert(new StackItem(TestHelpers.getFile("file2", true)), 1);
assertEquals(3, QueueModel.getQueueSize());
assertEquals("file1", QueueModel.getItem(0).getFile().getName());
assertEquals("file2", QueueModel.getItem(1).getFile().getName());
assertEquals("file0", QueueModel.getItem(2).getFile().getName());
// and adding at the end should work as well
QueueModel.insert(new StackItem(TestHelpers.getFile("file3", true)), 3);
assertEquals(4, QueueModel.getQueueSize());
assertEquals("file1", QueueModel.getItem(0).getFile().getName());
assertEquals("file2", QueueModel.getItem(1).getFile().getName());
assertEquals("file0", QueueModel.getItem(2).getFile().getName());
assertEquals("file3", QueueModel.getItem(3).getFile().getName());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#insert(java.util.List, int)}.
*/
public void testInsertListOfStackItemInt() throws Exception {
assertEquals(0, QueueModel.getQueueSize());
// tested with addItems
addItems(256);
assertEquals(256, QueueModel.getQueueSize());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#up(int)}.
*
* @throws Exception the exception
*/
public void testUp() throws Exception {
// first one cannot be put up, returns immediately
QueueModel.up(0);
addItems(3);
// check queue
assertEquals(3, QueueModel.getQueueSize());
assertEquals("file0", QueueModel.getItem(0).getFile().getName());
assertEquals("file1", QueueModel.getItem(1).getFile().getName());
assertEquals("file2", QueueModel.getItem(2).getFile().getName());
// now up one
QueueModel.up(2);
// check queue after move
assertEquals(3, QueueModel.getQueueSize());
assertEquals("file0", QueueModel.getItem(0).getFile().getName());
assertEquals("file2", QueueModel.getItem(1).getFile().getName());
assertEquals("file1", QueueModel.getItem(2).getFile().getName());
// up once more
QueueModel.up(1);
// check queue
assertEquals(3, QueueModel.getQueueSize());
assertEquals("file2", QueueModel.getItem(0).getFile().getName());
assertEquals("file0", QueueModel.getItem(1).getFile().getName());
assertEquals("file1", QueueModel.getItem(2).getFile().getName());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#down(int)}.
*
* @throws Exception the exception
*/
public void testDown() throws Exception {
// first one cannot be put up, returns immediately
QueueModel.down(0);
addItems(3);
// check queue
assertEquals(3, QueueModel.getQueueSize());
assertEquals("file0", QueueModel.getItem(0).getFile().getName());
assertEquals("file1", QueueModel.getItem(1).getFile().getName());
assertEquals("file2", QueueModel.getItem(2).getFile().getName());
// now up one
QueueModel.down(0);
// check queue after move
assertEquals(3, QueueModel.getQueueSize());
assertEquals(QueueModel.getQueue().toString(), "file1", QueueModel.getItem(0).getFile()
.getName());
assertEquals(QueueModel.getQueue().toString(), "file0", QueueModel.getItem(1).getFile()
.getName());
assertEquals(QueueModel.getQueue().toString(), "file2", QueueModel.getItem(2).getFile()
.getName());
// up once more
QueueModel.down(1);
// check queue
assertEquals(3, QueueModel.getQueueSize());
assertEquals("file1", QueueModel.getItem(0).getFile().getName());
assertEquals("file2", QueueModel.getItem(1).getFile().getName());
assertEquals("file0", QueueModel.getItem(2).getFile().getName());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#goTo(int)}.
*
* @throws Exception the exception
*/
public void testGoTo() throws Exception {
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 0, QueueModel.getQueueSize());
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), -1, QueueModel.getIndex());
//System.out.println("Thread dump at failure");
//TestHelpers.dumpThreads();
QueueModel.goTo(0);
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 0, QueueModel.getQueueSize());
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 0, QueueModel.getIndex());
addItems(5);
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 5, QueueModel.getQueueSize());
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 5, QueueModel.getIndex());
QueueModel.goTo(2);
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 5, QueueModel.getQueueSize());
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 2, QueueModel.getIndex());
QueueModel.goTo(4);
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 5, QueueModel.getQueueSize());
assertEquals("file4", QueueModel.getCurrentItem().getFile().getName());
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 4, QueueModel.getIndex());
}
/**
* Test go to repeat.
*
*
* @throws Exception the exception
*/
public void testGoToRepeat() throws Exception {
addItems(5);
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 5, QueueModel.getQueueSize());
QueueModel.goTo(2);
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 5, QueueModel.getQueueSize());
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 2, QueueModel.getIndex());
{ // first choose one that is not set to repeat
// now set some repeat
QueueModel.getItem(2).setRepeat(true);
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 5, QueueModel.getQueueSize());
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), 2, QueueModel.getIndex());
QueueModel.goTo(4);
assertNotNull("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), QueueModel.getCurrentItem());
assertNotNull("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), QueueModel.getCurrentItem().getFile());
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), "file4", QueueModel.getCurrentItem()
.getFile().getName());
// item 4 is now not repeated
assertFalse(QueueModel.getItem(4).isRepeat());
}
{ // and then try to go to a repeated one
// now set some repeat
QueueModel.getItem(2).setRepeat(true);
QueueModel.goTo(2);
assertNotNull("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), QueueModel.getCurrentItem());
assertNotNull("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), QueueModel.getCurrentItem().getFile());
assertEquals("Index: " + QueueModel.getIndex() + ", size: " + QueueModel.getQueueSize()
+ ", item: " + QueueModel.getCurrentItem(), "file2", QueueModel.getCurrentItem()
.getFile().getName());
// item 2 is now still repeated
assertTrue(QueueModel.getItem(2).isRepeat());
}
}
/**
* Album1..2..1 , reset album 2 at index 1 -> album 1, 1
* @throws JajukException
*/
public void testRemoveAround1() throws JajukException {
List<StackItem> list = new ArrayList<StackItem>();
Album album1 = TestHelpers.getAlbum("album1", 1);
Album album2 = TestHelpers.getAlbum("album2", 1);
Directory dir = TestHelpers.getDirectory();
StackItem si1 = new StackItem(TestHelpers.getFile("file1", dir, true, MockPlayer.class, album1));
StackItem si2 = new StackItem(TestHelpers.getFile("file2", dir, true, MockPlayer.class, album2));
StackItem si3 = new StackItem(TestHelpers.getFile("file3", dir, true, MockPlayer.class, album1));
list.add(si1);
list.add(si2);
list.add(si3);
QueueModel.insert(list, QueueModel.getQueueSize());
QueueModel.resetAround(1, album2);
assertEquals(2, QueueModel.getCountTracksLeft());
assertEquals(album1, QueueModel.getItem(0).getFile().getTrack().getAlbum());
assertEquals(album1, QueueModel.getItem(1).getFile().getTrack().getAlbum());
}
/**
* Album1..2..2 , reset album 2 at index 1 -> album 1
* @throws JajukException
*/
public void testRemoveAround2() throws JajukException {
List<StackItem> list = new ArrayList<StackItem>();
Album album1 = TestHelpers.getAlbum("album1", 1);
Album album2 = TestHelpers.getAlbum("album2", 1);
Directory dir = TestHelpers.getDirectory();
StackItem si1 = new StackItem(TestHelpers.getFile("file1", dir, true, MockPlayer.class, album1));
StackItem si2 = new StackItem(TestHelpers.getFile("file2", dir, true, MockPlayer.class, album2));
StackItem si3 = new StackItem(TestHelpers.getFile("file3", dir, true, MockPlayer.class, album2));
list.add(si1);
list.add(si2);
list.add(si3);
QueueModel.insert(list, QueueModel.getQueueSize());
QueueModel.resetAround(1, album2);
assertEquals(1, QueueModel.getCountTracksLeft());
assertEquals(album1, QueueModel.getItem(0).getFile().getTrack().getAlbum());
}
/**
* Album2..2..2 , reset album 2 at index 1 -> <nothing>
* @throws JajukException
*/
public void testRemoveAround3() throws JajukException {
List<StackItem> list = new ArrayList<StackItem>();
Album album2 = TestHelpers.getAlbum("album2", 1);
Directory dir = TestHelpers.getDirectory();
StackItem si1 = new StackItem(TestHelpers.getFile("file1", dir, true, MockPlayer.class, album2));
StackItem si2 = new StackItem(TestHelpers.getFile("file2", dir, true, MockPlayer.class, album2));
StackItem si3 = new StackItem(TestHelpers.getFile("file3", dir, true, MockPlayer.class, album2));
list.add(si1);
list.add(si2);
list.add(si3);
QueueModel.insert(list, QueueModel.getQueueSize());
QueueModel.resetAround(1, album2);
assertEquals(0, QueueModel.getCountTracksLeft());
}
/**
* Album1..1..1 , reset album 2 at index 1 -> album 1,1
* @throws JajukException
*/
public void testRemoveAround4() throws JajukException {
List<StackItem> list = new ArrayList<StackItem>();
Album album1 = TestHelpers.getAlbum("album1", 1);
Album album2 = TestHelpers.getAlbum("album2", 1);
Directory dir = TestHelpers.getDirectory();
StackItem si1 = new StackItem(TestHelpers.getFile("file1", dir, true, MockPlayer.class, album1));
StackItem si2 = new StackItem(TestHelpers.getFile("file2", dir, true, MockPlayer.class, album1));
StackItem si3 = new StackItem(TestHelpers.getFile("file3", dir, true, MockPlayer.class, album1));
list.add(si1);
list.add(si2);
list.add(si3);
QueueModel.insert(list, QueueModel.getQueueSize());
QueueModel.resetAround(1, album2);
assertEquals(2, QueueModel.getCountTracksLeft());
assertEquals(album1, QueueModel.getItem(0).getFile().getTrack().getAlbum());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#remove(int, int)}.
*/
public void testRemoveCountInterval() throws Exception {
addItems(10);
QueueModel.remove(fromArray(1, 2, 3));
Thread.sleep(100); // wait for the push thread to be done
assertEquals(QueueModel.getQueue().toString(), 7, QueueModel.getQueueSize());
}
private Set<Integer> fromArray(Integer... indexes) {
HashSet<Integer> out = new HashSet<Integer>();
for (Integer i : indexes) {
out.add(i);
}
return out;
}
public void testRemoveUnplayedTracks() throws Exception {
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
List<StackItem> items = addItems(3);
QueueModel.goTo(0);
assertEquals(0, QueueModel.getIndex());
assertEquals(items.get(0), QueueModel.getCurrentItem());
QueueModel.remove(fromArray(1, 2));
Thread.sleep(100); // wait for the push thread to be done
assertEquals(1, QueueModel.getQueueSize());
assertEquals(0, QueueModel.getIndex());
assertEquals(items.get(0), QueueModel.getCurrentItem());
}
public void testRemoveTracksIncludingPlaying() throws Exception {
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
List<StackItem> items = addItems(4);
QueueModel.goTo(1);
assertEquals(1, QueueModel.getIndex());
assertEquals(items.get(1), QueueModel.getCurrentItem());
QueueModel.remove(fromArray(1, 2));
Thread.sleep(100); // wait for the push thread to be done
assertEquals(2, QueueModel.getQueueSize());
assertEquals(1, QueueModel.getIndex());
assertEquals(items.get(3), QueueModel.getCurrentItem());
}
public void testRemoveTracksIncludingPlayingFirstPosition() throws Exception {
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
List<StackItem> items = addItems(4);
assertEquals(4, QueueModel.getQueueSize());
QueueModel.goTo(0);
assertEquals(items.get(0), QueueModel.getCurrentItem());
assertEquals(0, QueueModel.getIndex());
QueueModel.remove(fromArray(0, 1));
Thread.sleep(100); // wait for the push thread to be done
assertEquals(2, QueueModel.getQueueSize());
assertEquals(0, QueueModel.getIndex());
assertEquals(items.get(2), QueueModel.getCurrentItem());
}
public void testRemoveTracksIncludingPlayingLastPosition() throws Exception {
/** First planned track should be played */
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
List<StackItem> items = addItems(4);
assertEquals(4, QueueModel.getQueueSize());
QueueModel.goTo(3);
List<StackItem> planned = QueueModel.getPlanned();
StackItem firstPlanned = planned.get(0);
assertEquals(items.get(3), QueueModel.getCurrentItem());
assertEquals(3, QueueModel.getIndex());
QueueModel.remove(fromArray(2, 3));
Thread.sleep(100); // wait for the push thread to be done
assertEquals(3, QueueModel.getQueueSize());
assertEquals(2, QueueModel.getIndex());
assertEquals(firstPlanned, QueueModel.getCurrentItem());
}
public void testRemoveTrackNoContinue() throws Exception {
/** First planned track should be played */
Conf.setProperty(Const.CONF_STATE_CONTINUE, "false");
List<StackItem> items = addItems(1);
assertEquals(1, QueueModel.getQueueSize());
QueueModel.goTo(0);
assertEquals(items.get(0), QueueModel.getCurrentItem());
assertEquals(0, QueueModel.getIndex());
QueueModel.remove(fromArray(0));
Thread.sleep(100); // wait for the push thread to be done
assertEquals(0, QueueModel.getQueueSize());
assertEquals(-1, QueueModel.getIndex());
assertFalse(QueueModel.isPlayingTrack());
}
public void testRemoveNoPlanningTrackPlaying() throws Exception {
/** Test a regression : when dropping playing last track in queue, next planned track is played */
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
List<StackItem> items = addItems(10);
assertEquals(10, QueueModel.getQueueSize());
// planned tracks are file0, file1...
QueueModel.goTo(9);
assertEquals(items.get(9), QueueModel.getCurrentItem());
assertEquals(9, QueueModel.getIndex());
QueueModel.remove(9);
Thread.sleep(100); // wait for the push thread to be done
assertEquals(10, QueueModel.getQueueSize()); // dropped track should be replaced by first planned one
assertEquals(9, QueueModel.getIndex());
assertEquals(items.get(0), QueueModel.getCurrentItem());
assertTrue(QueueModel.isPlayingTrack());
assertFalse(QueueModel.getCurrentItem().isPlanned());
}
public void testRemoveTrackIncludingPlayingLastPosition() throws Exception {
/** First planned track should be played */
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
List<StackItem> items = addItems(4);
assertEquals(4, QueueModel.getQueueSize());
QueueModel.goTo(3);
List<StackItem> planned = QueueModel.getPlanned();
StackItem firstPlanned = planned.get(0);
assertEquals(items.get(3), QueueModel.getCurrentItem());
assertEquals(3, QueueModel.getIndex());
QueueModel.remove(fromArray(3));
Thread.sleep(100); // wait for the push thread to be done
assertEquals(4, QueueModel.getQueueSize());
assertEquals(3, QueueModel.getIndex());
assertEquals(firstPlanned, QueueModel.getCurrentItem());
}
public void testRemoveTracksIncludingRepeatedAndPlayingFirstPosition() throws Exception {
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
StackItem repeated = new StackItem(TestHelpers.getFile("repeated", true), true, true);
List<StackItem> items = addItems(3);
QueueModel.insert(repeated, 0);
assertEquals(repeated, QueueModel.getItem(0));
assertEquals(4, QueueModel.getQueueSize());
QueueModel.goTo(0);
assertEquals(repeated, QueueModel.getCurrentItem());
assertEquals(0, QueueModel.getIndex());
QueueModel.remove(fromArray(0, 1));
Thread.sleep(100); // wait for the push thread to be done
assertEquals(2, QueueModel.getQueueSize());
assertEquals(0, QueueModel.getIndex());
assertEquals(items.get(1), QueueModel.getCurrentItem());
}
public void testRemoveTracksIncludingRepeatedAndPlayingMiddlePosition() throws Exception {
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
addItems(2);
StackItem repeated = new StackItem(TestHelpers.getFile("repetead", true), true, true);
QueueModel.insert(repeated, 2);
List<StackItem> items2 = addItems(2);
assertEquals(5, QueueModel.getQueueSize());
QueueModel.goTo(2);
assertEquals(repeated, QueueModel.getCurrentItem());
assertEquals(2, QueueModel.getIndex());
assertEquals(repeated, QueueModel.getCurrentItem());
QueueModel.remove(fromArray(1, 2, 3));
Thread.sleep(100); // wait for the push thread to be done
assertEquals(2, QueueModel.getQueueSize());
assertEquals(1, QueueModel.getIndex());
assertEquals(items2.get(1), QueueModel.getCurrentItem());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#getLast()}.
*
* @throws Exception the exception
*/
public void testGetLast() throws Exception {
assertNull(QueueModel.getLast());
addItems(10);
assertEquals("file9", QueueModel.getLast().getFile().getName());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#getLastPlayed()}.
*/
public void testGetLastPlayed() throws Exception {
assertNull(QueueModel.getLastPlayed());
addItems(10);
QueueModel.goTo(0);
// maybe we have one now
assertNotNull(QueueModel.getLastPlayed());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#getIndex()}.
*/
public void testGetIndex() {
// tested by tests above
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#getCountTracksLeft()}.
*/
public void testGetCountTracksLeft() throws Exception {
assertEquals(0, QueueModel.getCountTracksLeft());
addItems(10);
assertEquals(10, QueueModel.getCountTracksLeft());
QueueModel.goTo(0);
QueueModel.finished(true);
QueueModel.finished(true);
assertEquals(8, QueueModel.getCountTracksLeft());
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#getPlanned()}.
*
* @throws Exception the exception
*/
public void testGetPlanned() throws Exception {
StartupCollectionService.registerItemManagers();
assertEquals(0, QueueModel.getPlanned().size());
QueueModel.computesPlanned(false);
// no tracks are planned when queue is empty
assertEquals(0, QueueModel.getPlanned().size());
// now add some items
addItems(5);
// still no items because default configration states to not continue play
QueueModel.computesPlanned(false);
assertEquals(0, QueueModel.getPlanned().size());
// we also need to enable continuous play for tracks to be planned
Conf.setProperty(Const.CONF_STATE_CONTINUE, "true");
QueueModel.computesPlanned(false);
assertTrue(QueueModel.getPlanned().size() > 0);
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#commit()}.
*
* @throws Exception the exception
*/
public void testCommit() throws Exception {
final java.io.File fifo = SessionService.getConfFileByPath(Const.FILE_FIFO);
fifo.delete();
assertFalse(fifo.exists()); // we should not have the file now...
addItems(10);
QueueModel.commit();
// now the file should exist and have some size
assertTrue(fifo.exists());
assertNotNull(FileUtils.readFileToString(fifo).length() > 0);
}
/**
* Test method for.
*
* {@link org.jajuk.services.players.QueueModel#isPlayingRadio()}.
*/
public void testIsPlayingRadio() {
assertFalse(QueueModel.isPlayingRadio());
}
/**
* Test method for.
*
* {@link org.jajuk.services.players.QueueModel#getCurrentRadio()}.
*/
public void testGetCurrentRadio() {
// make sure we reset WebRadio
QueueModel.launchRadio(null);
assertNull(QueueModel.getCurrentRadio());
QueueModel.launchRadio(TestHelpers.getWebRadio());
assertNotNull(QueueModel.getCurrentRadio());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#isPlayingTrack()}.
*/
public void testIsPlayingTrack() throws Exception {
assertTrue(QueueModel.isStopped());
assertFalse(QueueModel.isPlayingTrack());
addItems(3);
QueueModel.goTo(0);
assertTrue(QueueModel.isPlayingTrack());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#getCurrentFileTitle()}.
*/
public void testGetCurrentFileTitle() throws Exception {
// always returns some string, without file "Read to play"
// can be wrong with different settings assertEquals("Ready to play",
// QueueModel.getCurrentFileTitle());
assertNotNull(QueueModel.getCurrentFileTitle());
addItems(3);
QueueModel.goTo(0);
assertNotNull(QueueModel.getCurrentFileTitle());
// should not be the same as before
assertFalse(QueueModel.getCurrentFileTitle().equals("Ready to play"));
}
/**
* Test method for {@link org.jajuk.services.players.QueueModel#clean()}.
*
* @throws Exception the exception
*/
public void testClean() throws Exception {
// should work without any items
QueueModel.clean();
addItems(10);
assertEquals(10, QueueModel.getQueueSize());
// here clean will not remove things as they are correctly listed in the FileManager
QueueModel.clean();
assertEquals(10, QueueModel.getQueueSize());
// we can add a dummy-file and check that it is removed
Genre genre = TestHelpers.getGenre();
Album album = TestHelpers.getAlbum("name", 23);
album.setProperty(Const.XML_ALBUM_DISCOVERED_COVER, Const.COVER_NONE); // don't read covers for
// this test
Artist artist = TestHelpers.getArtist("name");
Year year = TestHelpers.getYear(2000);
Type type = TestHelpers.getType();
Track track = TrackManager.getInstance().registerTrack("name", album, genre, artist, 120, year,
1, type, 1);
Device device = TestHelpers.getDevice();
Directory dir = DirectoryManager.getInstance().registerDirectory(device);
File file = FileManager.getInstance().registerFile("test.tst", dir, track, 120, 70);
QueueModel.insert(new StackItem(file), 0);
// now we have 11 elements
assertEquals(11, QueueModel.getQueueSize());
FileManager.getInstance().removeFile(file);
// here clean will remove one item that is not listed in the FileManager
QueueModel.clean();
// should be 10 again now
assertEquals(10, QueueModel.getQueueSize());
}
/**
* Test method for.
*
* @throws Exception the exception
* {@link org.jajuk.services.players.QueueModel#setStopAfter()}.
*/
public void testStopAfter() throws Exception {
assertTrue(QueueModel.isStopped());
assertFalse(QueueModel.isPlayingTrack());
addItems(3);
QueueModel.goTo(0);
assertTrue(QueueModel.isPlayingTrack());
// Test next track will be stopped
QueueModel.setStopAfter(true);
// Simulate end of file
QueueModel.finished();
assertTrue(QueueModel.isStopped());
QueueModel.goTo(0);
assertTrue(QueueModel.isPlayingTrack());
// Now test without the stop after option
QueueModel.setStopAfter(false);
// Simulate end of file
QueueModel.finished();
assertTrue(QueueModel.isPlayingTrack());
}
}