/*
* 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.base;
import java.util.List;
import java.util.Set;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.jajuk.ConstTest;
import org.jajuk.JajukTestCase;
import org.jajuk.MockPlayer;
import org.jajuk.TestHelpers;
import org.jajuk.services.players.IPlayerImpl;
import org.jajuk.services.startup.StartupCollectionService;
import org.jajuk.util.Conf;
import org.jajuk.util.Const;
/**
* TODO: some more coverage is possible by enhancing the tests accordingly.
*/
public class TestDirectory extends JajukTestCase {
@Override
protected void specificSetUp() throws Exception {
// reset some conf-options
Conf.setProperty(Const.CONF_OPTIONS_HIDE_UNMOUNTED, "false");
}
/**
* Test method for {@link org.jajuk.base.Directory#getTitle()}.
*/
public void testGetDesc() {
Directory dir = TestHelpers.getDirectory("dir1");
assertTrue(dir.toString(), StringUtils.isNotBlank(dir.getTitle()));
}
/**
* Test method for {@link org.jajuk.base.Directory#getXMLTag()}.
*/
public void testGetLabel() {
Directory dir = TestHelpers.getDirectory("dir1");
assertEquals(dir.toString(), Const.XML_DIRECTORY, dir.getXMLTag());
}
/**
* Test method for {@link org.jajuk.base.Directory#getHumanValue(java.lang.String)}.
*/
public void testGetHumanValue() {
Directory dir = TestHelpers.getDirectory("dir1");
assertEquals(dir.toString(), dir.getParentDirectory().getFio(),
new java.io.File(dir.getHumanValue(Const.XML_DIRECTORY_PARENT)));
assertEquals(dir.toString(), "sample_device", dir.getHumanValue(Const.XML_DEVICE));
assertTrue(dir.toString(), StringUtils.isNotBlank(dir.getHumanValue(Const.XML_NAME)));
assertEquals(dir.toString(), "", dir.getHumanValue("notexisting"));
}
/**
* Test method for {@link org.jajuk.base.Directory#getIconRepresentation()}.
*/
public void testGetIconRepresentation() {
StartupCollectionService.registerItemManagers();
Directory dir = TestHelpers.getDirectory("dir1");
assertNotNull(dir.getIconRepresentation());
}
/**
* Test method for {@link org.jajuk.base.Directory#Directory(java.lang.String, java.lang.String, org.jajuk.base.Directory, org.jajuk.base.Device)}.
*/
public void testDirectory() {
Directory dir = TestHelpers.getDirectory("dir1");
assertNotNull(dir);
}
/**
* Test method for {@link org.jajuk.base.Directory#toString()}.
*/
public void testToString() {
Directory dir = TestHelpers.getDirectory("dir1");
TestHelpers.ToStringTest(dir);
}
/**
* Test to string parent.
*
*/
public void testToStringParent() {
Directory dir = TestHelpers.getDirectory("dir1");
TestHelpers.ToStringTest(dir);
}
/**
* Test method for {@link org.jajuk.base.Directory#getAbsolutePath()}.
*/
public void testGetAbsolutePath() {
Directory dir = TestHelpers.getDirectory("dir1");
assertTrue(dir.toString(), StringUtils.isNotBlank(dir.getAbsolutePath()));
}
/**
* Test method for {@link org.jajuk.base.Directory#getDevice()}.
*/
public void testGetDevice() {
Directory dir = TestHelpers.getDirectory("dir1");
assertNotNull(dir.getDevice());
}
/**
* Test method for {@link org.jajuk.base.Directory#getParentDirectory()}.
*/
public void testGetParentDirectory() {
Directory dir = TestHelpers.getDevice().getRootDirectory();
assertNull(dir.getParentDirectory());
}
/**
* Test method for {@link org.jajuk.base.Directory#getDirectories()}.
*/
public void testGetDirectories() {
Directory dir = TestHelpers.getDirectory("dir1");
Set<Directory> dirs = dir.getDirectories();
// no dirs without registered directories
assertEquals(0, dirs.size());
DirectoryManager.getInstance().registerDirectory("sub1", dir, dir.getDevice());
DirectoryManager.getInstance().registerDirectory("sub2", dir, dir.getDevice());
DirectoryManager.getInstance().registerDirectory("sub3", dir, dir.getDevice());
dirs = dir.getDirectories();
assertEquals(3, dirs.size());
}
/**
* Test method for {@link org.jajuk.base.Directory#getFiles()}.
*
* @throws Exception the exception
*/
public void testGetFiles() throws Exception {
Directory dir = TestHelpers.getDirectory("dir1");
Set<File> files = dir.getFiles();
// no files are available currently
assertEquals(0, files.size());
getFileInDir(3, dir);
getFileInDir(4, dir);
files = dir.getFiles();
assertEquals(2, dir.getFiles().size());
}
/**
* Gets the file in dir.
*
* @param i
* @param dir
* @return the file in dir
* @throws Exception the exception
*/
@SuppressWarnings("unchecked")
public static org.jajuk.base.File getFileInDir(int i, Directory dir) throws Exception {
Genre genre = TestHelpers.getGenre("name");
Album album = TestHelpers.getAlbum("myalbum", 0);
album.setProperty(Const.XML_ALBUM_DISCOVERED_COVER, Const.COVER_NONE); // don't read covers for
// this test
Artist artist = TestHelpers.getArtist("name");
Year year = new Year(Integer.valueOf(i).toString(), "2000");
IPlayerImpl imp = new MockPlayer();
Class<IPlayerImpl> cl = (Class<IPlayerImpl>) imp.getClass();
Type type = new Type(Integer.valueOf(i).toString(), "name", "mp3", cl, null);
Track track = new Track(Integer.valueOf(i).toString(), "name", album, genre, artist, 120, year,
1, type, 1);
return FileManager.getInstance().registerFile("test_" + i + ".tst", dir, track, 120, 70);
}
/**
* Test method for {@link org.jajuk.base.Directory#getPlaylistFiles()}.
*/
public void testGetPlaylistFiles() {
Directory dir = TestHelpers.getDirectory("dir1");
Set<Playlist> files = dir.getPlaylistFiles();
// no files are available currently
assertEquals(0, files.size());
PlaylistManager.getInstance().registerPlaylistFile(
new java.io.File(TestHelpers.getDevice().getUrl() + java.io.File.separator + "testfile1"),
dir);
PlaylistManager.getInstance().registerPlaylistFile(
new java.io.File(TestHelpers.getDevice().getUrl() + java.io.File.separator + "testfile2"),
dir);
PlaylistManager.getInstance().registerPlaylistFile(
new java.io.File(TestHelpers.getDevice().getUrl() + java.io.File.separator + "testfile3"),
dir);
PlaylistManager.getInstance().registerPlaylistFile(
new java.io.File(TestHelpers.getDevice().getUrl() + java.io.File.separator + "testfile4"),
dir);
files = dir.getPlaylistFiles();
assertEquals(4, files.size());
}
/**
* Test get playlist recursively.
*
*/
public void testGetPlaylistRecursively() {
PlaylistManager.getInstance().clear();
Directory dir = TestHelpers.getDirectory();
List<Playlist> files = dir.getPlaylistsRecursively();
// no files are available currently
assertEquals(0, files.size());
Directory dir1 = DirectoryManager.getInstance().registerDirectory("sub1", dir, dir.getDevice());
Directory dir2 = DirectoryManager.getInstance().registerDirectory("sub2", dir, dir.getDevice());
Directory dir3 = DirectoryManager.getInstance().registerDirectory("sub3", dir, dir.getDevice());
PlaylistManager.getInstance().registerPlaylistFile(
new java.io.File(TestHelpers.getDevice().getUrl() + java.io.File.separator + "testfile1"),
dir1);
PlaylistManager.getInstance().registerPlaylistFile(
new java.io.File(TestHelpers.getDevice().getUrl() + java.io.File.separator + "testfile2"),
dir2);
PlaylistManager.getInstance().registerPlaylistFile(
new java.io.File(TestHelpers.getDevice().getUrl() + java.io.File.separator + "testfile3"),
dir2);
PlaylistManager.getInstance().registerPlaylistFile(
new java.io.File(TestHelpers.getDevice().getUrl() + java.io.File.separator + "testfile4"),
dir3);
files = dir.getPlaylistsRecursively();
}
/**
* Test method for {@link org.jajuk.base.Directory#getFilesFromFile(org.jajuk.base.File)}.
*
* @throws Exception the exception
*/
public void testGetFilesFromFile() throws Exception {
Directory dir = TestHelpers.getDirectory("dir1");
assertNull(dir.getFilesFromFile(null));
getFileInDir(3, dir);
getFileInDir(4, dir);
File file = getFileInDir(5, dir);
getFileInDir(6, dir);
List<File> list = dir.getFilesFromFile(file);
assertTrue("Size: " + list.size(), list.size() > 0);
}
/**
* Test method for {@link org.jajuk.base.Directory#getFilesRecursively()}.
*
* @throws Exception the exception
*/
public void testGetFilesRecursively() throws Exception {
FileManager.getInstance().clear();
Directory dir = TestHelpers.getDirectory();
List<File> files = dir.getFilesRecursively();
// no files are available currently
assertEquals(0, files.size());
Directory dir1 = DirectoryManager.getInstance().registerDirectory("sub1", dir, dir.getDevice());
Directory dir2 = DirectoryManager.getInstance().registerDirectory("sub2", dir, dir.getDevice());
Directory dir3 = DirectoryManager.getInstance().registerDirectory("sub3", dir, dir.getDevice());
getFileInDir(3, dir1);
getFileInDir(4, dir2);
getFileInDir(5, dir2);
getFileInDir(6, dir3);
files = dir.getFilesRecursively();
assertEquals(4, files.size());
}
/**
* Test method for {@link org.jajuk.base.Directory#hasAncestor(org.jajuk.base.Directory)}.
*
* @throws Exception the exception
*/
public void testHasAncestor() throws Exception {
Directory dir1 = TestHelpers.getDirectory("dir1");
Directory dir2 = TestHelpers.getDirectory("dir2");
Directory topdir1 = TestHelpers.getDevice().getRootDirectory();
assertTrue(dir1.hasAncestor(topdir1));
assertFalse(dir1.hasAncestor(dir2));
assertFalse(dir1.hasAncestor(dir1));
}
/**
* Test method for {@link org.jajuk.base.Directory#getDirectoriesRecursively()}.
*
* @throws Exception the exception
*/
public void testGetDirectoriesRecursively() throws Exception {
Directory topdir1 = TestHelpers.getDevice().getRootDirectory();
Directory dir1 = TestHelpers.getDirectory("dir1");
Directory dir2 = TestHelpers.getDirectory("dir2");
List<Directory> dirs = topdir1.getDirectoriesRecursively();
assertTrue(dirs.size() == 2);
assertFalse(dirs.contains(topdir1));
assertTrue(dirs.contains(dir1));
assertTrue(dirs.contains(dir2));
}
/**
* Test method for {@link org.jajuk.base.Directory#scan(boolean, org.jajuk.ui.helpers.RefreshReporter)}.
*/
public void testScan() {
Directory dir = TestHelpers.getDirectory("dir1");
// this scan will not do much because there are no files in this dir
dir.scan(true, null);
}
/**
* Test scan actual.
*
*
* @throws Exception the exception
*/
public void testScanActual() throws Exception {
StartupCollectionService.registerItemManagers();
StartupCollectionService.registerTypes();
// create temp file
Directory dir = TestHelpers.getDirectory("dir1");
File file = TestHelpers.getFile("test1.mp3", true);
FileUtils.writeStringToFile(file.getFIO(), "teststring");
dir.scan(true, null);
}
/**
* Test method for {@link org.jajuk.base.Directory#reset()}.
*/
public void testReset() {
Directory dir = TestHelpers.getDirectory("dir1");
dir.reset();
}
/**
* Test method for {@link org.jajuk.base.Directory#getRelativePath()}.
*/
public void testGetRelativePath() {
Directory dir = TestHelpers.getDirectory("dir1");
assertNotNull(dir.getRelativePath());
}
/**
* Test method for {@link org.jajuk.base.Directory#getFio()}.
*/
public void testGetFio() {
Directory dir = TestHelpers.getDirectory("dir1");
assertNotNull(dir.getFio());
}
/**
* Test method for {@link org.jajuk.base.Directory#compareTo(org.jajuk.base.Directory)}.
*/
public void testCompareTo() {
Device device1 = TestHelpers.getDevice("1", Device.Type.DIRECTORY, ConstTest.DEVICES_BASE_PATH
+ "/1");
Device device2 = TestHelpers.getDevice("2", Device.Type.DIRECTORY, ConstTest.DEVICES_BASE_PATH
+ "/2");
Directory dir11 = DirectoryManager.getInstance().registerDirectory("dir11",
device1.getRootDirectory(), device1);
Directory dir12 = DirectoryManager.getInstance().registerDirectory("dir12",
device1.getRootDirectory(), device1);
Directory dir2 = DirectoryManager.getInstance().registerDirectory("dir2",
device1.getRootDirectory(), device2);
assertTrue(dir11.compareTo(dir12) < 0);
assertTrue(dir2.compareTo(dir11) > 0);
assertTrue(dir2.compareTo(dir12) > 0);
}
/**
* Test method for {@link org.jajuk.base.Directory#shouldBeHidden()}.
*
* @throws Exception the exception
*/
public void testShouldBeHidden() throws Exception {
Directory dir = TestHelpers.getDirectory("dir1");
// not mounted by default
assertFalse(dir.getDevice().isMounted());
// false because option is not set
assertFalse(dir.shouldBeHidden());
Conf.setProperty(Const.CONF_OPTIONS_HIDE_UNMOUNTED, "true");
// now true because option to hide unmounted is set
assertTrue(dir.shouldBeHidden());
dir.getDevice().setUrl(ConstTest.DEVICES_BASE_PATH);
dir.getDevice().mount(true);
// now false because device is mounted now
assertFalse(dir.shouldBeHidden());
}
/**
* Test method for {@link org.jajuk.base.Directory#isChildOf(org.jajuk.base.Directory)}.
*/
public void testIsChildOf() {
Directory topdir1 = TestHelpers.getDevice().getRootDirectory();
Directory dir2 = TestHelpers.getDirectory("dir2");
assertFalse(topdir1.isChildOf(dir2));
assertTrue(dir2.isChildOf(topdir1));
}
}