001 /* 002 * LAPIS lightweight structured text processing system 003 * 004 * Copyright (C) 1998-2002 Carnegie Mellon University, 005 * Copyright (C) 2003 Massachusetts Institute of Technology. 006 * All rights reserved. 007 * 008 * This library is free software; you can redistribute it 009 * and/or modify it under the terms of the GNU General 010 * Public License as published by the Free Software 011 * Foundation, version 2. 012 * 013 * LAPIS homepage: http://graphics.lcs.mit.edu/lapis/ 014 */ 015 package lapisx.util; 016 017 import junit.framework.*; 018 019 import java.util.Enumeration; 020 import java.util.NoSuchElementException; 021 022 /** 023 * A collection of JUnit testcases to test the History class. 024 */ 025 public class HistoryTest extends TestCase { 026 027 protected History h0; 028 protected History h1; 029 protected History h2; 030 031 public HistoryTest (String name) { 032 super(name); 033 } 034 035 protected void setUp () { 036 h0 = new History (0); 037 h1 = new History (1); 038 h2 = new History (2); 039 } 040 041 public static Test suite () { 042 return new TestSuite (HistoryTest.class); 043 } 044 045 /* 046 Tests 047 048 creating history of size 0, 1, n 049 clearing an empty history, a full history 050 051 events 052 */ 053 public void testAdd () { 054 h0.add ("1"); 055 assertEnum (new String[] {}, h0.elements()); 056 057 h1.clear (); 058 h1.add ("1"); 059 assertEnum (new String[] {"1"}, h1.elements ()); 060 061 h1.add ("2"); 062 assertEnum (new String[] {"2"}, h1.elements ()); 063 064 h2.clear (); 065 h2.add ("1"); 066 h2.add ("2"); 067 h2.add ("3"); 068 h2.add ("4"); 069 assertEnum (new String[] {"3","4"}, h2.elements ()); 070 } 071 072 public void testClear () { 073 h0.clear (); 074 assertEnum (new String[] {}, h0.elements ()); 075 076 h2.add ("1"); 077 h2.add ("2"); 078 h2.clear (); 079 assertEnum (new String[] {}, h2.elements ()); 080 081 h2.clear (); 082 assertEnum (new String[] {}, h2.elements ()); 083 } 084 085 public void testCopy () { 086 History h0Dup = new History (h0); 087 assertEnum (new String[] {}, h0Dup.elements ()); 088 089 h2.clear (); 090 h2.add ("1"); 091 h2.add ("2"); 092 h2.add ("3"); 093 h2.add ("4"); 094 History h2Dup = new History (h2); 095 assertEnum (new String[] {"3","4"}, h2Dup.elements ()); 096 } 097 098 public void testPut () { 099 h1.clear (); 100 h1.add ("1"); 101 h1.put ("2"); 102 assertEnum (new String[] {"2"}, h1.elements ()); 103 104 h2.clear (); 105 h2.add ("1"); 106 h2.put ("2"); 107 assertEnum (new String[] {"1","2"}, h2.elements ()); 108 h2.put ("3"); 109 assertEnum (new String[] {"2","3"}, h2.elements ()); 110 h2.put ("4"); 111 assertEnum (new String[] {"3","4"}, h2.elements ()); 112 } 113 114 public void testForwardAndBack () { 115 assertNull (h0.get ()); 116 assertNull (h0.peekForward ()); 117 assertFalse (h0.canForward ()); 118 assertNull (h0.peekBack ()); 119 assertFalse (h0.canBack ()); 120 assertEnum (new Object[] {}, h0.elements ()); 121 assertEnum (new Object[] {}, h0.forwardElements ()); 122 assertEnum (new Object[] {}, h0.backElements ()); 123 124 h2.clear (); 125 assertNull (h2.get ()); 126 assertNull (h2.peekForward ()); 127 assertFalse (h2.canForward ()); 128 assertNull (h2.peekBack ()); 129 assertFalse (h2.canBack ()); 130 assertEnum (new Object[] {}, h2.elements ()); 131 assertEnum (new Object[] {}, h2.forwardElements ()); 132 assertEnum (new Object[] {}, h2.backElements ()); 133 134 h2.add ("1"); 135 assertEquals ("1", h2.get ()); 136 assertNull (h2.peekForward ()); 137 assertFalse (h2.canForward ()); 138 assertNull (h2.peekBack ()); 139 assertFalse (h2.canBack ()); 140 assertEnum (new Object[] {"1"}, h2.elements ()); 141 assertEnum (new Object[] {}, h2.forwardElements ()); 142 assertEnum (new Object[] {}, h2.backElements ()); 143 144 h2.add ("2"); 145 assertEquals ("2", h2.get ()); 146 assertEquals ("1", h2.peekBack ()); 147 assertTrue (h2.canBack ()); 148 assertNull (h2.peekForward ()); 149 assertFalse (h2.canForward ()); 150 assertEnum (new Object[] {"1", "2"}, h2.elements ()); 151 assertEnum (new Object[] {}, h2.forwardElements ()); 152 assertEnum (new Object[] {"1"}, h2.backElements ()); 153 154 assertEquals ("1", h2.back ()); 155 assertEquals ("1", h2.get ()); 156 assertNull (h2.peekBack ()); 157 assertFalse (h2.canBack ()); 158 assertEquals ("2", h2.peekForward ()); 159 assertTrue (h2.canForward ()); 160 assertEnum (new Object[] {"1", "2"}, h2.elements ()); 161 assertEnum (new Object[] {"2"}, h2.forwardElements ()); 162 assertEnum (new Object[] {}, h2.backElements ()); 163 164 h2.add ("3"); 165 assertEquals ("3", h2.get ()); 166 assertEquals ("2", h2.peekBack ()); 167 assertNull (h2.peekForward ()); 168 assertEnum (new Object[] {"2","3"}, h2.elements ()); 169 assertEnum (new Object[] {}, h2.forwardElements ()); 170 assertEnum (new Object[] {"2"}, h2.backElements ()); 171 172 assertEquals ("2", h2.back ()); 173 assertNull (h2.back ()); 174 assertEquals ("2", h2.get ()); 175 assertEnum (new Object[] {"2","3"}, h2.elements ()); 176 assertEnum (new Object[] {"3"}, h2.forwardElements ()); 177 assertEnum (new Object[] {}, h2.backElements ()); 178 179 assertEquals ("3", h2.forward ()); 180 assertNull (h2.forward ()); 181 assertEquals ("3", h2.get ()); 182 assertEnum (new Object[] {"2","3"}, h2.elements ()); 183 assertEnum (new Object[] {}, h2.forwardElements ()); 184 assertEnum (new Object[] {"2"}, h2.backElements ()); 185 } 186 187 public void testReplace () { 188 h2.clear (); 189 h2.replace ("1"); 190 assertEnum (new String[] {"1"}, h2.elements ()); 191 192 h2.replace ("2"); 193 assertEnum (new String[] {"2"}, h2.elements ()); 194 195 h2.add ("3"); 196 h2.replace ("4"); 197 assertEnum (new String[] {"2","4"}, h2.elements ()); 198 199 h2.back (); 200 h2.replace ("5"); 201 assertEnum (new String[] {"5","4"}, h2.elements ()); 202 } 203 204 public void testToStartAndToEnd () { 205 h2.clear (); 206 assertNull (h2.toStart ()); 207 assertNull (h2.toEnd ()); 208 209 h2.add ("1"); 210 h2.add ("2"); 211 h2.add ("3"); 212 213 h2.toStart (); 214 assertEquals ("2", h2.get ()); 215 216 h2.toEnd (); 217 assertEquals ("3", h2.get ()); 218 } 219 220 public void testSize () { 221 assertTrue (h0.isEmpty ()); 222 assertTrue (h0.isFull ()); 223 assertEquals (0, h0.size ()); 224 225 h1.clear (); 226 assertTrue (h1.isEmpty ()); 227 assertFalse (h1.isFull ()); 228 assertEquals (0, h1.size ()); 229 230 h1.add ("1"); 231 assertFalse (h1.isEmpty ()); 232 assertTrue (h1.isFull ()); 233 assertEquals (1, h1.size ()); 234 235 h2.clear (); 236 h2.add ("1"); 237 assertFalse (h2.isEmpty ()); 238 assertFalse (h2.isFull ()); 239 assertEquals (1, h2.size ()); 240 241 h2.add ("2"); 242 assertFalse (h2.isEmpty ()); 243 assertTrue (h2.isFull ()); 244 assertEquals (2, h2.size ()); 245 246 h2.add ("3"); 247 assertFalse (h2.isEmpty ()); 248 assertTrue (h2.isFull ()); 249 assertEquals (2, h2.size ()); 250 } 251 252 public void testContains () { 253 assertFalse (h0.contains ("1")); 254 255 h1.add ("1"); 256 assertTrue (h1.contains ("1")); 257 258 h2.clear (); 259 h2.add ("1"); 260 h2.add ("2"); 261 h2.add ("3"); 262 assertFalse (h2.contains ("1")); 263 assertTrue (h2.contains ("2")); 264 assertTrue (h2.contains ("3")); 265 266 h2.clear (); 267 assertFalse (h2.contains ("2")); 268 assertFalse (h2.contains ("3")); 269 } 270 271 public void testExpand () { 272 History h0 = new History (0); 273 History h2 = new History (2); 274 275 // expand shouldn't affect h0 276 h0.expand (); 277 h0.add ("1"); 278 assertEnum (new String[]{}, h0.elements ()); 279 280 // but it should double h2 281 h2.add ("1"); 282 h2.add ("2"); 283 h2.add ("3"); 284 assertEnum (new String[]{"2","3"}, h2.elements ()); 285 h2.expand (); 286 assertEnum (new String[]{"2","3"}, h2.elements ()); 287 h2.add ("4"); 288 h2.add ("5"); 289 h2.add ("6"); 290 assertEnum (new String[]{"3","4","5","6"}, h2.elements ()); 291 292 // double h2 again 293 h2.clear (); 294 h2.expand (); 295 h2.add ("1"); 296 h2.add ("2"); 297 h2.add ("3"); 298 h2.add ("4"); 299 h2.add ("5"); 300 h2.add ("6"); 301 h2.add ("7"); 302 h2.add ("8"); 303 h2.add ("9"); 304 assertEnum (new String[]{"2","3","4","5","6","7","8","9"}, h2.elements ()); 305 } 306 307 public void testJumpTo () { 308 try { 309 h0.jumpTo ("a"); 310 fail ("didn't throw exception"); 311 } catch (NoSuchElementException e) {} 312 313 h1.clear (); 314 try { 315 h1.jumpTo ("a"); 316 fail ("didn't throw exception"); 317 } catch (NoSuchElementException e) {} 318 319 h2.clear (); 320 h2.add ("a"); 321 h2.add ("b"); 322 h2.jumpTo ("a"); 323 assertEquals ("a", h2.get ()); 324 325 h2.add ("c"); 326 try { 327 h2.jumpTo ("a"); 328 fail ("didn't throw exception"); 329 } catch (NoSuchElementException e) {} 330 331 h2.jumpTo ("c"); 332 assertEquals ("c", h2.get ()); 333 } 334 335 /** 336 * Compare an enumeration with an expected sequence of objects. 337 */ 338 private void assertEnum (Object[] expected, Enumeration actual) { 339 int i = 0; 340 while (actual.hasMoreElements ()) { 341 assertTrue (i < expected.length); 342 assertEquals (expected[i], actual.nextElement ()); 343 ++i; 344 } 345 assertTrue (i == expected.length); 346 } 347 } 348