package games.strategy.engine.data; import static org.junit.Assert.assertTrue; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.junit.Before; import org.junit.Test; import games.strategy.engine.framework.GameObjectStreamFactory; import games.strategy.triplea.Constants; import games.strategy.triplea.xml.TestMapGameData; public class SerializationTest { private GameData gameDataSource; private GameData gameDataSink; @Before public void setUp() throws Exception { gameDataSource = TestMapGameData.TEST.getGameData(); gameDataSink = TestMapGameData.TEST.getGameData(); } private Object serialize(final Object anObject) throws Exception { final ByteArrayOutputStream sink = new ByteArrayOutputStream(); final ObjectOutputStream output = new GameObjectOutputStream(sink); output.writeObject(anObject); output.flush(); final InputStream source = new ByteArrayInputStream(sink.toByteArray()); final ObjectInputStream input = new GameObjectInputStream(new GameObjectStreamFactory(gameDataSource), source); final Object obj = input.readObject(); input.close(); output.close(); return obj; } @Test public void testWritePlayerID() throws Exception { final PlayerID id = gameDataSource.getPlayerList().getPlayerID("chretian"); final PlayerID readID = (PlayerID) serialize(id); final PlayerID localID = gameDataSink.getPlayerList().getPlayerID("chretian"); assertTrue(localID != readID); } @Test public void testWriteUnitType() throws Exception { final Object orig = gameDataSource.getUnitTypeList().getUnitType(Constants.UNIT_TYPE_INF); final Object read = serialize(orig); final Object local = gameDataSink.getUnitTypeList().getUnitType(Constants.UNIT_TYPE_INF); assertTrue(local != read); } @Test public void testWriteTerritory() throws Exception { final Object orig = gameDataSource.getMap().getTerritory("canada"); final Object read = serialize(orig); final Object local = gameDataSink.getMap().getTerritory("canada"); assertTrue(local != read); } @Test public void testWriteProductionRulte() throws Exception { final Object orig = gameDataSource.getProductionRuleList().getProductionRule("infForSilver"); final Object read = serialize(orig); final Object local = gameDataSink.getProductionRuleList().getProductionRule("infForSilver"); assertTrue(local != read); } }