/* * 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 ext.services.xml.XMLUtils; import java.util.Date; import java.util.Iterator; import javax.swing.ImageIcon; import org.apache.commons.lang.StringUtils; import org.jajuk.JajukTestCase; import org.jajuk.services.startup.StartupCollectionService; import org.jajuk.util.Const; import org.jajuk.util.Messages; /** * . */ public class TestItemManager extends JajukTestCase { /** * Test method for {@link org.jajuk.base.ItemManager#ItemManager()}. */ public final void testItemManager() { new LocalIM(); } /** * Test method for. * * {@link org.jajuk.base.ItemManager#switchAllManagersToOrderState()}. */ public final void testSwitchAllManagersToOrderState() { // without Managers this will do nothing ItemManager.switchAllManagersToOrderState(); StartupCollectionService.registerItemManagers(); // now it should do more ItemManager.switchAllManagersToOrderState(); } /** * Test method for {@link org.jajuk.base.ItemManager#switchToOrderState()}. */ public final void testSwitchToOrderState() { ItemManager man = new LocalIM(); man.switchToOrderState(); } /** * Test method for. * * {@link org.jajuk.base.ItemManager#registerItemManager(java.lang.Class, org.jajuk.base.ItemManager)} * . */ public final void testRegisterItemManager() { ItemManager man = new LocalIM(); ItemManager.registerItemManager(String.class, man); } /** * Test method for {@link org.jajuk.base.ItemManager#getXMLTag()}. */ public final void testGetLabel() { ItemManager man = new LocalIM(); assertEquals("TestLabel", man.getXMLTag()); } /** * Test method for. * * {@link org.jajuk.base.ItemManager#getMetaInformation(java.lang.String)}. */ public final void testGetMetaInformation() { ItemManager man = new LocalIM(); assertNotNull(man.getMetaInformation(Const.XML_ID)); assertNull(man.getMetaInformation("unknown_property")); } /** * Test method for. * * {@link org.jajuk.base.ItemManager#getHumanType(java.lang.String)}. */ public final void testGetHumanType() { assertEquals("anykey", Messages.getHumanPropertyName("anykey")); assertFalse(Messages.getHumanPropertyName("disc_number"), "disc_number".equals(Messages.getHumanPropertyName("disc_number"))); } /** * Test method for. * * {@link org.jajuk.base.ItemManager#removeProperty(java.lang.String)}. */ public final void testRemoveProperty() { ItemManager man = new LocalIM(); // one not existing man.removeProperty("notexisting"); // another one existing man.removeProperty(Const.XML_ID); } /** * Test method for. * * {@link org.jajuk.base.ItemManager#applyRemoveProperty(org.jajuk.base.PropertyMetaInformation)} * . */ public final void testApplyRemoveProperty() { ItemManager man = new LocalIM(); PropertyMetaInformation meta = man.getMetaInformation(Const.XML_ID); // register some item before man.registerItem(new TestItem("3", "name")); man.applyRemoveProperty(meta); man.applyNewProperty(meta); } /** * Test method for. * * {@link org.jajuk.base.ItemManager#applyNewProperty(org.jajuk.base.PropertyMetaInformation)} * . */ public final void testApplyNewProperty() { // tested above } /** * Test method for {@link org.jajuk.base.ItemManager#toXML()}. */ public final void testToXML() { ItemManager man = new LocalIM(); String xml = man.toXML(); assertTrue(StringUtils.isNotBlank(xml)); StringBuilder sb = new StringBuilder(xml); sb.append("</"); sb.append(man.getXMLTag()); sb.append('>'); // valid xml? assertNotNull(sb.toString(), XMLUtils.getDocument(sb.toString())); } /** * Test method for {@link org.jajuk.base.ItemManager#getProperties()}. */ public final void testGetProperties() { ItemManager man = new LocalIM(); assertNotNull(man.getProperties()); assertEquals(1, man.getProperties().size()); // only one property registered } /** * Test method for {@link org.jajuk.base.ItemManager#getCustomProperties()}. */ public final void testGetCustomProperties() { ItemManager man = new LocalIM(); assertNotNull(man.getCustomProperties()); assertEquals(0, man.getCustomProperties().size()); // add a custom property. man.registerProperty(new PropertyMetaInformation("testprop", true, true, false, false, false, String.class, null)); assertNotNull(man.getCustomProperties()); assertEquals(1, man.getCustomProperties().size()); // now one property is // registered } /** * Test method for {@link org.jajuk.base.ItemManager#getVisibleProperties()}. */ public final void testGetVisibleProperties() { ItemManager man = new LocalIM(); assertNotNull(man.getVisibleProperties()); assertEquals(0, man.getVisibleProperties().size()); // add a custom property. man.registerProperty(new PropertyMetaInformation("testprop", true, true, true, false, false, String.class, null)); assertNotNull(man.getVisibleProperties()); assertEquals(1, man.getVisibleProperties().size()); // now one visible // property is // registered } /** * Test method for. * * {@link org.jajuk.base.ItemManager#getItemManager(java.lang.String)}. */ public final void testGetItemManagerString() { assertNotNull(ItemManager.getItemManager(Const.XML_DEVICE)); assertNotNull(ItemManager.getItemManager(Const.XML_TRACK)); assertNotNull(ItemManager.getItemManager(Const.XML_ALBUM)); assertNotNull(ItemManager.getItemManager(Const.XML_ARTIST)); assertNotNull(ItemManager.getItemManager(Const.XML_GENRE)); assertNotNull(ItemManager.getItemManager(Const.XML_DIRECTORY)); assertNotNull(ItemManager.getItemManager(Const.XML_FILE)); assertNotNull(ItemManager.getItemManager(Const.XML_PLAYLIST_FILE)); assertNotNull(ItemManager.getItemManager(Const.XML_TYPE)); assertNull(ItemManager.getItemManager("notexisting")); } /** * Test method for. * * {@link org.jajuk.base.ItemManager#getItemManager(java.lang.Class)}. */ public final void testGetItemManagerClassOfQ() { StartupCollectionService.registerItemManagers(); assertNotNull(ItemManager.getItemManager(org.jajuk.base.Album.class)); assertNotNull(ItemManager.getItemManager(org.jajuk.base.Artist.class)); assertNotNull(ItemManager.getItemManager(org.jajuk.base.File.class)); // take care, String.class is used for LocalIM which might be registered... assertNull(ItemManager.getItemManager(Date.class)); } /** * Test method for {@link org.jajuk.base.ItemManager#cleanup()}. */ public final void testCleanup() { ItemManager man = new LocalIM(); man.cleanup(); // TODO: add more sophisticated testing here } /** * Test method for. * * {@link org.jajuk.base.ItemManager#cleanOrphanTracks(org.jajuk.base.Item)}. */ public final void testCleanOrphanTracks() { ItemManager man = new LocalIM(); man.cleanOrphanTracks(null); // TODO: add more sophisticated testing here } /** * Test method for. * * {@link org.jajuk.base.ItemManager#removeItem(org.jajuk.base.Item)}. */ public final void testRemoveItem() { ItemManager man = new LocalIM(); man.removeItem(null); Item item = new TestItem("4", "name4"); man.registerItem(item); assertEquals(1, man.getItems().size()); man.removeItem(item); assertEquals(0, man.getItems().size()); } /** * Test method for. * * {@link org.jajuk.base.ItemManager#registerItem(org.jajuk.base.Item)}. */ public final void testRegisterItem() { // tested in previous test } /** * Test method for. * * {@link org.jajuk.base.ItemManager#registerProperty(org.jajuk.base.PropertyMetaInformation)} * . */ public final void testRegisterProperty() { // tested in testGetCustomProperties() } /** * Test method for. * * @throws Exception the exception * {@link org.jajuk.base.ItemManager#changeItem(org.jajuk.base.Item, java.lang.String, java.lang.Object, java.util.Set)} * . */ public final void testChangeItem() throws Exception { ItemManager man = new LocalIM(); Item item = new TestItem("5", "name5"); man.registerItem(item); ItemManager.changeItem(item, Const.XML_ID, "6", null); // TODO: add more sophisticated testing here } /** * Test method for {@link org.jajuk.base.ItemManager#getElementCount()}. */ public final void testGetElementCount() { ItemManager man = new LocalIM(); assertEquals(0, man.getElementCount()); Item item = new TestItem("5", "name5"); man.registerItem(item); assertEquals(1, man.getElementCount()); } /** * Test method for. * * {@link org.jajuk.base.ItemManager#getItemByID(java.lang.String)}. */ public final void testGetItemByID() { ItemManager man = new LocalIM(); Item item = new TestItem("5", "name5"); man.registerItem(item); assertNotNull(man.getItemByID("5")); assertNull(man.getItemByID("6")); } /** * Test method for {@link org.jajuk.base.ItemManager#getItems()}. */ public final void testGetItems() { ItemManager man = new LocalIM(); Item item = new TestItem("7", "name7"); man.registerItem(item); item = new TestItem("8", "name8"); man.registerItem(item); assertEquals(man.getItems().toString(), 2, man.getItems().size()); } /** * Test method for {@link org.jajuk.base.ItemManager#getItemsIterator()}. */ public final void testGetItemsIterator() { ItemManager man = new LocalIM(); Item item = new TestItem("9", "name9"); man.registerItem(item); item = new TestItem("10", "name10"); man.registerItem(item); Iterator<? extends Item> items = man.getItemsIterator(); assertNotNull(items); assertTrue(items.hasNext()); } /** * Test method for {@link org.jajuk.base.ItemManager#clear()}. */ public final void testClear() { ItemManager man = new LocalIM(); Item item = new TestItem("9", "name9"); man.registerItem(item); item = new TestItem("10", "name10"); man.registerItem(item); assertEquals(2, man.getElementCount()); man.clear(); assertEquals(0, man.getElementCount()); } /** * Test method for {@link org.jajuk.base.ItemManager#forceSorting()}. */ public final void testForceSorting() { ItemManager man = new LocalIM(); Item item = new TestItem("9", "name9"); man.registerItem(item); item = new TestItem("10", "name10"); man.registerItem(item); // now the order is in there, first 9, then 10 Iterator<? extends Item> it = man.getItemsIterator(); assertEquals("9", it.next().getID()); assertEquals("10", it.next().getID()); assertEquals(2, man.getElementCount()); man.forceSorting(); // still the same size assertEquals(2, man.getElementCount()); // the iterator should still return 9 before 10 it = man.getItemsIterator(); assertEquals("9", it.next().getID()); assertEquals("10", it.next().getID()); } /** * Test sorting. * */ public final void testSorting() { // first run without "ordered state" ItemManager man = new LocalIM(); runSortingTest(man, true); // now use one with ordered state man = new LocalIM(); man.switchToOrderState(); runSortingTest(man, false); } /** * Run sorting test. * * * @param man * @param notYetOrderedState */ private void runSortingTest(ItemManager man, boolean notYetOrderedState) { Item item = new TestItem("9", "name9"); man.registerItem(item); item = new TestItem("10", "name10"); man.registerItem(item); item = new TestItem("8", "name8"); man.registerItem(item); item = new TestItem("11", "name11"); man.registerItem(item); // will be added again because there is no exists-checking done item = new TestItem("8", "name8"); man.registerItem(item); item = new TestItem("7", "name7"); man.registerItem(item); item = new TestItem("12", "name12"); man.registerItem(item); // only ordered as long as we have not switched to ordered state if (notYetOrderedState) { // now the order is in there, first 9, then 10 Iterator<? extends Item> it = man.getItemsIterator(); assertEquals("9", it.next().getID()); assertEquals("10", it.next().getID()); assertEquals("8", it.next().getID()); assertEquals("11", it.next().getID()); assertEquals("8", it.next().getID()); assertEquals("7", it.next().getID()); assertEquals("12", it.next().getID()); } // in ordered state we do not add items multiple times if (notYetOrderedState) { assertEquals(7, man.getElementCount()); } else { assertEquals(6, man.getElementCount()); } man.forceSorting(); // still the same size // in ordered state we do not add items multiple times if (notYetOrderedState) { assertEquals(7, man.getElementCount()); } else { assertEquals(6, man.getElementCount()); } if (notYetOrderedState) { // the iterator should still return 9 before 10 Iterator<? extends Item> it = man.getItemsIterator(); assertEquals("9", it.next().getID()); assertEquals("10", it.next().getID()); assertEquals("8", it.next().getID()); assertEquals("11", it.next().getID()); assertEquals("8", it.next().getID()); assertEquals("7", it.next().getID()); assertEquals("12", it.next().getID()); } } /** * . */ private static class LocalIM extends ItemManager { /* (non-Javadoc) * @see org.jajuk.base.ItemManager#getLabel() */ @Override public String getXMLTag() { return "TestLabel"; } /** * Instantiates a new local im. */ public LocalIM() { super(); registerProperty(new PropertyMetaInformation(Const.XML_ID, false, true, false, false, false, String.class, null)); } } /** * . */ private static class TestItem extends Item implements Comparable<Item> { /* (non-Javadoc) * @see java.lang.Comparable#compareTo(java.lang.Object) */ @Override public int compareTo(Item o) { return getID().compareTo(o.getID()); } /** * Instantiates a new test item. * * @param id * @param name */ public TestItem(String id, String name) { super(id, name); } /* (non-Javadoc) * @see org.jajuk.base.Item#getDesc() */ @Override public String getTitle() { return "desc"; } /* (non-Javadoc) * @see org.jajuk.base.Item#getIconRepresentation() */ @Override public ImageIcon getIconRepresentation() { return null; } /** * Gets the label. * * @return the label */ @Override public String getXMLTag() { return "Test"; } } }