mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-02-20 23:23:35 +00:00
170 lines
6.4 KiB
Scala
170 lines
6.4 KiB
Scala
// Copyright (c) 2017 PSForever
|
|
package objects.terminal
|
|
|
|
import akka.actor.Props
|
|
import net.psforever.objects.serverobject.CommonMessages
|
|
import net.psforever.objects.serverobject.terminals.Terminal.TerminalMessage
|
|
import net.psforever.objects.serverobject.terminals.{ProximityTerminal, ProximityTerminalControl, ProximityUnit, Terminal}
|
|
import net.psforever.objects.{Avatar, GlobalDefinitions, Player}
|
|
import net.psforever.packet.game.PlanetSideGUID
|
|
import net.psforever.types.{CharacterGender, PlanetSideEmpire}
|
|
import objects.ActorTest
|
|
import org.specs2.mutable.Specification
|
|
|
|
import scala.concurrent.duration._
|
|
|
|
class ProximityTest extends Specification {
|
|
"ProximityUnit" should {
|
|
"construct (with a Terminal object)" in {
|
|
val obj = new ProximityTest.SampleTerminal()
|
|
obj.NumberUsers mustEqual 0
|
|
}
|
|
|
|
"keep track of users (add)" in {
|
|
val obj = new ProximityTest.SampleTerminal()
|
|
obj.NumberUsers mustEqual 0
|
|
obj.AddUser(PlanetSideGUID(10)) mustEqual obj.NumberUsers
|
|
obj.NumberUsers mustEqual 1
|
|
obj.AddUser(PlanetSideGUID(20)) mustEqual obj.NumberUsers
|
|
obj.NumberUsers mustEqual 2
|
|
}
|
|
|
|
"keep track of users (remove)" in {
|
|
val obj = new ProximityTest.SampleTerminal()
|
|
obj.AddUser(PlanetSideGUID(10))
|
|
obj.AddUser(PlanetSideGUID(20))
|
|
obj.NumberUsers mustEqual 2
|
|
obj.RemoveUser(PlanetSideGUID(10)) mustEqual obj.NumberUsers
|
|
obj.NumberUsers mustEqual 1
|
|
obj.RemoveUser(PlanetSideGUID(20)) mustEqual obj.NumberUsers
|
|
obj.NumberUsers mustEqual 0
|
|
}
|
|
|
|
"can not add a user twice" in {
|
|
val obj = new ProximityTest.SampleTerminal()
|
|
obj.AddUser(PlanetSideGUID(10))
|
|
obj.NumberUsers mustEqual 1
|
|
obj.AddUser(PlanetSideGUID(10))
|
|
obj.NumberUsers mustEqual 1
|
|
}
|
|
|
|
"can not remove a user that was not added" in {
|
|
val obj = new ProximityTest.SampleTerminal()
|
|
obj.AddUser(PlanetSideGUID(10))
|
|
obj.NumberUsers mustEqual 1
|
|
obj.RemoveUser(PlanetSideGUID(20))
|
|
obj.NumberUsers mustEqual 1
|
|
}
|
|
}
|
|
|
|
"ProximityTerminal" should {
|
|
"construct" in {
|
|
ProximityTerminal(GlobalDefinitions.medical_terminal)
|
|
ok
|
|
}
|
|
}
|
|
}
|
|
|
|
class ProximityTerminalControl1bTest extends ActorTest {
|
|
"ProximityTerminalControl" should {
|
|
"send out a start message" in {
|
|
val obj = ProximityTerminal(GlobalDefinitions.medical_terminal)
|
|
obj.Actor = system.actorOf(Props(classOf[ProximityTerminalControl], obj), "prox-ctrl")
|
|
val player = Player(Avatar("TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, 0))
|
|
player.GUID = PlanetSideGUID(10)
|
|
|
|
assert(obj.NumberUsers == 0)
|
|
obj.Actor ! CommonMessages.Use(player)
|
|
val msg = receiveOne(200 milliseconds)
|
|
assert(obj.NumberUsers == 1)
|
|
assert(msg.isInstanceOf[TerminalMessage])
|
|
val msgout = msg.asInstanceOf[TerminalMessage]
|
|
assert(msgout.player == player)
|
|
assert(msgout.msg == null)
|
|
assert(msgout.response.isInstanceOf[Terminal.StartProximityEffect])
|
|
}
|
|
}
|
|
}
|
|
|
|
class ProximityTerminalControl2bTest extends ActorTest {
|
|
"ProximityTerminalControl" should {
|
|
"will not send out one start message unless first user" in {
|
|
val obj = ProximityTerminal(GlobalDefinitions.medical_terminal)
|
|
obj.Actor = system.actorOf(Props(classOf[ProximityTerminalControl], obj), "prox-ctrl")
|
|
val player1 = Player(Avatar("TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, 0))
|
|
player1.GUID = PlanetSideGUID(10)
|
|
val player2 = Player(Avatar("TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, 0))
|
|
player2.GUID = PlanetSideGUID(11)
|
|
assert(obj.NumberUsers == 0)
|
|
|
|
obj.Actor ! CommonMessages.Use(player1)
|
|
val msg = receiveOne(200 milliseconds)
|
|
assert(obj.NumberUsers == 1)
|
|
assert(msg.isInstanceOf[TerminalMessage])
|
|
assert(msg.asInstanceOf[TerminalMessage].response.isInstanceOf[Terminal.StartProximityEffect])
|
|
obj.Actor ! CommonMessages.Use(player2)
|
|
expectNoMsg(500 milliseconds)
|
|
assert(obj.NumberUsers == 2)
|
|
}
|
|
}
|
|
}
|
|
|
|
class ProximityTerminalControl3bTest extends ActorTest {
|
|
"ProximityTerminalControl" should {
|
|
"send out a stop message" in {
|
|
val obj = ProximityTerminal(GlobalDefinitions.medical_terminal)
|
|
obj.Actor = system.actorOf(Props(classOf[ProximityTerminalControl], obj), "prox-ctrl")
|
|
val player = Player(Avatar("TestCharacter", PlanetSideEmpire.TR, CharacterGender.Male, 0, 0))
|
|
player.GUID = PlanetSideGUID(10)
|
|
|
|
assert(obj.NumberUsers == 0)
|
|
obj.Actor ! CommonMessages.Use(player)
|
|
receiveOne(200 milliseconds)
|
|
assert(obj.NumberUsers == 1)
|
|
obj.Actor ! CommonMessages.Unuse(player)
|
|
val msg = receiveOne(200 milliseconds)
|
|
assert(obj.NumberUsers == 0)
|
|
assert(msg.isInstanceOf[TerminalMessage])
|
|
val msgout = msg.asInstanceOf[TerminalMessage]
|
|
assert(msgout.player == player)
|
|
assert(msgout.msg == null)
|
|
assert(msgout.response.isInstanceOf[Terminal.StopProximityEffect])
|
|
}
|
|
}
|
|
}
|
|
|
|
class ProximityTerminalControl4bTest extends ActorTest {
|
|
"ProximityTerminalControl" should {
|
|
"will not send out one stop message until last user" in {
|
|
val obj = ProximityTerminal(GlobalDefinitions.medical_terminal)
|
|
obj.Actor = system.actorOf(Props(classOf[ProximityTerminalControl], obj), "prox-ctrl")
|
|
val player1 = Player(Avatar("TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, 0))
|
|
player1.GUID = PlanetSideGUID(10)
|
|
val player2 = Player(Avatar("TestCharacter2", PlanetSideEmpire.TR, CharacterGender.Male, 0, 0))
|
|
player2.GUID = PlanetSideGUID(11)
|
|
assert(obj.NumberUsers == 0)
|
|
|
|
obj.Actor ! CommonMessages.Use(player1)
|
|
receiveOne(200 milliseconds) //StartProximityEffect
|
|
assert(obj.NumberUsers == 1)
|
|
obj.Actor ! CommonMessages.Use(player2)
|
|
expectNoMsg(500 milliseconds)
|
|
assert(obj.NumberUsers == 2)
|
|
obj.Actor ! CommonMessages.Unuse(player1)
|
|
expectNoMsg(500 milliseconds)
|
|
assert(obj.NumberUsers == 1)
|
|
obj.Actor ! CommonMessages.Unuse(player2)
|
|
val msg = receiveOne(200 milliseconds)
|
|
assert(obj.NumberUsers == 0)
|
|
assert(msg.isInstanceOf[TerminalMessage])
|
|
val msgout = msg.asInstanceOf[TerminalMessage]
|
|
assert(msgout.player == player2)
|
|
assert(msgout.msg == null)
|
|
assert(msgout.response.isInstanceOf[Terminal.StopProximityEffect])
|
|
}
|
|
}
|
|
}
|
|
|
|
object ProximityTest {
|
|
class SampleTerminal extends Terminal(GlobalDefinitions.dropship_vehicle_terminal) with ProximityUnit
|
|
}
|