mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-02-25 01:23:41 +00:00
121 lines
5.3 KiB
Scala
121 lines
5.3 KiB
Scala
// Copyright (c) 2017 PSForever
|
|
package objects.terminal
|
|
|
|
import akka.actor.{ActorSystem, Props}
|
|
import net.psforever.objects.serverobject.CommonMessages
|
|
import net.psforever.objects.{Avatar, GlobalDefinitions, Player}
|
|
import net.psforever.objects.serverobject.terminals._
|
|
import net.psforever.packet.game.PlanetSideGUID
|
|
import net.psforever.types.{CharacterGender, PlanetSideEmpire}
|
|
import objects.ActorTest
|
|
|
|
import scala.concurrent.duration.Duration
|
|
|
|
class ProximityTerminalControl1Test extends ActorTest() {
|
|
"ProximityTerminalControl" should {
|
|
"construct (medical terminal)" in {
|
|
val terminal = ProximityTerminal(GlobalDefinitions.medical_terminal)
|
|
terminal.Actor = system.actorOf(Props(classOf[ProximityTerminalControl], terminal), "test-term")
|
|
}
|
|
}
|
|
}
|
|
|
|
class ProximityTerminalControl2Test extends ActorTest() {
|
|
"ProximityTerminalControl can not process wrong messages" in {
|
|
val (_, terminal) = TerminalControlTest.SetUpAgents(GlobalDefinitions.medical_terminal, PlanetSideEmpire.TR)
|
|
|
|
terminal.Actor !"hello"
|
|
val reply = receiveOne(Duration.create(500, "ms"))
|
|
assert(reply.isInstanceOf[Terminal.NoDeal])
|
|
}
|
|
}
|
|
|
|
//terminal control is mostly a pass-through actor for Terminal.Exchange messages, wrapped in Terminal.TerminalMessage protocol
|
|
class MedicalTerminalControl1Test extends ActorTest() {
|
|
"ProximityTerminalControl sends a message to the first new user only" in {
|
|
val (player, terminal) = ProximityTerminalControlTest.SetUpAgents(GlobalDefinitions.medical_terminal, PlanetSideEmpire.TR)
|
|
player.GUID = PlanetSideGUID(10)
|
|
val player2 = Player(Avatar("someothertest", PlanetSideEmpire.TR, CharacterGender.Male, 0, 0))
|
|
player2.GUID = PlanetSideGUID(11)
|
|
|
|
terminal.Actor ! CommonMessages.Use(player)
|
|
val reply = receiveOne(Duration.create(500, "ms"))
|
|
assert(reply.isInstanceOf[Terminal.TerminalMessage])
|
|
val reply2 = reply.asInstanceOf[Terminal.TerminalMessage]
|
|
assert(reply2.player == player)
|
|
assert(reply2.msg == null)
|
|
assert(reply2.response.isInstanceOf[Terminal.StartProximityEffect])
|
|
assert(reply2.response.asInstanceOf[Terminal.StartProximityEffect].terminal == terminal)
|
|
assert(terminal.NumberUsers == 1)
|
|
|
|
terminal.Actor ! CommonMessages.Use(player2)
|
|
expectNoMsg(Duration.create(500, "ms"))
|
|
assert(terminal.NumberUsers == 2)
|
|
}
|
|
}
|
|
|
|
class MedicalTerminalControl2Test extends ActorTest() {
|
|
"ProximityTerminalControl sends a message to the last user only" in {
|
|
val (player, terminal) : (Player, ProximityTerminal) = ProximityTerminalControlTest.SetUpAgents(GlobalDefinitions.medical_terminal, PlanetSideEmpire.TR)
|
|
player.GUID = PlanetSideGUID(10)
|
|
val player2 = Player(Avatar("someothertest", PlanetSideEmpire.TR, CharacterGender.Male, 0, 0))
|
|
player2.GUID = PlanetSideGUID(11)
|
|
|
|
terminal.Actor ! CommonMessages.Use(player)
|
|
receiveOne(Duration.create(500, "ms"))
|
|
terminal.Actor ! CommonMessages.Use(player2)
|
|
expectNoMsg(Duration.create(500, "ms"))
|
|
assert(terminal.NumberUsers == 2)
|
|
|
|
terminal.Actor ! CommonMessages.Unuse(player)
|
|
expectNoMsg(Duration.create(500, "ms"))
|
|
assert(terminal.NumberUsers == 1)
|
|
|
|
terminal.Actor ! CommonMessages.Unuse(player2)
|
|
val reply = receiveOne(Duration.create(500, "ms"))
|
|
assert(reply.isInstanceOf[Terminal.TerminalMessage])
|
|
val reply2 = reply.asInstanceOf[Terminal.TerminalMessage]
|
|
assert(reply2.player == player2)
|
|
assert(reply2.msg == null)
|
|
assert(reply2.response.isInstanceOf[Terminal.StopProximityEffect])
|
|
assert(reply2.response.asInstanceOf[Terminal.StopProximityEffect].terminal == terminal)
|
|
assert(terminal.NumberUsers == 0)
|
|
}
|
|
}
|
|
|
|
class MedicalTerminalControl3Test extends ActorTest() {
|
|
"ProximityTerminalControl sends a message to the last user only (confirmation of test #2)" in {
|
|
val (player, terminal) : (Player, ProximityTerminal) = ProximityTerminalControlTest.SetUpAgents(GlobalDefinitions.medical_terminal, PlanetSideEmpire.TR)
|
|
player.GUID = PlanetSideGUID(10)
|
|
val player2 = Player(Avatar("someothertest", PlanetSideEmpire.TR, CharacterGender.Male, 0, 0))
|
|
player2.GUID = PlanetSideGUID(11)
|
|
|
|
terminal.Actor ! CommonMessages.Use(player)
|
|
receiveOne(Duration.create(500, "ms"))
|
|
terminal.Actor ! CommonMessages.Use(player2)
|
|
expectNoMsg(Duration.create(500, "ms"))
|
|
assert(terminal.NumberUsers == 2)
|
|
|
|
terminal.Actor ! CommonMessages.Unuse(player2)
|
|
expectNoMsg(Duration.create(500, "ms"))
|
|
assert(terminal.NumberUsers == 1)
|
|
|
|
terminal.Actor ! CommonMessages.Unuse(player)
|
|
val reply = receiveOne(Duration.create(500, "ms"))
|
|
assert(reply.isInstanceOf[Terminal.TerminalMessage])
|
|
val reply2 = reply.asInstanceOf[Terminal.TerminalMessage]
|
|
assert(reply2.player == player) //important!
|
|
assert(reply2.msg == null)
|
|
assert(reply2.response.isInstanceOf[Terminal.StopProximityEffect])
|
|
assert(reply2.response.asInstanceOf[Terminal.StopProximityEffect].terminal == terminal)
|
|
assert(terminal.NumberUsers == 0)
|
|
}
|
|
}
|
|
|
|
object ProximityTerminalControlTest {
|
|
def SetUpAgents(tdef : MedicalTerminalDefinition, faction : PlanetSideEmpire.Value)(implicit system : ActorSystem) : (Player, ProximityTerminal) = {
|
|
val terminal = ProximityTerminal(tdef)
|
|
terminal.Actor = system.actorOf(Props(classOf[ProximityTerminalControl], terminal), "test-term")
|
|
(Player(Avatar("test", faction, CharacterGender.Male, 0, 0)), terminal)
|
|
}
|
|
}
|