001/* 002 * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games. 003 * Copyright (C) 2000-2011 The Gridarta Developers. 004 * 005 * This program is free software; you can redistribute it and/or modify 006 * it under the terms of the GNU General Public License as published by 007 * the Free Software Foundation; either version 2 of the License, or 008 * (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU General Public License for more details. 014 * 015 * You should have received a copy of the GNU General Public License along 016 * with this program; if not, write to the Free Software Foundation, Inc., 017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 018 */ 019 020package net.sf.gridarta.plugin.parameter; 021 022import java.io.File; 023import java.io.IOException; 024import java.io.StringReader; 025import java.io.StringWriter; 026import java.io.Writer; 027import java.util.Collections; 028import net.sf.gridarta.model.archetype.TestArchetype; 029import net.sf.gridarta.model.filter.NamedFilter; 030import net.sf.gridarta.model.filter.NamedFilterConfig; 031import net.sf.gridarta.model.gameobject.TestGameObject; 032import net.sf.gridarta.model.maparchobject.TestMapArchObject; 033import net.sf.gridarta.model.mapcontrol.MapControl; 034import net.sf.gridarta.model.mapcontrol.TestMapControlCreator; 035import net.sf.gridarta.model.mapmodel.TestMapModelCreator; 036import net.sf.gridarta.model.match.NamedGameObjectMatcher; 037import net.sf.gridarta.utils.Size2D; 038import org.jdom.Document; 039import org.jdom.Element; 040import org.jdom.JDOMException; 041import org.jdom.input.SAXBuilder; 042import org.jdom.output.Format; 043import org.jdom.output.XMLOutputter; 044import org.jetbrains.annotations.NotNull; 045import org.junit.Assert; 046import org.junit.Ignore; 047import org.junit.Test; 048 049/** 050 * Regression tests for {@link PluginParameterCodec}. 051 * @author Andreas Kirschbaum 052 */ 053public class PluginParameterCodecTest { 054 055 /** 056 * Checks that an {@link ArchetypeParameter} instance is correctly encoded. 057 * @throws IOException if the test fails 058 */ 059 @Test 060 public void testArchetypeToXml1() throws IOException { 061 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 062 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new ArchetypeParameter<TestGameObject, TestMapArchObject, TestArchetype>(mapModelCreator.getArchetypeSet()); 063 final StringBuilder sb = new StringBuilder(); 064 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 065 sb.append("<parameter>\r\n"); 066 sb.append(" <name>[name]</name>\r\n"); 067 sb.append(" <description>[description]</description>\r\n"); 068 sb.append(" <type>net.sf.gridarta.model.archetype.Archetype</type>\r\n"); 069 sb.append(" <value />\r\n"); 070 sb.append("</parameter>\r\n"); 071 sb.append("\r\n"); 072 Assert.assertEquals(sb.toString(), toXML(parameter)); 073 } 074 075 /** 076 * Checks that an {@link ArchetypeParameter} instance is correctly encoded. 077 * @throws IOException if the test fails 078 */ 079 @Test 080 public void testArchetypeToXml2() throws IOException { 081 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 082 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new ArchetypeParameter<TestGameObject, TestMapArchObject, TestArchetype>(mapModelCreator.getArchetypeSet()); 083 parameter.setStringValue("undefined_archetype"); 084 final StringBuilder sb = new StringBuilder(); 085 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 086 sb.append("<parameter>\r\n"); 087 sb.append(" <name>[name]</name>\r\n"); 088 sb.append(" <description>[description]</description>\r\n"); 089 sb.append(" <type>net.sf.gridarta.model.archetype.Archetype</type>\r\n"); 090 sb.append(" <value>undefined_archetype</value>\r\n"); 091 sb.append("</parameter>\r\n"); 092 sb.append("\r\n"); 093 Assert.assertEquals(sb.toString(), toXML(parameter)); 094 } 095 096 /** 097 * Checks that an {@link ArchetypeParameter} instance is correctly encoded. 098 * @throws IOException if the test fails 099 */ 100 @Test 101 public void testArchetypeToXml3() throws IOException { 102 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 103 final TestArchetype archetype = mapModelCreator.getArchetype("existing_archetype"); 104 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new ArchetypeParameter<TestGameObject, TestMapArchObject, TestArchetype>(mapModelCreator.getArchetypeSet()); 105 parameter.setStringValue(archetype.getArchetypeName()); 106 final StringBuilder sb = new StringBuilder(); 107 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 108 sb.append("<parameter>\r\n"); 109 sb.append(" <name>[name]</name>\r\n"); 110 sb.append(" <description>[description]</description>\r\n"); 111 sb.append(" <type>net.sf.gridarta.model.archetype.Archetype</type>\r\n"); 112 sb.append(" <value>existing_archetype</value>\r\n"); 113 sb.append("</parameter>\r\n"); 114 sb.append("\r\n"); 115 Assert.assertEquals(sb.toString(), toXML(parameter)); 116 } 117 118 /** 119 * Checks that a {@link BooleanParameter} instance is correctly encoded. 120 * @throws IOException if the test fails 121 */ 122 @Test 123 public void testBooleanToXml1() throws IOException { 124 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new BooleanParameter<TestGameObject, TestMapArchObject, TestArchetype>(); 125 parameter.setName("Name"); 126 parameter.setDescription("Description"); 127 final StringBuilder sb = new StringBuilder(); 128 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 129 sb.append("<parameter>\r\n"); 130 sb.append(" <name>Name</name>\r\n"); 131 sb.append(" <description>Description</description>\r\n"); 132 sb.append(" <type>java.lang.Boolean</type>\r\n"); 133 sb.append(" <value>false</value>\r\n"); 134 sb.append(" <trueText>Yes</trueText>\r\n"); 135 sb.append(" <falseText>No</falseText>\r\n"); 136 sb.append("</parameter>\r\n"); 137 sb.append("\r\n"); 138 Assert.assertEquals(sb.toString(), toXML(parameter)); 139 } 140 141 /** 142 * Checks that a {@link BooleanParameter} instance is correctly encoded. 143 * @throws IOException if the test fails 144 */ 145 @Test 146 public void testBooleanToXml2() throws IOException { 147 final BooleanParameter<TestGameObject, TestMapArchObject, TestArchetype> parameter = new BooleanParameter<TestGameObject, TestMapArchObject, TestArchetype>(); 148 parameter.setStringValue("true"); 149 parameter.setTrueText("true-text"); 150 parameter.setFalseText("false-text"); 151 final StringBuilder sb = new StringBuilder(); 152 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 153 sb.append("<parameter>\r\n"); 154 sb.append(" <name>[name]</name>\r\n"); 155 sb.append(" <description>[description]</description>\r\n"); 156 sb.append(" <type>java.lang.Boolean</type>\r\n"); 157 sb.append(" <value>true</value>\r\n"); 158 sb.append(" <trueText>true-text</trueText>\r\n"); 159 sb.append(" <falseText>false-text</falseText>\r\n"); 160 sb.append("</parameter>\r\n"); 161 sb.append("\r\n"); 162 Assert.assertEquals(sb.toString(), toXML(parameter)); 163 } 164 165 /** 166 * Checks that a {@link DoubleParameter} instance is correctly encoded. 167 * @throws IOException if the test fails 168 */ 169 @Test 170 public void testDoubleToXml1() throws IOException { 171 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new DoubleParameter<TestGameObject, TestMapArchObject, TestArchetype>(); 172 parameter.setName("Name"); 173 parameter.setDescription("Description"); 174 final StringBuilder sb = new StringBuilder(); 175 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 176 sb.append("<parameter>\r\n"); 177 sb.append(" <name>Name</name>\r\n"); 178 sb.append(" <description>Description</description>\r\n"); 179 sb.append(" <type>java.lang.Double</type>\r\n"); 180 sb.append(" <value>0.0</value>\r\n"); 181 sb.append(" <minimum>0.0</minimum>\r\n"); 182 sb.append(" <maximum>1.0</maximum>\r\n"); 183 sb.append("</parameter>\r\n"); 184 sb.append("\r\n"); 185 Assert.assertEquals(sb.toString(), toXML(parameter)); 186 } 187 188 /** 189 * Checks that a {@link DoubleParameter} instance is correctly encoded. 190 * @throws IOException if the test fails 191 */ 192 @Test 193 public void testDoubleToXml2() throws IOException { 194 final DoubleParameter<TestGameObject, TestMapArchObject, TestArchetype> parameter = new DoubleParameter<TestGameObject, TestMapArchObject, TestArchetype>(); 195 parameter.setMin(-123.456); 196 parameter.setMax(234.0); 197 parameter.setValue(12.34); 198 final StringBuilder sb = new StringBuilder(); 199 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 200 sb.append("<parameter>\r\n"); 201 sb.append(" <name>[name]</name>\r\n"); 202 sb.append(" <description>[description]</description>\r\n"); 203 sb.append(" <type>java.lang.Double</type>\r\n"); 204 sb.append(" <value>12.34</value>\r\n"); 205 sb.append(" <minimum>-123.456</minimum>\r\n"); 206 sb.append(" <maximum>234.0</maximum>\r\n"); 207 sb.append("</parameter>\r\n"); 208 sb.append("\r\n"); 209 Assert.assertEquals(sb.toString(), toXML(parameter)); 210 } 211 212 /** 213 * Checks that a {@link FilterParameter} instance is correctly encoded. 214 * @throws IOException if the test fails 215 */ 216 @Ignore 217 @Test 218 public void testFilterToXml1() throws IOException { 219 final Iterable<NamedGameObjectMatcher> matchers = Collections.emptyList(); 220 final NamedFilter namedFilter = new NamedFilter(matchers); 221 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new FilterParameter<TestGameObject, TestMapArchObject, TestArchetype>(namedFilter); 222 parameter.setName("Name"); 223 parameter.setDescription("Description"); 224 final StringBuilder sb = new StringBuilder(); 225 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 226 sb.append("<parameter>\r\n"); 227 sb.append(" <name>Name</name>\r\n"); 228 sb.append(" <description>Description</description>\r\n"); 229 sb.append(" <type>net.sf.gridarta.model.filter.NamedFilterConfig</type>\r\n"); 230 sb.append(" <value>\r\n"); 231 sb.append(" <enabled>false</enabled>\r\n"); 232 sb.append(" <inverted>false</inverted>\r\n"); 233 sb.append(" </value>\r\n"); 234 sb.append("</parameter>\r\n"); 235 sb.append("\r\n"); 236 Assert.assertEquals(sb.toString(), toXML(parameter)); 237 } 238 239 /** 240 * Checks that a {@link FilterParameter} instance is correctly encoded. 241 * @throws IOException if the test fails 242 */ 243 @Ignore 244 @Test 245 public void testFilterToXml2() throws IOException { 246 final Iterable<NamedGameObjectMatcher> matchers = Collections.emptyList(); 247 final NamedFilter namedFilter = new NamedFilter(matchers); 248 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new FilterParameter<TestGameObject, TestMapArchObject, TestArchetype>(namedFilter); 249 final NamedFilterConfig config = namedFilter.createConfig(); 250 config.setInverted(true); 251 config.setEnabled(true); 252 //XXX:parameter.setValue(config); 253 final StringBuilder sb = new StringBuilder(); 254 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 255 sb.append("<parameter>\r\n"); 256 sb.append(" <name>[name]</name>\r\n"); 257 sb.append(" <description>[description]</description>\r\n"); 258 sb.append(" <type>net.sf.gridarta.model.filter.NamedFilterConfig</type>\r\n"); 259 sb.append(" <value>\r\n"); 260 sb.append(" <enabled>true</enabled>\r\n"); 261 sb.append(" <inverted>true</inverted>\r\n"); 262 sb.append(" </value>\r\n"); 263 sb.append("</parameter>\r\n"); 264 sb.append("\r\n"); 265 Assert.assertEquals(sb.toString(), toXML(parameter)); 266 } 267 268 /** 269 * Checks that an {@link IntegerParameter} instance is correctly encoded. 270 * @throws IOException if the test fails 271 */ 272 @Test 273 public void testIntegerToXml1() throws IOException { 274 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new IntegerParameter<TestGameObject, TestMapArchObject, TestArchetype>(); 275 parameter.setName("Name"); 276 parameter.setDescription("Description"); 277 final StringBuilder sb = new StringBuilder(); 278 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 279 sb.append("<parameter>\r\n"); 280 sb.append(" <name>Name</name>\r\n"); 281 sb.append(" <description>Description</description>\r\n"); 282 sb.append(" <type>java.lang.Integer</type>\r\n"); 283 sb.append(" <value>0</value>\r\n"); 284 sb.append(" <minimum>-2147483648</minimum>\r\n"); 285 sb.append(" <maximum>2147483647</maximum>\r\n"); 286 sb.append("</parameter>\r\n"); 287 sb.append("\r\n"); 288 Assert.assertEquals(sb.toString(), toXML(parameter)); 289 } 290 291 /** 292 * Checks that an {@link IntegerParameter} instance is correctly encoded. 293 * @throws IOException if the test fails 294 */ 295 @Test 296 public void testIntegerToXml2() throws IOException { 297 final IntegerParameter<TestGameObject, TestMapArchObject, TestArchetype> parameter = new IntegerParameter<TestGameObject, TestMapArchObject, TestArchetype>(); 298 parameter.setMin(-123); 299 parameter.setMax(234); 300 parameter.setValue(2); 301 final StringBuilder sb = new StringBuilder(); 302 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 303 sb.append("<parameter>\r\n"); 304 sb.append(" <name>[name]</name>\r\n"); 305 sb.append(" <description>[description]</description>\r\n"); 306 sb.append(" <type>java.lang.Integer</type>\r\n"); 307 sb.append(" <value>2</value>\r\n"); 308 sb.append(" <minimum>-123</minimum>\r\n"); 309 sb.append(" <maximum>234</maximum>\r\n"); 310 sb.append("</parameter>\r\n"); 311 sb.append("\r\n"); 312 Assert.assertEquals(sb.toString(), toXML(parameter)); 313 } 314 315 /** 316 * Checks that a {@link MapParameter} instance is correctly encoded. 317 * @throws IOException if the test fails 318 */ 319 @Test 320 public void testMapToXml1() throws IOException { 321 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 322 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new MapParameter<TestGameObject, TestMapArchObject, TestArchetype>(mapControlCreator.getMapManager()); 323 parameter.setName("Name"); 324 parameter.setDescription("Description"); 325 final StringBuilder sb = new StringBuilder(); 326 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 327 sb.append("<parameter>\r\n"); 328 sb.append(" <name>Name</name>\r\n"); 329 sb.append(" <description>Description</description>\r\n"); 330 sb.append(" <type>net.sf.gridarta.model.mapcontrol.MapControl</type>\r\n"); 331 sb.append(" <value />\r\n"); 332 sb.append("</parameter>\r\n"); 333 sb.append("\r\n"); 334 Assert.assertEquals(sb.toString(), toXML(parameter)); 335 } 336 337 /** 338 * Checks that a {@link MapParameter} instance is correctly encoded. 339 * @throws IOException if the test fails 340 */ 341 @Test 342 public void testMapToXml2() throws IOException { 343 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 344 final MapParameter<TestGameObject, TestMapArchObject, TestArchetype> parameter = new MapParameter<TestGameObject, TestMapArchObject, TestArchetype>(mapControlCreator.getMapManager()); 345 parameter.setValueToCurrent(); 346 final StringBuilder sb = new StringBuilder(); 347 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 348 sb.append("<parameter>\r\n"); 349 sb.append(" <name>[name]</name>\r\n"); 350 sb.append(" <description>[description]</description>\r\n"); 351 sb.append(" <type>net.sf.gridarta.model.mapcontrol.MapControl</type>\r\n"); 352 sb.append(" <value />\r\n"); 353 sb.append("</parameter>\r\n"); 354 sb.append("\r\n"); 355 Assert.assertEquals(sb.toString(), toXML(parameter)); 356 } 357 358 /** 359 * Checks that a {@link MapParameter} instance is correctly encoded. 360 * @throws IOException if the test fails 361 */ 362 @Test 363 public void testMapToXml3() throws IOException { 364 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 365 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new MapParameter<TestGameObject, TestMapArchObject, TestArchetype>(mapControlCreator.getMapManager()); 366 final File mapDir = new File("/tmp"); 367 final String mapPath = "path/to/map"; 368 mapControlCreator.newMapControl(new File(mapDir, mapPath), "map name", new Size2D(13, 15)); 369 parameter.setStringValue("/" + mapPath); 370 final StringBuilder sb = new StringBuilder(); 371 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 372 sb.append("<parameter>\r\n"); 373 sb.append(" <name>[name]</name>\r\n"); 374 sb.append(" <description>[description]</description>\r\n"); 375 sb.append(" <type>net.sf.gridarta.model.mapcontrol.MapControl</type>\r\n"); 376 sb.append(" <value>/path/to/map</value>\r\n"); 377 sb.append("</parameter>\r\n"); 378 sb.append("\r\n"); 379 Assert.assertEquals(sb.toString(), toXML(parameter)); 380 } 381 382 /** 383 * Checks that a {@link MapPathParameter} instance is correctly encoded. 384 * @throws IOException if the test fails 385 */ 386 @Test 387 public void testMapPathToXml1() throws IOException { 388 final File mapDir = new File("/tmp"); 389 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new MapPathParameter<TestGameObject, TestMapArchObject, TestArchetype>(mapDir); 390 parameter.setName("Name"); 391 parameter.setDescription("Description"); 392 final StringBuilder sb = new StringBuilder(); 393 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 394 sb.append("<parameter>\r\n"); 395 sb.append(" <name>Name</name>\r\n"); 396 sb.append(" <description>Description</description>\r\n"); 397 sb.append(" <type>MapPathParameter</type>\r\n"); 398 sb.append(" <value />\r\n"); 399 sb.append("</parameter>\r\n"); 400 sb.append("\r\n"); 401 Assert.assertEquals(sb.toString(), toXML(parameter)); 402 } 403 404 /** 405 * Checks that a {@link MapPathParameter} instance is correctly encoded. 406 * @throws IOException if the test fails 407 */ 408 @Test 409 public void testMapPathToXml2() throws IOException { 410 final File mapDir = new File("/tmp"); 411 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new MapPathParameter<TestGameObject, TestMapArchObject, TestArchetype>(mapDir); 412 parameter.setStringValue("/path"); 413 final StringBuilder sb = new StringBuilder(); 414 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 415 sb.append("<parameter>\r\n"); 416 sb.append(" <name>[name]</name>\r\n"); 417 sb.append(" <description>[description]</description>\r\n"); 418 sb.append(" <type>MapPathParameter</type>\r\n"); 419 sb.append(" <value>/path</value>\r\n"); 420 sb.append("</parameter>\r\n"); 421 sb.append("\r\n"); 422 Assert.assertEquals(sb.toString(), toXML(parameter)); 423 } 424 425 /** 426 * Checks that a {@link StringParameter} instance is correctly encoded. 427 * @throws IOException if the test fails 428 */ 429 @Test 430 public void testStringToXml1() throws IOException { 431 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new StringParameter<TestGameObject, TestMapArchObject, TestArchetype>(); 432 parameter.setName("Name"); 433 parameter.setDescription("Description"); 434 final StringBuilder sb = new StringBuilder(); 435 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 436 sb.append("<parameter>\r\n"); 437 sb.append(" <name>Name</name>\r\n"); 438 sb.append(" <description>Description</description>\r\n"); 439 sb.append(" <type>java.lang.String</type>\r\n"); 440 sb.append(" <value />\r\n"); 441 sb.append("</parameter>\r\n"); 442 sb.append("\r\n"); 443 Assert.assertEquals(sb.toString(), toXML(parameter)); 444 } 445 446 /** 447 * Checks that a {@link StringParameter} instance is correctly encoded. 448 * @throws IOException if the test fails 449 */ 450 @Test 451 public void testStringToXml2() throws IOException { 452 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = new StringParameter<TestGameObject, TestMapArchObject, TestArchetype>(); 453 parameter.setStringValue("string value"); 454 final StringBuilder sb = new StringBuilder(); 455 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 456 sb.append("<parameter>\r\n"); 457 sb.append(" <name>[name]</name>\r\n"); 458 sb.append(" <description>[description]</description>\r\n"); 459 sb.append(" <type>java.lang.String</type>\r\n"); 460 sb.append(" <value>string value</value>\r\n"); 461 sb.append("</parameter>\r\n"); 462 sb.append("\r\n"); 463 Assert.assertEquals(sb.toString(), toXML(parameter)); 464 } 465 466 /** 467 * Checks that a {@link ArchetypeParameter} is correctly decoded. 468 * @throws IOException if the test fails 469 * @throws JDOMException if the test fails 470 * @throws NoSuchParameterException if the test fails 471 */ 472 @Test 473 public void testArchetypeFromXml1() throws IOException, JDOMException, NoSuchParameterException { 474 final StringBuilder sb = new StringBuilder(); 475 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 476 sb.append("<parameter>\r\n"); 477 sb.append(" <name>Name</name>\r\n"); 478 sb.append(" <description>Description</description>\r\n"); 479 sb.append(" <type>net.sf.gridarta.model.archetype.Archetype</type>\r\n"); 480 sb.append(" <value/>\r\n"); 481 sb.append("</parameter>\r\n"); 482 sb.append("\r\n"); 483 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 484 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 485 Assert.assertTrue(parameter instanceof ArchetypeParameter); 486 Assert.assertEquals("Name", parameter.getName()); 487 Assert.assertEquals("net.sf.gridarta.model.archetype.Archetype", parameter.getParameterType()); 488 Assert.assertEquals("Description", parameter.getDescription()); 489 Assert.assertNull(parameter.getValue()); 490 Assert.assertEquals("", parameter.getStringValue()); 491 } 492 493 /** 494 * Checks that an {@link ArchetypeParameter} is correctly decoded. 495 * @throws IOException if the test fails 496 * @throws JDOMException if the test fails 497 * @throws NoSuchParameterException if the test fails 498 */ 499 @Test 500 public void testArchetypeFromXml2() throws IOException, JDOMException, NoSuchParameterException { 501 final StringBuilder sb = new StringBuilder(); 502 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 503 sb.append("<parameter>\r\n"); 504 sb.append(" <name>Name</name>\r\n"); 505 sb.append(" <description>Description</description>\r\n"); 506 sb.append(" <type>net.sf.gridarta.model.archetype.Archetype</type>\r\n"); 507 sb.append(" <value>undefined_archetype</value>\r\n"); 508 sb.append("</parameter>\r\n"); 509 sb.append("\r\n"); 510 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 511 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 512 Assert.assertTrue(parameter instanceof ArchetypeParameter); 513 Assert.assertEquals("Name", parameter.getName()); 514 Assert.assertEquals("net.sf.gridarta.model.archetype.Archetype", parameter.getParameterType()); 515 Assert.assertEquals("Description", parameter.getDescription()); 516 Assert.assertNull(parameter.getValue()); 517 Assert.assertEquals("undefined_archetype", parameter.getStringValue()); 518 } 519 520 /** 521 * Checks that an {@link ArchetypeParameter} is correctly decoded. 522 * @throws IOException if the test fails 523 * @throws JDOMException if the test fails 524 * @throws NoSuchParameterException if the test fails 525 */ 526 @Test 527 public void testArchetypeFromXml3() throws IOException, JDOMException, NoSuchParameterException { 528 final StringBuilder sb = new StringBuilder(); 529 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 530 sb.append("<parameter>\r\n"); 531 sb.append(" <name>Name</name>\r\n"); 532 sb.append(" <description>Description</description>\r\n"); 533 sb.append(" <type>net.sf.gridarta.model.archetype.Archetype</type>\r\n"); 534 sb.append(" <value>existing_archetype</value>\r\n"); 535 sb.append("</parameter>\r\n"); 536 sb.append("\r\n"); 537 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 538 final TestArchetype archetype = mapControlCreator.getMapModelCreator().getArchetype("existing_archetype"); 539 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 540 Assert.assertTrue(parameter instanceof ArchetypeParameter); 541 Assert.assertEquals("Name", parameter.getName()); 542 Assert.assertEquals("net.sf.gridarta.model.archetype.Archetype", parameter.getParameterType()); 543 Assert.assertEquals("Description", parameter.getDescription()); 544 Assert.assertSame(archetype, parameter.getValue()); 545 Assert.assertEquals("existing_archetype", parameter.getStringValue()); 546 } 547 548 /** 549 * Checks that a {@link BooleanParameter} is correctly decoded. 550 * @throws IOException if the test fails 551 * @throws JDOMException if the test fails 552 * @throws NoSuchParameterException if the test fails 553 */ 554 @Test 555 public void testBooleanFromXml1() throws IOException, JDOMException, NoSuchParameterException { 556 final StringBuilder sb = new StringBuilder(); 557 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 558 sb.append("<parameter>\r\n"); 559 sb.append(" <name>Name</name>\r\n"); 560 sb.append(" <description>Description</description>\r\n"); 561 sb.append(" <type>java.lang.Boolean</type>\r\n"); 562 sb.append(" <value />\r\n"); 563 sb.append(" <trueText>Yes</trueText>\r\n"); 564 sb.append(" <falseText>No</falseText>\r\n"); 565 sb.append("</parameter>\r\n"); 566 sb.append("\r\n"); 567 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 568 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 569 Assert.assertTrue(parameter instanceof BooleanParameter); 570 final BooleanParameter<?, ?, ?> booleanParameter = (BooleanParameter<?, ?, ?>) parameter; 571 Assert.assertEquals("Name", parameter.getName()); 572 Assert.assertEquals("java.lang.Boolean", parameter.getParameterType()); 573 Assert.assertEquals("Description", parameter.getDescription()); 574 Assert.assertSame(Boolean.FALSE, parameter.getValue()); 575 Assert.assertEquals("No", booleanParameter.getFalseText()); 576 Assert.assertEquals("Yes", booleanParameter.getTrueText()); 577 } 578 579 /** 580 * Checks that a {@link BooleanParameter} is correctly decoded. 581 * @throws IOException if the test fails 582 * @throws JDOMException if the test fails 583 * @throws NoSuchParameterException if the test fails 584 */ 585 @Test 586 public void testBooleanFromXml2() throws IOException, JDOMException, NoSuchParameterException { 587 final StringBuilder sb = new StringBuilder(); 588 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 589 sb.append("<parameter>\r\n"); 590 sb.append(" <name>Name</name>\r\n"); 591 sb.append(" <description>Description</description>\r\n"); 592 sb.append(" <type>java.lang.Boolean</type>\r\n"); 593 sb.append(" <value>true</value>\r\n"); 594 sb.append(" <trueText>true-text</trueText>\r\n"); 595 sb.append(" <falseText>false-text</falseText>\r\n"); 596 sb.append("</parameter>\r\n"); 597 sb.append("\r\n"); 598 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 599 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 600 Assert.assertTrue(parameter instanceof BooleanParameter); 601 final BooleanParameter<?, ?, ?> booleanParameter = (BooleanParameter<?, ?, ?>) parameter; 602 Assert.assertEquals("Name", parameter.getName()); 603 Assert.assertEquals("java.lang.Boolean", parameter.getParameterType()); 604 Assert.assertEquals("Description", parameter.getDescription()); 605 Assert.assertSame(Boolean.TRUE, parameter.getValue()); 606 Assert.assertEquals("false-text", booleanParameter.getFalseText()); 607 Assert.assertEquals("true-text", booleanParameter.getTrueText()); 608 } 609 610 /** 611 * Checks that a {@link DoubleParameter} is correctly decoded. 612 * @throws IOException if the test fails 613 * @throws JDOMException if the test fails 614 * @throws NoSuchParameterException if the test fails 615 */ 616 @Test 617 public void testDoubleFromXml1() throws IOException, JDOMException, NoSuchParameterException { 618 final StringBuilder sb = new StringBuilder(); 619 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 620 sb.append("<parameter>\r\n"); 621 sb.append(" <name>Name</name>\r\n"); 622 sb.append(" <description>Description</description>\r\n"); 623 sb.append(" <type>java.lang.Double</type>\r\n"); 624 sb.append(" <value />\r\n"); 625 sb.append(" <minimum>0.0</minimum>\r\n"); 626 sb.append(" <maximum>1.0</maximum>\r\n"); 627 sb.append("</parameter>\r\n"); 628 sb.append("\r\n"); 629 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 630 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 631 Assert.assertTrue(parameter instanceof DoubleParameter); 632 final DoubleParameter<?, ?, ?> doubleParameter = (DoubleParameter<?, ?, ?>) parameter; 633 Assert.assertEquals("Name", parameter.getName()); 634 Assert.assertEquals("java.lang.Double", parameter.getParameterType()); 635 Assert.assertEquals("Description", parameter.getDescription()); 636 Assert.assertEquals(0.0, parameter.getValue()); 637 Assert.assertEquals(0.0, doubleParameter.getMin()); 638 Assert.assertEquals(1.0, doubleParameter.getMax()); 639 } 640 641 /** 642 * Checks that a {@link DoubleParameter} is correctly decoded. 643 * @throws IOException if the test fails 644 * @throws JDOMException if the test fails 645 * @throws NoSuchParameterException if the test fails 646 */ 647 @Test 648 public void testDoubleFromXml2() throws IOException, JDOMException, NoSuchParameterException { 649 final StringBuilder sb = new StringBuilder(); 650 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 651 sb.append("<parameter>\r\n"); 652 sb.append(" <name>Name</name>\r\n"); 653 sb.append(" <description>Description</description>\r\n"); 654 sb.append(" <type>java.lang.Double</type>\r\n"); 655 sb.append(" <value>12.34</value>\r\n"); 656 sb.append(" <minimum>-123.456</minimum>\r\n"); 657 sb.append(" <maximum>234.0</maximum>\r\n"); 658 sb.append("</parameter>\r\n"); 659 sb.append("\r\n"); 660 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 661 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 662 Assert.assertTrue(parameter instanceof DoubleParameter); 663 final DoubleParameter<?, ?, ?> doubleParameter = (DoubleParameter<?, ?, ?>) parameter; 664 Assert.assertEquals("Name", parameter.getName()); 665 Assert.assertEquals("java.lang.Double", parameter.getParameterType()); 666 Assert.assertEquals("Description", parameter.getDescription()); 667 Assert.assertEquals(12.34, parameter.getValue()); 668 Assert.assertEquals(-123.456, doubleParameter.getMin()); 669 Assert.assertEquals(234.0, doubleParameter.getMax()); 670 } 671 672 /** 673 * Checks that a {@link FilterParameter} is correctly decoded. 674 * @throws IOException if the test fails 675 * @throws JDOMException if the test fails 676 * @throws NoSuchParameterException if the test fails 677 */ 678 @Ignore 679 @Test 680 public void testFilterFromXml1() throws IOException, JDOMException, NoSuchParameterException { 681 final StringBuilder sb = new StringBuilder(); 682 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 683 sb.append("<parameter>\r\n"); 684 sb.append(" <name>Name</name>\r\n"); 685 sb.append(" <description>Description</description>\r\n"); 686 sb.append(" <type>net.sf.gridarta.model.filter.NamedFilterConfig</type>\r\n"); 687 sb.append(" <value>\r\n"); 688 sb.append(" <enabled>false</enabled>\r\n"); 689 sb.append(" <inverted>false</inverted>\r\n"); 690 sb.append(" </value>\r\n"); 691 sb.append("</parameter>\r\n"); 692 sb.append("\r\n"); 693 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 694 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 695 Assert.assertTrue(parameter instanceof FilterParameter); 696 //noinspection TypeMayBeWeakened 697 final FilterParameter<?, ?, ?> filterParameter = (FilterParameter<?, ?, ?>) parameter; 698 Assert.assertEquals("Name", parameter.getName()); 699 Assert.assertEquals("net.sf.gridarta.model.filter.NamedFilterConfig", parameter.getParameterType()); 700 Assert.assertEquals("Description", parameter.getDescription()); 701 final NamedFilterConfig value = filterParameter.getValue(); 702 Assert.assertNotNull(value); 703 Assert.assertFalse(value.isEnabled()); 704 Assert.assertFalse(value.isInverted()); 705 } 706 707 /** 708 * Checks that a {@link FilterParameter} is correctly decoded. 709 * @throws IOException if the test fails 710 * @throws JDOMException if the test fails 711 * @throws NoSuchParameterException if the test fails 712 */ 713 @Ignore 714 @Test 715 public void testFilterFromXml2() throws IOException, JDOMException, NoSuchParameterException { 716 final StringBuilder sb = new StringBuilder(); 717 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 718 sb.append("<parameter>\r\n"); 719 sb.append(" <name>Name</name>\r\n"); 720 sb.append(" <description>Description</description>\r\n"); 721 sb.append(" <type>net.sf.gridarta.model.filter.NamedFilterConfig</type>\r\n"); 722 sb.append(" <value>\r\n"); 723 sb.append(" <enabled>true</enabled>\r\n"); 724 sb.append(" <inverted>true</inverted>\r\n"); 725 sb.append(" </value>\r\n"); 726 sb.append("</parameter>\r\n"); 727 sb.append("\r\n"); 728 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 729 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 730 Assert.assertTrue(parameter instanceof FilterParameter); 731 //noinspection TypeMayBeWeakened 732 final FilterParameter<?, ?, ?> filterParameter = (FilterParameter<?, ?, ?>) parameter; 733 Assert.assertEquals("Name", parameter.getName()); 734 Assert.assertEquals("net.sf.gridarta.model.filter.NamedFilterConfig", parameter.getParameterType()); 735 Assert.assertEquals("Description", parameter.getDescription()); 736 final NamedFilterConfig value = filterParameter.getValue(); 737 Assert.assertNotNull(value); 738 Assert.assertTrue(value.isEnabled()); 739 Assert.assertTrue(value.isInverted()); 740 } 741 742 /** 743 * Checks that an {@link IntegerParameter} is correctly decoded. 744 * @throws IOException if the test fails 745 * @throws JDOMException if the test fails 746 * @throws NoSuchParameterException if the test fails 747 */ 748 @Test 749 public void testIntegerFromXml1() throws IOException, JDOMException, NoSuchParameterException { 750 final StringBuilder sb = new StringBuilder(); 751 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 752 sb.append("<parameter>\r\n"); 753 sb.append(" <name>Name</name>\r\n"); 754 sb.append(" <description>Description</description>\r\n"); 755 sb.append(" <type>java.lang.Integer</type>\r\n"); 756 sb.append(" <value />\r\n"); 757 sb.append(" <minimum>-2147483648</minimum>\r\n"); 758 sb.append(" <maximum>2147483647</maximum>\r\n"); 759 sb.append("</parameter>\r\n"); 760 sb.append("\r\n"); 761 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 762 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 763 Assert.assertTrue(parameter instanceof IntegerParameter); 764 final IntegerParameter<?, ?, ?> integerParameter = (IntegerParameter<?, ?, ?>) parameter; 765 Assert.assertEquals("Name", parameter.getName()); 766 Assert.assertEquals("java.lang.Integer", parameter.getParameterType()); 767 Assert.assertEquals("Description", parameter.getDescription()); 768 Assert.assertEquals(0, parameter.getValue()); 769 Assert.assertEquals(-2147483648, integerParameter.getMin()); 770 Assert.assertEquals(2147483647, integerParameter.getMax()); 771 } 772 773 /** 774 * Checks that an {@link IntegerParameter} is correctly decoded. 775 * @throws IOException if the test fails 776 * @throws JDOMException if the test fails 777 * @throws NoSuchParameterException if the test fails 778 */ 779 @Test 780 public void testIntegerFromXml2() throws IOException, JDOMException, NoSuchParameterException { 781 final StringBuilder sb = new StringBuilder(); 782 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 783 sb.append("<parameter>\r\n"); 784 sb.append(" <name>Name</name>\r\n"); 785 sb.append(" <description>Description</description>\r\n"); 786 sb.append(" <type>java.lang.Integer</type>\r\n"); 787 sb.append(" <value>2</value>\r\n"); 788 sb.append(" <minimum>-123</minimum>\r\n"); 789 sb.append(" <maximum>234</maximum>\r\n"); 790 sb.append("</parameter>\r\n"); 791 sb.append("\r\n"); 792 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 793 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 794 Assert.assertTrue(parameter instanceof IntegerParameter); 795 final IntegerParameter<?, ?, ?> integerParameter = (IntegerParameter<?, ?, ?>) parameter; 796 Assert.assertEquals("Name", parameter.getName()); 797 Assert.assertEquals("java.lang.Integer", parameter.getParameterType()); 798 Assert.assertEquals("Description", parameter.getDescription()); 799 Assert.assertEquals(2, parameter.getValue()); 800 Assert.assertEquals(-123, integerParameter.getMin()); 801 Assert.assertEquals(234, integerParameter.getMax()); 802 } 803 804 /** 805 * Checks that a {@link MapParameter} is correctly decoded. 806 * @throws IOException if the test fails 807 * @throws JDOMException if the test fails 808 * @throws NoSuchParameterException if the test fails 809 */ 810 @Test 811 public void testMapFromXml1() throws IOException, JDOMException, NoSuchParameterException { 812 final StringBuilder sb = new StringBuilder(); 813 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 814 sb.append("<parameter>\r\n"); 815 sb.append(" <name>Name</name>\r\n"); 816 sb.append(" <description>Description</description>\r\n"); 817 sb.append(" <type>net.sf.gridarta.model.mapcontrol.MapControl</type>\r\n"); 818 sb.append(" <value />\r\n"); 819 sb.append("</parameter>\r\n"); 820 sb.append("\r\n"); 821 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 822 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 823 Assert.assertTrue(parameter instanceof MapParameter); 824 //final MapParameter<?, ?, ?> mapParameter = (MapParameter<?, ?, ?>) parameter; 825 Assert.assertEquals("Name", parameter.getName()); 826 Assert.assertEquals("net.sf.gridarta.model.mapcontrol.MapControl", parameter.getParameterType()); 827 Assert.assertEquals("Description", parameter.getDescription()); 828 Assert.assertSame(mapControlCreator.getMapManager().getCurrentMap(), parameter.getValue()); 829 } 830 831 /** 832 * Checks that a {@link MapParameter} is correctly decoded. 833 * @throws IOException if the test fails 834 * @throws JDOMException if the test fails 835 * @throws NoSuchParameterException if the test fails 836 */ 837 @Ignore 838 @Test 839 public void testMapFromXml3() throws IOException, JDOMException, NoSuchParameterException { 840 final StringBuilder sb = new StringBuilder(); 841 sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); 842 sb.append("<parameter>\r\n"); 843 sb.append(" <name>Name</name>\r\n"); 844 sb.append(" <description>Description</description>\r\n"); 845 sb.append(" <type>net.sf.gridarta.model.mapcontrol.MapControl</type>\r\n"); 846 sb.append(" <value>/path/to/map</value>\r\n"); 847 sb.append("</parameter>\r\n"); 848 sb.append("\r\n"); 849 final TestMapControlCreator mapControlCreator = new TestMapControlCreator(); 850 final File mapDir = new File("/tmp"); 851 mapControlCreator.getMapManager().newMap(null, new TestMapArchObject(), new File(mapDir, "path/to/map"), false); 852 final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter = fromXML(mapControlCreator, sb.toString()); 853 Assert.assertTrue(parameter instanceof MapParameter); 854 //noinspection TypeMayBeWeakened 855 final MapParameter<?, ?, ?> mapParameter = (MapParameter<?, ?, ?>) parameter; 856 Assert.assertEquals("Name", parameter.getName()); 857 Assert.assertEquals("net.sf.gridarta.model.mapcontrol.MapControl", parameter.getParameterType()); 858 Assert.assertEquals("Description", parameter.getDescription()); 859 final MapControl<?, ?, ?> mapControl2 = mapParameter.getValue(); 860 Assert.assertNotNull(mapControl2); 861 final File mapFile = mapControl2.getMapModel().getMapFile(); 862 Assert.assertNotNull(mapFile); 863 Assert.assertTrue(mapFile.getPath().endsWith("/path/to/map")); 864 } 865 866 /** 867 * Encodes a {@link PluginParameter} to its string representation. 868 * @param parameter the plugin parameter 869 * @return the string representation 870 * @throws IOException if encoding fails 871 */ 872 @NotNull 873 private static String toXML(@NotNull final PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> parameter) throws IOException { 874 final PluginParameterCodec<TestGameObject, TestMapArchObject, TestArchetype> codec = new PluginParameterCodec<TestGameObject, TestMapArchObject, TestArchetype>(); 875 final Element element = codec.toXML(parameter); 876 final Document d = new Document(element); 877 final XMLOutputter out = new XMLOutputter(); 878 out.setFormat(Format.getPrettyFormat()); 879 final Writer writer = new StringWriter(); 880 out.output(d, writer); 881 //noinspection ObjectToString 882 return writer.toString(); 883 } 884 885 /** 886 * Decodes a {@link PluginParameter} from its string representation. 887 * @param mapControlCreator the map control creator to use 888 * @param string the string representation 889 * @return the plugin parameter 890 * @throws IOException if decoding fails 891 * @throws JDOMException if decoding fails 892 * @throws NoSuchParameterException if decoding fails 893 */ 894 @NotNull 895 private static PluginParameter<TestGameObject, TestMapArchObject, TestArchetype, ?> fromXML(@NotNull final TestMapControlCreator mapControlCreator, @NotNull final String string) throws IOException, JDOMException, NoSuchParameterException { 896 final SAXBuilder builder = new SAXBuilder(false); 897 final Document document = builder.build(new StringReader(string)); 898 final Iterable<NamedGameObjectMatcher> matchers = Collections.emptyList(); 899 final NamedFilter filterList = new NamedFilter(matchers); 900 final PluginParameterFactory<TestGameObject, TestMapArchObject, TestArchetype> parameterFactory = new PluginParameterFactory<TestGameObject, TestMapArchObject, TestArchetype>(mapControlCreator.getArchetypeSet(), mapControlCreator.getMapManager(), filterList, mapControlCreator.getProjectSettings()); 901 final Element element = document.getRootElement(); 902 return parameterFactory.createParameter(element); 903 } 904 905}