/* * 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.Iterator; import java.util.List; import org.apache.commons.lang.StringUtils; import org.jajuk.JajukTestCase; import org.jajuk.MockPlayer; import org.jajuk.TestHelpers; 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.jajuk.util.ReadOnlyIterator; import org.jaudiotagger.tag.FieldDataInvalidException; import org.jaudiotagger.tag.KeyNotFoundException; /** * . */ public class TestArtistManager extends JajukTestCase { /** The Constant NUMBER_OF_TESTS. */ private static final int NUMBER_OF_TESTS = 10; /** The Constant NUMBER_OF_THREADS. */ private static final int NUMBER_OF_THREADS = 10; /** * Test method for {@link org.jajuk.base.ArtistManager#getXMLTag()}. */ public final void testGetLabel() { assertEquals(Const.XML_ARTISTS, ArtistManager.getInstance().getXMLTag()); } /** * Test method for {@link org.jajuk.base.ArtistManager#getInstance()}. */ public final void testGetInstance() { assertNotNull(ArtistManager.getInstance()); } /** * Test method for. * * {@link org.jajuk.base.ArtistManager#registerArtist(java.lang.String)}. */ public final void testRegisterArtistString() { Artist artist = ArtistManager.getInstance().registerArtist("name"); assertNotNull(artist); assertTrue(StringUtils.isNotBlank(artist.getID())); assertEquals("name", artist.getName()); } /** * Test method for. * * {@link org.jajuk.base.ArtistManager#createID(java.lang.String)}. */ public final void testCreateID() { String id = ItemManager.createID("name"); // same for same name assertEquals(id, ItemManager.createID("name")); // different for other name assertFalse(id.equals(ItemManager.createID("name2"))); } /** * Test method for. * * {@link org.jajuk.base.ArtistManager#registerArtist(java.lang.String, java.lang.String)} * . */ public final void testRegisterArtistStringString() { Artist artist = ArtistManager.getInstance().registerArtist("4", "name"); assertNotNull(artist); assertEquals("4", artist.getID()); assertEquals("name", artist.getName()); } /** * Test method for. * * @throws Exception the exception * {@link org.jajuk.base.ArtistManager#changeArtistName(org.jajuk.base.Artist, java.lang.String)} * . */ public final void testChangeArtistName() throws Exception { StartupCollectionService.registerItemManagers(); Artist artistold = TestHelpers.getArtist("nameold"); // we get the same object back if we have the same name assertTrue(artistold == ArtistManager.getInstance().changeArtistName(artistold, "nameold")); // now try with a new name Artist artist = ArtistManager.getInstance().changeArtistName(artistold, "namenew"); assertFalse(artistold == artist); // not null assertFalse("4".equals(artist.getID())); // new ID assertTrue(StringUtils.isNotBlank(artist.getID())); // useful ID assertEquals("namenew", artist.getName()); // correct name // test with Tracks for the artist and Queue Model playing that file File track1 = getFile(14, artist); List<StackItem> list = new ArrayList<StackItem>(); list.add(new StackItem(track1)); QueueModel.insert(list, 0); QueueModel.goTo(0); // to have the Queue in playing mode // verify that Queue is playing now assertFalse(QueueModel.isStopped()); assertNotNull(QueueModel.getPlayingFile()); assertNotNull(QueueModel.getPlayingFile().getTrack()); assertNotNull(QueueModel.getPlayingFile().getTrack().getArtist()); assertEquals(track1.getTrack(), QueueModel.getPlayingFile().getTrack()); assertEquals(artist, QueueModel.getPlayingFile().getTrack().getArtist()); // now try to change again with the track and the item playing in the queue artist = ArtistManager.getInstance().changeArtistName(artist, "namenewnew"); assertFalse(artistold == artist); // not null assertFalse("4".equals(artist.getID())); // new ID assertTrue(StringUtils.isNotBlank(artist.getID())); // useful ID assertEquals("namenewnew", artist.getName()); // correct name } /** * Gets the file. * * @param i * @param artist * @return the file * @throws Exception the exception */ @SuppressWarnings("unchecked") private File getFile(int i, Artist artist) 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 Year year = new Year(Integer.valueOf(i).toString(), "2000"); IPlayerImpl imp = new MockPlayer(); Class<IPlayerImpl> cl = (Class<IPlayerImpl>) imp.getClass(); Type type = TypeManager.getInstance().registerType("name", "tst", cl, MyTagImpl.class); Track track = TrackManager.getInstance().registerTrack("name", album, genre, artist, 120, year, 1, type, 1); Device device = TestHelpers.getDevice(); device.mount(true); Directory dir = TestHelpers.getDirectory(); File file = new org.jajuk.base.File(Integer.valueOf(i).toString(), "test.tst", dir, track, 120, 70); track.addFile(file); return file; } /** * Test method for. * * {@link org.jajuk.base.ArtistManager#format(java.lang.String)}. */ public final void testFormat() { assertEquals("Testname", ItemManager.format("testname")); // trim spaces assertEquals("Testname", ItemManager.format(" testname ")); // - assertEquals("Te s tname", ItemManager.format(" te-s-tname ")); // _ assertEquals("Te s tname", ItemManager.format(" te_s_tname ")); // all of them assertEquals("TE s tnam e ", ItemManager.format(" tE_s_tnam--e- ")); } /** * Test method for {@link org.jajuk.base.ArtistManager#getArtistsList()}. */ public final void testGetArtistsList() { List<String> list = ArtistManager.getArtistsList(); assertNotNull(list); // not sure how many elements we should expect as this is static and other // tests // could already have added some items, let's just try to add a new one int i = list.size(); ArtistManager.getInstance().registerArtist("newandnotanywhereelseusedname"); // the vector should be updated directly, we use the same in the // combobox-models, // this is the reason for using Vector in the first place! assertEquals(i + 1, list.size()); } /** * Test method for. * * {@link org.jajuk.base.ArtistManager#getArtistByID(java.lang.String)}. */ public final void testGetArtistByID() { Artist artist = ArtistManager.getInstance().registerArtist("anothernewartist"); Artist artist2 = ArtistManager.getInstance().getArtistByID(artist.getID()); assertEquals("anothernewartist", artist2.getName()); } /** * Test method for {@link org.jajuk.base.ArtistManager#getArtists()}. */ public final void testGetArtists() { List<Artist> list = ArtistManager.getInstance().getArtists(); assertNotNull(list); // not sure how many elements we should expect as this is static and other // tests // could already have added some items, let's just try to add a new one int i = list.size(); ArtistManager.getInstance().registerArtist("newname"); // the list is a copy, so we need to get it again list = ArtistManager.getInstance().getArtists(); assertEquals(i + 1, list.size()); } /** * Test method for {@link org.jajuk.base.ArtistManager#getArtistsIterator()}. */ public final void testGetArtistsIterator() { ArtistManager.getInstance().registerArtist("anothernewname"); ReadOnlyIterator<Artist> it = ArtistManager.getInstance().getArtistsIterator(); assertNotNull(it); assertTrue(it.hasNext()); // there can be items from before, so just expect // at least one item... } /** * Test method for. * * @throws Exception the exception * {@link org.jajuk.base.ArtistManager#getAssociatedArtists(org.jajuk.base.Item)} * . */ public final void testGetAssociatedArtists() throws Exception { // empty list with invalid item List<Artist> list = ArtistManager.getInstance().getAssociatedArtists(null); assertNotNull(list); assertEquals(0, list.size()); Artist artist = ArtistManager.getInstance().registerArtist("myartisthere"); File file = getFile(15, artist); // also registers the Track list = ArtistManager.getInstance().getAssociatedArtists(file.getTrack()); assertNotNull(list); assertEquals(1, list.size()); assertEquals("myartisthere", list.get(0).getName()); Album album = file.getTrack().getAlbum(); album.getTracksCache().add(file.getTrack()); list = ArtistManager.getInstance().getAssociatedArtists(album); assertNotNull(list); assertEquals(1, list.size()); assertEquals("myartisthere", list.get(0).getName()); } /** * Test method for. * * {@link org.jajuk.base.ArtistManager#getArtistByName(java.lang.String)}. */ public final void testGetArtistByName() { Artist artist = ArtistManager.getInstance().registerArtist("anothernewartist"); Artist artist2 = ArtistManager.getInstance().getArtistByName("anothernewartist"); assertEquals(artist.getID(), artist2.getID()); } /** * Test sorting. * */ public final void testSorting() { // make sure we have "ordered state" ArtistManager.getInstance().switchToOrderState(); List<String> ids = new ArrayList<String>(); ids.add(ArtistManager.getInstance().registerArtist("anothernewartist").getID()); ids.add(ArtistManager.getInstance().registerArtist("yet another artist").getID()); ids.add(ArtistManager.getInstance().registerArtist("one more artist").getID()); ids.add(ArtistManager.getInstance().registerArtist("number 10").getID()); ids.add(ArtistManager.getInstance().registerArtist("number 11").getID()); // now they are sorted by name Iterator<? extends Item> it = ArtistManager.getInstance().getItemsIterator(); assertEquals("anothernewartist", it.next().getName()); assertEquals("number 10", it.next().getName()); assertEquals("number 11", it.next().getName()); assertEquals("one more artist", it.next().getName()); assertEquals("yet another artist", it.next().getName()); assertFalse(it.hasNext()); // make sure we can fetch all of these by ID for (String id : ids) { assertNotNull("Did not find ID: " + id, ArtistManager.getInstance().getArtistByID(id)); } assertNull(ArtistManager.getInstance().getArtistByID("notexisting")); assertNull(ArtistManager.getInstance().getArtistByID("number 12")); assertNull(ArtistManager.getInstance().getArtistByID("number 09")); } /** * . */ 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#getArtistName() */ @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 albumArtist) throws Exception { } /* (non-Javadoc) * @see org.jajuk.services.tags.ITagImpl#setAlbumName(java.lang.String) */ @Override public void setAlbumName(String albumName) throws Exception { } /* (non-Javadoc) * @see org.jajuk.services.tags.ITagImpl#setArtistName(java.lang.String) */ @Override public void setArtistName(String artistName) throws Exception { } /* (non-Javadoc) * @see org.jajuk.services.tags.ITagImpl#setComment(java.lang.String) */ @Override public void setComment(String comment) 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 order) 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 trackName) throws Exception { } /* (non-Javadoc) * @see org.jajuk.services.tags.ITagImpl#setYear(java.lang.String) */ @Override public void setYear(String year) 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 List<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; } } }