001/* 002 * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games. 003 * Copyright (C) 2000-2010 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.model.gameobject; 021 022import java.awt.Point; 023import javax.swing.ImageIcon; 024import net.sf.gridarta.model.archetype.DuplicateArchetypeException; 025import net.sf.gridarta.model.archetype.TestArchetype; 026import net.sf.gridarta.model.archetypeset.ArchetypeSet; 027import net.sf.gridarta.model.baseobject.BaseObject; 028import net.sf.gridarta.model.face.FaceProvider; 029import net.sf.gridarta.model.maparchobject.TestMapArchObject; 030import net.sf.gridarta.model.mapmodel.CannotInsertGameObjectException; 031import net.sf.gridarta.model.mapmodel.MapModel; 032import net.sf.gridarta.model.mapmodel.TestMapModelCreator; 033import net.sf.gridarta.model.mapmodel.TestMapModelHelper; 034import org.jetbrains.annotations.NotNull; 035import org.junit.Assert; 036import org.junit.Test; 037 038/** 039 * Regression tests for {@link GameObjectFactory}. 040 * @author Andreas Kirschbaum 041 */ 042public class GameObjectFactoryTest { 043 044 /** 045 * Checks that {@link net.sf.gridarta.model.gameobject.GameObjectFactory#cloneGameObject(GameObject)} 046 * correctly updates the container. 047 * @throws CannotInsertGameObjectException if the test fails 048 * @throws DuplicateArchetypeException if the test fails 049 */ 050 @Test 051 public void testDoMoveSquareTopSingle() throws CannotInsertGameObjectException, DuplicateArchetypeException { 052 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 053 final TestMapModelHelper mapModelHelper = mapModelCreator.newTestMapModelHelper(); 054 final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(1, 1); 055 056 final Point point = new Point(0, 0); 057 mapModel.beginTransaction("TEST"); 058 final TestGameObject ob1 = mapModelHelper.insertFloor(mapModel, point); 059 final TestGameObject ob2 = mapModelHelper.insertExit(ob1); 060 061 final TestGameObject ob1Clone = mapModelCreator.getGameObjectFactory().cloneGameObject(ob1); 062 063 Assert.assertNotSame(ob1, ob1Clone); 064 Assert.assertEquals(1, ob1Clone.countInvObjects()); 065 final TestGameObject ob2Clone = ob1Clone.getFirst(); 066 Assert.assertNotNull(ob2Clone); 067 Assert.assertNotSame(ob2, ob2Clone); 068 069 Assert.assertSame(ob1, ob2.getContainer()); 070 Assert.assertSame(ob1Clone, ob2Clone.getContainer()); 071 } 072 073 /** 074 * Checks that face information is updated for inventory objects cloned from 075 * an archetype. 076 * @throws CannotInsertGameObjectException if the test fails 077 * @throws DuplicateArchetypeException if the test fails 078 */ 079 @Test 080 public void testUpdateFaceInformation() throws CannotInsertGameObjectException, DuplicateArchetypeException { 081 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 082 final TestMapModelHelper mapModelHelper = mapModelCreator.newTestMapModelHelper(); 083 final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(1, 1); 084 085 final GameObjectFactory<TestGameObject, TestMapArchObject, TestArchetype> gameObjectFactory = mapModelCreator.getGameObjectFactory(); 086 final ArchetypeSet<TestGameObject, TestMapArchObject, TestArchetype> archetypeSet = mapModelCreator.getArchetypeSet(); 087 088 final TestArchetype invArchetype = gameObjectFactory.newArchetype("inv"); 089 invArchetype.setAttributeString(BaseObject.FACE, "face"); 090 archetypeSet.addArchetype(invArchetype); 091 092 final TestArchetype envArchetype = gameObjectFactory.newArchetype("env"); 093 envArchetype.setAttributeString(BaseObject.FACE, "face"); 094 envArchetype.addLast(gameObjectFactory.createGameObject(invArchetype)); 095 archetypeSet.addArchetype(envArchetype); 096 097 final FaceProvider faceProvider = new FaceProvider() { 098 099 @Override 100 public ImageIcon getImageIconForFacename(@NotNull final String faceName) { 101 if (faceName.equals("face")) { 102 return new ImageIcon(); 103 } 104 return null; 105 } 106 107 @Override 108 public void reload() { 109 // do nothing 110 } 111 112 }; 113 mapModelCreator.getFaceObjectProviders().setNormal(faceProvider); 114 115 final Point point = new Point(0, 0); 116 mapModel.beginTransaction("TEST"); 117 final TestGameObject env = mapModelHelper.insertArchetype(mapModel, point, envArchetype, false); 118 119 Assert.assertNotNull(env); 120 Assert.assertEquals(FaceSource.ARCHETYPE_FACE, env.getFaceObjSource()); 121 122 final TestGameObject inv = env.getFirst(); 123 Assert.assertNotNull(inv); 124 Assert.assertEquals(FaceSource.ARCHETYPE_FACE, inv.getFaceObjSource()); 125 } 126 127}