/* * 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.ArrayList; import java.util.List; import java.util.Set; import org.jajuk.JajukTestCase; import org.jajuk.MockPlayer; import org.jajuk.TestHelpers; import org.jajuk.events.JajukEvent; import org.jajuk.events.JajukEvents; import org.jajuk.services.covers.Cover; import org.jajuk.services.players.IPlayerImpl; import org.jajuk.services.players.QueueModel; import org.jajuk.services.players.StackItem; import org.jajuk.services.startup.StartupCollectionService; import org.jajuk.services.tags.ITagImpl; import org.jajuk.util.Const; import org.jaudiotagger.tag.FieldDataInvalidException; import org.jaudiotagger.tag.KeyNotFoundException; /** * . */ public class TestAlbumManager extends JajukTestCase { /** * Test method for {@link org.jajuk.base.AlbumManager#getXMLTag()}. */ public void testGetLabel() { assertEquals(Const.XML_ALBUMS, AlbumManager.getInstance().getXMLTag()); } /** * Test method for {@link org.jajuk.base.AlbumManager#getRegistrationKeys()}. */ public void testGetRegistrationKeys() { Set<JajukEvents> events = AlbumManager.getInstance().getRegistrationKeys(); assertTrue(events.contains(JajukEvents.FILE_LAUNCHED)); } /** * Test method for {@link org.jajuk.base.AlbumManager#getInstance()}. */ public void testGetInstance() { assertNotNull(AlbumManager.getInstance()); } /** * Test method for. * * {@link org.jajuk.base.AlbumManager#createID(java.lang.String, java.lang.String, long)} * . */ public void testCreateID() { assertNotNull(AlbumManager.createID("name", 3)); // other cases... assertNotNull(AlbumManager.createID("name", 0)); } /** * Test method for. * * {@link org.jajuk.base.AlbumManager#registerAlbum(java.lang.String, java.lang.String, long)} * . */ public void testRegisterAlbumStringStringStringLong() { assertNotNull(AlbumManager.getInstance().registerAlbum("1", "name1", 1)); assertNotNull(AlbumManager.getInstance().getAlbumByID("1")); } /** * Test register album empty artist. * */ public void testRegisterAlbumEmptyArtist() { AlbumManager.getInstance().clear(); assertNotNull(AlbumManager.getInstance().registerAlbum("1", "name1", 1)); } /** * Test method for. * * {@link org.jajuk.base.AlbumManager#registerAlbum(java.lang.String, java.lang.String, long)} * . */ public void testRegisterAlbumStringStringLong() { assertNotNull(AlbumManager.getInstance().registerAlbum("2", "name2", 1)); assertNotNull(AlbumManager.getInstance().getAlbumByName("name2")); } /** * Test method for. * * @throws Exception the exception * {@link org.jajuk.base.AlbumManager#changeAlbumName(org.jajuk.base.Album, java.lang.String)} * . */ public void testChangeAlbumName() throws Exception { StartupCollectionService.registerItemManagers(); Album album = AlbumManager.getInstance().registerAlbum("name3", 1); assertNotNull(album); AlbumManager.getInstance().changeAlbumName(album, "name4"); assertNull(AlbumManager.getInstance().getAlbumByName("name3")); assertNotNull(AlbumManager.getInstance().getAlbumByName("name4")); } /** * Test change album name with track. * * * @throws Exception the exception */ public void testChangeAlbumNameWithTrack() throws Exception { Album album = AlbumManager.getInstance().registerAlbum("name3", 1); assertNotNull(album); getTrack(5, album); getTrack(6, album); AlbumManager.getInstance().changeAlbumName(album, "name4"); assertNull(AlbumManager.getInstance().getAlbumByName("name3")); assertNotNull(AlbumManager.getInstance().getAlbumByName("name4")); } /** * Test change album name with queue. * * * @throws Exception the exception */ public void testChangeAlbumNameWithQueue() throws Exception { StartupCollectionService.registerItemManagers(); Album album = AlbumManager.getInstance().registerAlbum("name3", 1); assertNotNull(album); getTrack(5, album); getTrack(6, album); QueueModel.insert(new StackItem(album.getTracksCache().get(0).getFiles().get(0)), 0); QueueModel.goTo(0); AlbumManager.getInstance().changeAlbumName(album, "name4"); assertNull(AlbumManager.getInstance().getAlbumByName("name3")); assertNotNull(AlbumManager.getInstance().getAlbumByName("name4")); } /** * Test change album name same name. * * * @throws Exception the exception */ public void testChangeAlbumNameSameName() throws Exception { StartupCollectionService.registerItemManagers(); Album album = AlbumManager.getInstance().registerAlbum("3", "name3", 1); assertNotNull(album); // nothing happens if we use the same name Album album2 = AlbumManager.getInstance().changeAlbumName(album, "name3"); // we expect the same physical item assertTrue(album2.toString(), album == album2); } /** * Test method for. * * {@link org.jajuk.base.AlbumManager#format(java.lang.String)}. */ public void testFormat() { Album album = AlbumManager.getInstance().registerAlbum("3", "name3", 1); assertNotNull(album); assertEquals("Name1", AlbumManager.format("name1")); assertEquals("Name1", AlbumManager.format(" name1")); assertEquals("Name1", AlbumManager.format("name1 ")); assertEquals("Name1", AlbumManager.format(" name1 ")); assertEquals(" name1", AlbumManager.format("--_name1")); assertEquals("Na me1", AlbumManager.format("na-_me1")); assertEquals("Name1 name2", AlbumManager.format("name1 name2")); } /** * Test method for. * * {@link org.jajuk.base.AlbumManager#getAlbumByID(java.lang.String)}. */ public void testGetAlbumByID() { // tested above } /** * Test method for {@link org.jajuk.base.AlbumManager#getAlbums()}. */ public void testGetAlbums() { AlbumManager.getInstance().clear(); assertNotNull(AlbumManager.getInstance().registerAlbum("1", "name1", 1)); assertNotNull(AlbumManager.getInstance().registerAlbum("2", "name2", 1)); assertEquals(2, AlbumManager.getInstance().getAlbums().size()); } /** * Test method for {@link org.jajuk.base.AlbumManager#getAlbumsIterator()}. */ public void testGetAlbumsIterator() { AlbumManager.getInstance().clear(); assertNotNull(AlbumManager.getInstance().registerAlbum("1", "name1", 1)); assertNotNull(AlbumManager.getInstance().registerAlbum("2", "name2", 1)); assertTrue(AlbumManager.getInstance().getAlbumsIterator().hasNext()); } /** * Test method for. * * @throws Exception the exception * {@link org.jajuk.base.AlbumManager#getAssociatedAlbums(org.jajuk.base.Item)} * . */ public void testGetAssociatedAlbums() throws Exception { Album album = AlbumManager.getInstance().registerAlbum("1", "name1", 1); Track track = getTrack(1, album); List<Album> albums = AlbumManager.getInstance().getAssociatedAlbums(track); assertNotNull(albums); assertEquals(albums.toString(), 1, albums.size()); Genre genre = track.getGenre(); Artist artist = track.getArtist(); Year year = track.getYear(); albums = AlbumManager.getInstance().getAssociatedAlbums(genre); assertNotNull(albums); assertEquals(albums.toString(), 1, albums.size()); albums = AlbumManager.getInstance().getAssociatedAlbums(artist); assertNotNull(albums); assertEquals(albums.toString(), 1, albums.size()); albums = AlbumManager.getInstance().getAssociatedAlbums(year); assertNotNull(albums); assertEquals(albums.toString(), 1, albums.size()); } /** * Test method for. * * @throws Exception the exception * {@link org.jajuk.base.AlbumManager#getBestOfAlbums(boolean, int)}. */ public void testGetBestOfAlbums() throws Exception { AlbumManager.getInstance().clear(); Album album = AlbumManager.getInstance().registerAlbum("1", "name1", 1); getTrack(2, album); getTrack(3, album); album = AlbumManager.getInstance().registerAlbum("2", "name2", 1); getTrack(4, album); getTrack(5, album); album = AlbumManager.getInstance().registerAlbum("name3", 1); getTrack(4, album); getTrack(5, album); album = AlbumManager.getInstance().registerAlbum("name4", 1); getTrack(4, album); getTrack(5, album); album = AlbumManager.getInstance().registerAlbum("name5", 1); getTrack(4, album); getTrack(5, album); List<Album> albums = AlbumManager.getInstance().getBestOfAlbums(false, 3); assertEquals(albums.toString(), 3, albums.size()); // TODO verify with many albums and actual data } /** * Test get best of albums less. * * * @throws Exception the exception */ public void testGetBestOfAlbumsLess() throws Exception { AlbumManager.getInstance().clear(); Album album = AlbumManager.getInstance().registerAlbum("1", "name1", 1); getTrack(2, album); getTrack(3, album); album = AlbumManager.getInstance().registerAlbum("2", "name2", 1); getTrack(4, album); getTrack(5, album); album = AlbumManager.getInstance().registerAlbum("name3", 1); getTrack(4, album); getTrack(5, album); album = AlbumManager.getInstance().registerAlbum("name4", 1); getTrack(4, album); getTrack(5, album); album = AlbumManager.getInstance().registerAlbum("name5", 1); getTrack(4, album); getTrack(5, album); // check if we request more than we have, currently we get back some less // for some reason... List<Album> albums = AlbumManager.getInstance().getBestOfAlbums(false, 10); assertEquals(albums.toString(), 4, albums.size()); } /** * Test get best of album zero. * */ public void testGetBestOfAlbumZero() { AlbumManager.getInstance().clear(); List<Album> albums = AlbumManager.getInstance().getBestOfAlbums(false, 3); assertEquals(albums.toString(), 0, albums.size()); } /** * Test method for. * * @throws Exception the exception * {@link org.jajuk.base.AlbumManager#getNewestAlbums(boolean, int)}. */ public void testGetNewestAlbums() throws Exception { Album album = AlbumManager.getInstance().registerAlbum("name1", 1); getTrack(2, album); getTrack(3, album); album = AlbumManager.getInstance().registerAlbum("name2", 1); getTrack(4, album); getTrack(5, album); album = AlbumManager.getInstance().registerAlbum("name3", 1); getTrack(6, album); getTrack(7, album); album = AlbumManager.getInstance().registerAlbum("name4", 1); getTrack(8, album); getTrack(9, album); album = AlbumManager.getInstance().registerAlbum("name5", 1); getTrack(10, album); getTrack(11, album); List<Album> albums = AlbumManager.getInstance().getNewestAlbums(false, 3); assertEquals(albums.toString(), 3, albums.size()); // TODO verify with many albums and actual data } /** * Test method for. * * @throws Exception the exception * {@link org.jajuk.base.AlbumManager#getRarelyListenAlbums(boolean, int)}. */ public void testGetRarelyListenAlbums() throws Exception { AlbumManager.getInstance().clear(); Album album = AlbumManager.getInstance().registerAlbum("name1", 1); getTrack(2, album); getTrack(3, album); album = AlbumManager.getInstance().registerAlbum("name2", 1); getTrack(4, album); getTrack(5, album); album = AlbumManager.getInstance().registerAlbum("name3", 1); getTrack(6, album); getTrack(7, album); album = AlbumManager.getInstance().registerAlbum("name4", 1); getTrack(8, album); getTrack(9, album); album = AlbumManager.getInstance().registerAlbum("name5", 1); getTrack(10, album); getTrack(11, album); List<Album> albums = AlbumManager.getInstance().getRarelyListenAlbums(false, 3); assertEquals(albums.toString(), 3, albums.size()); // TODO verify with many albums and actual data } /** * Test method for {@link org.jajuk.base.AlbumManager#getMaxRate()}. * * @throws Exception the exception */ public void testGetMaxRate() throws Exception { AlbumManager.getInstance().clear(); Album album = AlbumManager.getInstance().registerAlbum("name1", 1); Track track = getTrack(1, album); track.setRate(12); track = getTrack(2, album); track.setRate(14); album = AlbumManager.getInstance().registerAlbum("name2", 1); track = getTrack(3, album); track.setRate(10); track = getTrack(4, album); track.setRate(15); album = AlbumManager.getInstance().registerAlbum("name3", 1); track = getTrack(5, album); track.setRate(10); track = getTrack(6, album); track.setRate(15); album = AlbumManager.getInstance().registerAlbum("name4", 1); track = getTrack(7, album); track.setRate(10); track = getTrack(8, album); track.setRate(15); album = AlbumManager.getInstance().registerAlbum("name5", 1); track = getTrack(9, album); track.setRate(10); track = getTrack(10, album); track.setRate(15); // zero without refresh assertEquals(0, AlbumManager.getInstance().getMaxRate()); // refresh it now AlbumManager.getInstance().refreshMaxRating(); // now it should be ok, it is the combined rate of all tracks assertEquals(26, AlbumManager.getInstance().getMaxRate()); } /** * Test method for {@link org.jajuk.base.AlbumManager#refreshMaxRating()}. */ public void testRefreshMaxRating() { // tested above } /** * Test method for. * * {@link org.jajuk.base.AlbumManager#update(org.jajuk.events.JajukEvent)}. */ public void testUpdate() { // do it a number of times to trigger the refreshMax after 10 times AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); AlbumManager.getInstance().update(new JajukEvent(JajukEvents.FILE_LAUNCHED, null)); } /** * Test method for. * * {@link org.jajuk.base.AlbumManager#getAlbumByName(java.lang.String)}. */ public void testGetAlbumByName() { // tested above } /** * Test method for {@link org.jajuk.base.AlbumManager#orderCache()}. * * @throws Exception the exception */ public void testOrderCache() throws Exception { AlbumManager.getInstance().clear(); Album album = AlbumManager.getInstance().registerAlbum("1", "name1", 1); getTrack(2, album); getTrack(3, album); album = AlbumManager.getInstance().registerAlbum("2", "name2", 1); getTrack(4, album); getTrack(5, album); AlbumManager.getInstance().orderCache(); } /** * Gets the track. * * @param i * @param album * @return the track * @throws Exception the exception */ @SuppressWarnings("unchecked") private Track getTrack(int i, Album album) throws Exception { Genre genre = TestHelpers.getGenre("name"); album.setProperty(Const.XML_ALBUM_DISCOVERED_COVER, Const.COVER_NONE); // don't read covers for this test Artist artist = TestHelpers.getArtist("atist_" + i); Year year = YearManager.getInstance().registerYear(Integer.valueOf(i).toString()); IPlayerImpl imp = new MockPlayer(); Class<IPlayerImpl> cl = (Class<IPlayerImpl>) imp.getClass(); ITagImpl tagimp = new MyTagImpl(); Class<ITagImpl> tl = (Class<ITagImpl>) tagimp.getClass(); Type type = new Type(Integer.valueOf(i).toString(), "name", "mp3", cl, tl); Track track = TrackManager.getInstance().registerTrack("track_" + i, album, genre, artist, 120, year, 1, type, 1); Device device = TestHelpers.getDevice(); Directory dir = TestHelpers.getDirectory(); if (!device.isMounted()) { device.mount(true); } File file = FileManager.getInstance().registerFile("file_" + i + ".tst", dir, track, 200, 100); file.getFIO().createNewFile(); track.addFile(file); TypeManager.getInstance().registerType("test", "tst", cl, tl); return track; } /** * . */ public static class MyTagImpl implements ITagImpl { /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#commit() */ @Override public void commit() throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getAlbumArtist() */ @Override public String getAlbumArtist() throws Exception { return null; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getAlbumName() */ @Override public String getAlbumName() throws Exception { return null; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getName() */ @Override public String getArtistName() throws Exception { return null; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getComment() */ @Override public String getComment() throws Exception { return null; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getDiscNumber() */ @Override public long getDiscNumber() throws Exception { return 0; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getLength() */ @Override public long getLength() throws Exception { return 0; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getOrder() */ @Override public long getOrder() throws Exception { return 0; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getQuality() */ @Override public long getQuality() throws Exception { return 0; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getGenreName() */ @Override public String getGenreName() throws Exception { return null; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getTrackName() */ @Override public String getTrackName() throws Exception { return null; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getYear() */ @Override public String getYear() throws Exception { return null; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setAlbumArtist(java.lang.String) */ @Override public void setAlbumArtist(String sAlbumArtist) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setAlbumName(java.lang.String) */ @Override public void setAlbumName(String sAlbumName) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setArtistName(java.lang.String) */ @Override public void setArtistName(String sArtistName) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setComment(java.lang.String) */ @Override public void setComment(String sComment) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setDiscNumber(long) */ @Override public void setDiscNumber(long discnumber) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setFile(java.io.File) */ @Override public void setFile(java.io.File fio) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setOrder(long) */ @Override public void setOrder(long lOrder) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setGenreName(java.lang.String) */ @Override public void setGenreName(String genre) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setTrackName(java.lang.String) */ @Override public void setTrackName(String sTrackName) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setYear(java.lang.String) */ @Override public void setYear(String sYear) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getTagField(java.lang.String) */ @Override public String getTagField(String tagFieldKey) throws Exception { return null; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setTagField(java.lang.String, java.lang.String) */ @Override public void setTagField(String tagFieldKey, String tagFieldValue) throws FieldDataInvalidException, KeyNotFoundException { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#deleteLyrics() */ @Override public void deleteLyrics() throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getLyrics() */ @Override public String getLyrics() throws Exception { return null; } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#setLyrics(java.lang.String) */ @Override public void setLyrics(String sLyrics) throws Exception { } /* * (non-Javadoc) * * @see org.jajuk.services.tags.ITagImpl#getSupportedTagFields() */ @Override public ArrayList<String> getSupportedTagFields() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see org.jajuk.services.tags.ITagImpl#getCovers() */ @Override public List<Cover> getCovers() throws Exception { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see org.jajuk.services.tags.ITagImpl#isTagAvailable() */ @Override public boolean isTagAvailable() { return true; } } }