1 package net.sf.navigator.menu; 2 3 import java.util.ArrayList; 4 5 import junit.extensions.TestSetup; 6 import junit.framework.Test; 7 import junit.framework.TestCase; 8 import junit.framework.TestSuite; 9 10 /** 11 * @author DEPeart 12 * 13 */ 14 public class MenuRepositoryTest extends TestCase { 15 16 public MenuRepositoryTest(String name) { 17 super(name); 18 } 19 20 static MenuRepository repository; 21 22 public static Test suite() { 23 TestSuite suite = new TestSuite(MenuRepositoryTest.class); 24 25 return new TestSetup(suite) { 26 protected void setUp() throws Exception { 27 repository = buildRepository(); 28 } 29 30 protected void tearDown() throws Exception { 31 } 32 }; 33 } 34 35 public void setUp() throws Exception { 36 } 37 38 protected void tearDown() throws Exception { 39 } 40 41 private static MenuRepository buildRepository() { 42 MenuRepository rep = new MenuRepository(); 43 MenuComponent parent = new MenuComponent(); 44 parent.setDescription("parentMenuName"); 45 parent.setName("parent"); 46 MenuComponent child = new MenuComponent(); 47 child.setDescription("childMenuName"); 48 child.setName("child"); 49 child.setParent(parent); 50 rep.addMenu(parent); 51 MenuComponent menu = new MenuComponent(); 52 menu.setDescription("menu"); 53 menu.setName("menu"); 54 rep.addMenu(menu); 55 MenuComponent complex1 = new MenuComponent(); 56 complex1.setName("complex1"); 57 MenuComponent complex2 = new MenuComponent(); 58 complex2.setName("complex1.1"); 59 complex2.setParent(complex1); 60 MenuComponent complex3 = new MenuComponent(); 61 complex3.setName("complex1.2"); 62 complex3.setParent(complex1); 63 MenuComponent complex5 = new MenuComponent(); 64 complex5.setName("complex1.2.1"); 65 complex5.setParent(complex3); 66 MenuComponent complex4 = new MenuComponent(); 67 complex4.setName("complex1.3"); 68 complex4.setParent(complex1); 69 rep.addMenu(complex1); 70 return rep; 71 } 72 73 /** 74 * Ensure we return a child of a parent menu. 75 * @return Success 76 */ 77 public void testGetMenu() { 78 79 MenuComponent menu = repository.getMenu("parent.child", "."); 80 assertEquals("childMenuName", menu.getDescription()); 81 } 82 83 /** 84 * Ensure we return a parent menu only 85 * @return Success 86 */ 87 public void testGetMenuParent() { 88 89 MenuComponent menu = repository.getMenu("parent", "."); 90 assertEquals("parentMenuName", menu.getDescription()); 91 } 92 93 /** 94 * Test no menu found. 95 * @return null value. Failure 96 */ 97 public void testGetMenuInvalidMenuName() { 98 99 MenuComponent menu = repository.getMenu("failure", "."); 100 assertNull(menu); 101 } 102 103 /** 104 * Test invalid delimiter, but first menu level requested and so will be found 105 * @return Sucess 106 */ 107 public void testGetMenuInvalidDelimiterParentMenu() { 108 109 MenuComponent menu = repository.getMenu("parent", ","); 110 assertEquals("parentMenuName", menu.getDescription()); 111 } 112 113 /** 114 * Test no menu found, because of invalid delimiter, when a child menu level 115 * @return null value. Failure 116 */ 117 public void testGetMenuInvalidDelimiter() { 118 119 MenuComponent menu = repository.getMenu("parent.child", ","); 120 assertNull(menu); 121 } 122 123 /** 124 * Test for a null repository 125 * @return null value. Failure 126 */ 127 public void testGetMenuNewRepository() { 128 129 MenuComponent menu = repository.getMenu("parent.child", ","); 130 assertNull(menu); 131 } 132 133 /** 134 * Test for a null delimiter 135 * @exception NullPointerException. Failure 136 */ 137 public void testGetMenuNoDelimiter() { 138 139 try { 140 MenuComponent menu = repository.getMenu("parent.child", null); 141 fail("Should have thrown a NullPointerException"); 142 } catch (NullPointerException e) { 143 } 144 } 145 146 /** 147 * Test for a null menuName 148 * @exception NullPointerException. Failure 149 */ 150 public void testGetMenuNoMenuName() { 151 152 try { 153 MenuComponent menu = repository.getMenu(null, "."); 154 fail("Should have thrown a NullPointerException"); 155 } catch (NullPointerException e) { 156 } 157 } 158 159 /** 160 * Test for an empty menuName 161 * @return null value. Failure 162 */ 163 public void testGetMenuEmptyMenuName() { 164 165 MenuComponent menu = repository.getMenu("", "."); 166 assertNull(menu); 167 } 168 169 /** 170 * Test for an empty delimiter 171 * @return null value. Failure 172 */ 173 public void testGetMenuEmptyDelimiter() { 174 175 MenuComponent menu = repository.getMenu("parent.child", ""); 176 assertNull(menu); 177 } 178 179 /** 180 * Test for a null menuName 181 * @return -1 182 */ 183 public void testGetMenuDepthNullMenuName() { 184 185 assertEquals(-1, repository.getMenuDepth(null)); 186 } 187 188 /** 189 * Test for an invalid menuName 190 * @return -1 191 */ 192 public void testGetMenuDepthNoMenuName() { 193 194 assertEquals(-1, repository.getMenuDepth("noMenu")); 195 } 196 197 /** 198 * Test for a depth of 1 menu level 199 * @return 1 200 */ 201 public void testGetMenuDepthOf1() { 202 203 assertEquals(1, repository.getMenuDepth("menu")); 204 } 205 206 /** 207 * Test for a depth of 2 menu levels 208 * @return 2 209 */ 210 public void testGetMenuDepthOf2() { 211 212 assertEquals(2, repository.getMenuDepth("parent")); 213 } 214 215 /** 216 * Test for a depth of 3 menu levels 217 * @return 3 218 */ 219 public void testGetMenuDepthOf3() { 220 221 assertEquals(3, repository.getMenuDepth("complex1")); 222 } 223 224 /** 225 * Test for a depth of 3 menu levels 226 * @return 3 227 */ 228 public void testGetMenuDepthAll() { 229 230 assertEquals(3, repository.getMenuDepth()); 231 } 232 233 /** 234 * Test returning the top menus within an array 235 * @return 3 236 */ 237 public void testGetTopMenusAsArray() { 238 239 MenuComponent[] menus = repository.getTopMenusAsArray(); 240 assertEquals(3, menus.length); 241 } 242 243 /** 244 * Test removing all menus from the repository 245 * @return 0 246 */ 247 public void testRemoveAllMenus() { 248 249 MenuRepository rep = buildRepository(); 250 assertEquals(3, rep.getTopMenus().size()); 251 rep.removeAllMenus(); 252 assertEquals(0, rep.getTopMenus().size()); 253 } 254 255 /** 256 * Test get a list of the top menus' names 257 * @return Success 258 */ 259 public void testGetTopMenusNames() { 260 MenuRepository rep = buildRepository(); 261 ArrayList names = (ArrayList) rep.getTopMenusNames(); 262 assertEquals(3, names.size()); 263 assertEquals("parent", ((String) names.get(0))); 264 } 265 266 /** 267 * Test building the breadcrumbs but no delimiter 268 * @return Success 269 */ 270 public void testBuildBreadCrumbNullPointerException() { 271 MenuRepository rep = buildRepository(); 272 try { 273 rep.buildBreadCrumbs(); 274 fail("NullPointerException expected"); 275 } catch (NullPointerException e) { 276 } 277 } 278 279 /** 280 * Test building the breadcrumbs passing the delimiter 281 * @return Success 282 */ 283 public void testBuildBreadCrumbPassingDelimiter() { 284 MenuRepository rep = buildRepository(); 285 rep.buildBreadCrumbs(":"); 286 MenuComponent menu = rep.getMenu("parent"); 287 assertEquals("parent",menu.getBreadCrumb()); 288 MenuComponent[] menus = menu.getMenuComponents(); 289 assertEquals("parent:child",menus[0].getBreadCrumb()); 290 } 291 292 }