package games.strategy.engine.data; import static org.junit.Assert.assertEquals; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Collection; import org.junit.Before; import org.junit.Test; import games.strategy.engine.data.changefactory.ChangeFactory; import games.strategy.triplea.delegate.GameDataTestUtil; import games.strategy.triplea.xml.TestMapGameData; public class ChangeTripleATest { private GameData gameData; private Territory can; @Before public void setUp() throws Exception { gameData = TestMapGameData.BIG_WORLD_1942.getGameData(); can = gameData.getMap().getTerritory("Western Canada"); assertEquals(can.getUnits().getUnitCount(), 2); } private Change serialize(final Change change) throws Exception { final ByteArrayOutputStream sink = new ByteArrayOutputStream(); final ObjectOutputStream output = new GameObjectOutputStream(sink); output.writeObject(change); output.flush(); // System.out.println("bytes:" + sink.toByteArray().length); final InputStream source = new ByteArrayInputStream(sink.toByteArray()); final ObjectInputStream input = new GameObjectInputStream(new games.strategy.engine.framework.GameObjectStreamFactory(gameData), source); final Change newChange = (Change) input.readObject(); input.close(); output.close(); return newChange; } @Test public void testUnitsAddTerritory() { // add some units final Change change = ChangeFactory.addUnits(can, GameDataTestUtil.infantry(gameData).create(10, null)); gameData.performChange(change); assertEquals(can.getUnits().getUnitCount(), 12); // invert the change gameData.performChange(change.invert()); assertEquals(can.getUnits().getUnitCount(), 2); } @Test public void testUnitsRemoveTerritory() { // remove some units final Collection<Unit> units = can.getUnits().getUnits(GameDataTestUtil.infantry(gameData), 1); final Change change = ChangeFactory.removeUnits(can, units); gameData.performChange(change); assertEquals(can.getUnits().getUnitCount(), 1); // invert the change gameData.performChange(change.invert()); assertEquals(can.getUnits().getUnitCount(), 2); } @Test public void testSerializeUnitsRemoteTerritory() throws Exception { // remove some units final Collection<Unit> units = can.getUnits().getUnits(GameDataTestUtil.infantry(gameData), 1); Change change = ChangeFactory.removeUnits(can, units); change = serialize(change); gameData.performChange(change); assertEquals(can.getUnits().getUnitCount(), 1); // invert the change gameData.performChange(change.invert()); assertEquals(can.getUnits().getUnitCount(), 2); } }