1 /* $Id$ */ 2 /*************************************************************************** 3 * (C) Copyright 2003-2010 - Stendhal * 4 *************************************************************************** 5 *************************************************************************** 6 * * 7 * This program is free software; you can redistribute it and/or modify * 8 * it under the terms of the GNU General Public License as published by * 9 * the Free Software Foundation; either version 2 of the License, or * 10 * (at your option) any later version. * 11 * * 12 ***************************************************************************/ 13 package games.stendhal.client; 14 15 import static org.junit.Assert.assertFalse; 16 import static org.junit.Assert.assertTrue; 17 18 import org.junit.After; 19 import org.junit.AfterClass; 20 import org.junit.Before; 21 import org.junit.BeforeClass; 22 import org.junit.Test; 23 24 import marauroa.common.game.RPObject; 25 26 public class PerceptionToObjectTest { 27 28 private class ObjectChangeListenerAdapter implements 29 ObjectChangeListener { 30 31 ObjectChangeListenerAdapter()32 private ObjectChangeListenerAdapter() { 33 34 } 35 36 @Override deleted()37 public void deleted() { 38 39 } 40 41 @Override modifiedAdded(final RPObject changes)42 public void modifiedAdded(final RPObject changes) { 43 44 } 45 46 @Override modifiedDeleted(final RPObject changes)47 public void modifiedDeleted(final RPObject changes) { 48 49 } 50 } 51 52 @BeforeClass setUpBeforeClass()53 public static void setUpBeforeClass() throws Exception { 54 } 55 56 @AfterClass tearDownAfterClass()57 public static void tearDownAfterClass() throws Exception { 58 } 59 60 @Before setUp()61 public void setUp() throws Exception { 62 } 63 64 @After tearDown()65 public void tearDown() throws Exception { 66 } 67 68 /** 69 * Tests for onClear2Listeners1Object. 70 */ 71 @Test testOnClear2Listeners1Object()72 public final void testOnClear2Listeners1Object() { 73 final PerceptionToObject pto = new PerceptionToObject(); 74 final RPObject testvalues = new RPObject(); 75 76 final ObjectChangeListener listener1 = new ObjectChangeListenerAdapter() { 77 @Override 78 public void deleted() { 79 testvalues.put("listener1", ""); 80 81 } 82 }; 83 final ObjectChangeListener listener2 = new ObjectChangeListenerAdapter() { 84 @Override 85 public void deleted() { 86 testvalues.put("listener2", ""); 87 } 88 }; 89 90 RPObject observed = new RPObject(); 91 observed.setID(new RPObject.ID(1, "zone")); 92 assertFalse(testvalues.has("listener1")); 93 assertFalse(testvalues.has("listener2")); 94 95 pto.register(observed, listener1); 96 pto.register(observed, listener2); 97 98 assertTrue(pto.map.get(observed.getID()).contains(listener2)); 99 assertTrue(pto.map.get(observed.getID()).contains(listener1)); 100 101 pto.onClear(); 102 103 104 assertTrue(testvalues.has("listener2")); 105 assertTrue(testvalues.has("listener1")); 106 } 107 108 // TODO: remove listener from pto must remove all references 109 110 111 112 /** 113 * Tests for onClear. 114 */ 115 @Test testOnClear()116 public final void testOnClear() { 117 final String attribute = "clear"; 118 final PerceptionToObject pto = new PerceptionToObject(); 119 final RPObject object = new RPObject(); 120 object.setID(new RPObject.ID(1, "zone")); 121 final ObjectChangeListener listener = new ObjectChangeListenerAdapter() { 122 123 @Override 124 public void deleted() { 125 object.put(attribute, ""); 126 } 127 128 }; 129 final RPObject object2 = new RPObject(); 130 object2.setID(new RPObject.ID(2, "zone")); 131 132 pto.register(object, listener); 133 pto.register(object2, listener); 134 assertTrue("object is contained in map after register of listener", pto.map.containsKey(object.getID())); 135 136 assertFalse("deleted not yet called", object.has(attribute)); 137 138 assertTrue(pto.map.containsKey(object2.getID())); 139 assertFalse(object2.has(attribute)); 140 141 pto.onClear(); 142 143 assertTrue(object.has(attribute)); 144 assertFalse(object2.has(attribute)); 145 146 assertFalse(pto.map.containsKey(object.getID())); 147 assertFalse(pto.map.containsKey(object2.getID())); 148 } 149 150 /** 151 * Tests for onDeleted. 152 */ 153 @Test testOnDeleted()154 public final void testOnDeleted() { 155 final String attribute = "deleted"; 156 final PerceptionToObject pto = new PerceptionToObject(); 157 final RPObject object = new RPObject(); 158 object.setID(new RPObject.ID(1, "zone")); 159 final ObjectChangeListener listener = new ObjectChangeListenerAdapter() { 160 161 @Override 162 public void deleted() { 163 object.put(attribute, ""); 164 } 165 166 }; 167 final RPObject object2 = new RPObject(); 168 object2.setID(new RPObject.ID(2, "zone")); 169 170 pto.register(object, listener); 171 pto.register(object2, listener); 172 assertTrue(pto.map.containsKey(object.getID())); 173 174 assertFalse(object.has(attribute)); 175 176 assertTrue(pto.map.containsKey(object2.getID())); 177 assertFalse(object2.has(attribute)); 178 179 pto.onDeleted(object); 180 181 assertFalse(pto.map.containsKey(object.getID())); 182 assertTrue(object.has(attribute)); 183 assertTrue(pto.map.containsKey(object2.getID())); 184 assertFalse(object2.has(attribute)); 185 } 186 187 /** 188 * Tests for onException. 189 */ 190 @Test testOnException()191 public final void testOnException() { 192 final String attribute = "clear"; 193 final PerceptionToObject pto = new PerceptionToObject(); 194 final RPObject object = new RPObject(); 195 object.setID(new RPObject.ID(1, "zone")); 196 final ObjectChangeListener listener = new ObjectChangeListenerAdapter() { 197 198 @Override 199 public void deleted() { 200 object.put(attribute, ""); 201 } 202 203 }; 204 final RPObject object2 = new RPObject(); 205 object2.setID(new RPObject.ID(2, "zone")); 206 207 pto.register(object, listener); 208 pto.register(object2, listener); 209 assertTrue(pto.map.containsKey(object.getID())); 210 211 assertFalse(object.has(attribute)); 212 213 assertTrue(pto.map.containsKey(object2.getID())); 214 assertFalse(object2.has(attribute)); 215 216 pto.onException(null, null); 217 218 assertTrue(object.has(attribute)); 219 assertFalse(pto.map.containsKey(object.getID())); 220 assertFalse(pto.map.containsKey(object2.getID())); 221 } 222 223 /** 224 * Tests for onModifiedAdded. 225 */ 226 @Test testOnModifiedAdded()227 public final void testOnModifiedAdded() { 228 final PerceptionToObject pto = new PerceptionToObject(); 229 final RPObject object = new RPObject(); 230 object.setID(new RPObject.ID(1, "zone")); 231 final String attribute = "modifiedadded"; 232 final ObjectChangeListener listener = new ObjectChangeListenerAdapter() { 233 234 @Override 235 public void modifiedAdded(final RPObject changes) { 236 object.add(attribute, 1); 237 } 238 }; 239 240 final RPObject changes = new RPObject(); 241 changes.setID(new RPObject.ID(object.getID().getObjectID(), object.getID().getZoneID())); 242 final RPObject object2 = new RPObject(); 243 object2.setID(new RPObject.ID(2, "zone")); 244 245 pto.register(object, listener); 246 pto.register(object2, listener); 247 assertTrue(pto.map.containsKey(object.getID())); 248 assertFalse(object.has(attribute)); 249 250 assertTrue(pto.map.containsKey(object2.getID())); 251 assertFalse(object2.has(attribute)); 252 253 pto.onModifiedAdded(object, changes); 254 255 assertTrue(pto.map.containsKey(object.getID())); 256 assertTrue(object.has(attribute)); 257 assertTrue(pto.map.containsKey(object2.getID())); 258 assertFalse(object2.has(attribute)); 259 } 260 261 /** 262 * Tests for onModifiedDeleted. 263 */ 264 @Test testOnModifiedDeleted()265 public final void testOnModifiedDeleted() { 266 final PerceptionToObject pto = new PerceptionToObject(); 267 final RPObject object = new RPObject(); 268 object.setID(new RPObject.ID(1, "zone")); 269 final String attribute = "modifieddeleted"; 270 final ObjectChangeListener listener = new ObjectChangeListenerAdapter() { 271 272 @Override 273 public void modifiedDeleted(final RPObject changes) { 274 object.add(attribute, 1); 275 } 276 }; 277 278 final RPObject changes = new RPObject(); 279 changes.setID(new RPObject.ID(object.getID().getObjectID(), object.getID().getZoneID())); 280 final RPObject object2 = new RPObject(); 281 object2.setID(new RPObject.ID(2, "zone")); 282 283 pto.register(object, listener); 284 pto.register(object2, listener); 285 assertTrue(pto.map.containsKey(object.getID())); 286 assertFalse(object.has(attribute)); 287 288 assertTrue(pto.map.containsKey(object2.getID())); 289 assertFalse(object2.has(attribute)); 290 291 pto.onModifiedDeleted(object, changes); 292 293 assertTrue(pto.map.containsKey(object.getID())); 294 assertTrue(object.has(attribute)); 295 assertTrue(pto.map.containsKey(object2.getID())); 296 assertFalse(object2.has(attribute)); 297 298 } 299 300 /** 301 * Tests for onMyRPObject. 302 */ 303 @Test testOnMyRPObject()304 public final void testOnMyRPObject() { 305 final PerceptionToObject pto = new PerceptionToObject(); 306 final RPObject object = new RPObject(); 307 object.setID(new RPObject.ID(1, "zone")); 308 final String attribute = "modifieddeleted"; 309 final ObjectChangeListener listener = new ObjectChangeListenerAdapter() { 310 311 @Override 312 public void modifiedDeleted(final RPObject changes) { 313 object.add(attribute, 1); 314 } 315 }; 316 317 final RPObject changes = new RPObject(); 318 changes.setID(new RPObject.ID(object.getID().getObjectID(), object.getID().getZoneID())); 319 final RPObject object2 = new RPObject(); 320 object2.setID(new RPObject.ID(2, "zone")); 321 322 pto.register(object, listener); 323 pto.register(object2, listener); 324 assertTrue(pto.map.containsKey(object.getID())); 325 assertFalse(object.has(attribute)); 326 327 assertTrue(pto.map.containsKey(object2.getID())); 328 assertFalse(object2.has(attribute)); 329 330 pto.onModifiedDeleted(object, changes); 331 332 assertTrue(pto.map.containsKey(object.getID())); 333 assertTrue(object.has(attribute)); 334 assertTrue(pto.map.containsKey(object2.getID())); 335 assertFalse(object2.has(attribute)); 336 } 337 338 339 /** 340 * Tests for registerUnregister. 341 */ 342 @Test testRegisterUnregister()343 public final void testRegisterUnregister() { 344 final PerceptionToObject pto = new PerceptionToObject(); 345 final RPObject object = new RPObject(); 346 object.setID(new RPObject.ID(1, "zone")); 347 final ObjectChangeListener listener = new ObjectChangeListenerAdapter(); 348 349 final RPObject changes = new RPObject(); 350 changes.setID(new RPObject.ID(object.getID().getObjectID(), object.getID().getZoneID())); 351 final RPObject object2 = new RPObject(); 352 object2.setID(new RPObject.ID(2, "zone")); 353 final RPObject object3 = new RPObject(); 354 object3.setID(new RPObject.ID(3, "zone")); 355 356 pto.register(object, listener); 357 pto.register(object2, listener); 358 pto.register(object3, new ObjectChangeListenerAdapter()); 359 assertTrue(pto.map.containsKey(object.getID())); 360 assertTrue(pto.map.containsKey(object2.getID())); 361 assertTrue(pto.map.containsKey(object3.getID())); 362 363 364 pto.unregister(listener); 365 assertTrue(pto.map.get(object.getID()).isEmpty()); 366 assertTrue(pto.map.get(object2.getID()).isEmpty()); 367 assertFalse(pto.map.get(object3.getID()).isEmpty()); 368 369 } 370 371 /** 372 * Tests for absentObject. 373 */ 374 @Test testabsentObject()375 public final void testabsentObject() { 376 PerceptionToObject pto = new PerceptionToObject(); 377 assertTrue(pto.map.isEmpty()); 378 RPObject object = new RPObject(); 379 object.setID(new RPObject.ID(1, "ZONE")); 380 381 pto.onClear(); 382 pto.onDeleted(object); 383 pto.onException(null, null); 384 pto.onModifiedAdded(object, null); 385 pto.onModifiedDeleted(object, null); 386 pto.onMyRPObject(object, null); 387 pto.onMyRPObject(null, object); 388 389 390 } 391 392 } 393