Last active
August 29, 2015 14:19
Revisions
-
demoth renamed this gist
Apr 15, 2015 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
demoth created this gist
Apr 15, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,206 @@ package org.demoth.aurora.server import com.jme3.network.* import org.demoth.aurora.common.* import org.demoth.aurora.common.messages.TextMessage import org.demoth.aurora.common.messages.client.* import org.demoth.aurora.common.messages.server.GameUpdateMessage import org.demoth.aurora.server.abilities.Ability import org.demoth.aurora.server.items.* import org.junit.* import groovy.util.logging.Log /** * Created by demoth on 10.04.15. */ @Log class LogicalStateTest { static final int SOME_ID = 4 static final String SOME_NAME = 'cadaver' static final String SOME_TEXT = 'Lol1234' static final String SOME_PASS = 'asdf_RAZ' static ConfigurationService cfg static MapService map static Server network static LoginService login static List<Message> output static HostedConnection testConnection static boolean closedConnection Player testPlayer LogicalState state @BeforeClass static void setupServices() { cfg = ConfigurationService.instance cfg.mapName = 'test' cfg.startLocation = new Point(1, 0) map = MapServiceImpl.instance login = [authorized: { String name, String pass -> name == SOME_NAME }] as LoginService network = [broadcast: { output.add it as Message }] as Server testConnection = [getId: { SOME_ID }, close: { closedConnection = true }] as HostedConnection } @Before void setup() { output = [] closedConnection = false testPlayer = new Player(testConnection) testPlayer.name = SOME_NAME testPlayer.speed = 3 testPlayer.energy = 9 state = new LogicalState(map, login, network, cfg) state.players.put SOME_ID, testPlayer } @Test void sendTextMessage() { state.messages.add new TextMessage(text: SOME_TEXT, id: SOME_ID) state.update 0 assert state.messages.isEmpty() assert output == [new TextMessage(text: SOME_NAME + ': ' + SOME_TEXT)] } @Test void login() { state.messages.add new LoginMessage(id: SOME_ID, username: SOME_NAME, password: SOME_PASS) assert state.actors.isEmpty() state.update 0 assert state.messages.isEmpty() assert state.actors == [testPlayer] assert output == [new TextMessage(id: SOME_ID, text: SOME_NAME + ' joined')] } @Test void loginFailAuth() { state.messages.add new LoginMessage(id: SOME_ID, username: 'FAILED1', password: SOME_PASS) state.update 0 assert state.messages.isEmpty() assert state.players.isEmpty() assert closedConnection } @Test void requestQuit() { state.messages.add new ActionRequestMessage(id: SOME_ID, type: ActionType.QUIT) state.actors.add testPlayer state.update 0 assert state.messages.isEmpty() assert state.players.isEmpty() assert state.actors.isEmpty() assert output == [new GameUpdateMessage(responses: [new Response(id: SOME_ID, origin: null, target: null, type: ResponseType.quit)])] } @Test void requestWait() { state.messages.add new ActionRequestMessage(id: SOME_ID, type: ActionType.WAIT) state.actors.add testPlayer state.update 0 assert state.messages.isEmpty() } @Test void requestWalkPositive() { def target = new Point(0, 0) def oldTarget = testPlayer.pos state.messages.add new ActionRequestMessage(id: SOME_ID, target: target, type: ActionType.WALK) state.actors.add testPlayer state.activeActors.add testPlayer testPlayer.energy = 9 state.update 0 assert state.messages.isEmpty() assert testPlayer.pos == target assert testPlayer.energy == 0 assert output == [new GameUpdateMessage(responses: [new Response(id: SOME_ID, origin: oldTarget, target: target, type: ResponseType.walk)])] } @Test void requestWalkWrongTarget() { def target = new Point(77, 0) def oldTarget = testPlayer.pos state.messages.add new ActionRequestMessage(id: SOME_ID, target: target, type: ActionType.WALK) state.actors.add testPlayer state.activeActors.add testPlayer testPlayer.energy = 9 state.update 0 assert state.messages.isEmpty() assert testPlayer.pos == oldTarget assert testPlayer.energy == 9 assert output.isEmpty() } @Test void requestWalkNonWalkable() { def target = new Point(1, 1) def oldTarget = testPlayer.pos state.messages.add new ActionRequestMessage(id: SOME_ID, target: target, type: ActionType.WALK) state.actors.add testPlayer state.activeActors.add testPlayer testPlayer.energy = 9 state.update 0 assert state.messages.isEmpty() assert testPlayer.pos == oldTarget assert testPlayer.energy == 9 assert output.isEmpty() } @Test void testAliveEffect() { state.actors.add testPlayer testPlayer.energy = 0 testPlayer.speed = 3 TestEffects.instance.aliveEffect.apply testPlayer state.update 0 assert testPlayer.energy == 3 } @Test void testTimedEffect() { state.actors.add testPlayer testPlayer.energy = 0 testPlayer.speed = 3 TestEffects.instance.aliveEffect.apply testPlayer TestEffects.instance.speedBoost.apply testPlayer assert testPlayer.speed == 4 state.update 0 assert testPlayer.energy == 4 assert testPlayer.speed == 3 } @Test void walkIntoOtherActor() { Point target = new Point(0, 0) Point oldPosition = testPlayer.pos Actor otherActor = new Actor(pos: target) otherActor.speed = 2 state.actors.add otherActor state.actors.add testPlayer testPlayer.energy = 4 testPlayer.defaultAbility = new Ability(cost: 4, effects: [TestEffects.instance.speedBoost]) state.messages.add new ActionRequestMessage(id: SOME_ID, target: target, type: ActionType.WALK) state.update 0 assert testPlayer.pos == oldPosition assert otherActor.speed == 3 } @Test void pickup() { state.actors.add testPlayer Item stuff = new Item(id: SOME_ID + 1, pos: testPlayer.pos, type: ItemType.OTHER, effects: []) state.items.put SOME_ID + 1, stuff state.messages.add new ActionRequestMessage(id: SOME_ID, target: testPlayer.pos, targetId: SOME_ID + 1, type: ActionType.PICKUP) testPlayer.energy = 3 state.update 0 assert testPlayer.inventory == [stuff] assert state.items.isEmpty() assert testPlayer.energy == 0 assert state.messages.isEmpty() } }