mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-03-14 09:30:34 +00:00
Deployable Behaviors (#840)
* unifying the split code pathways that separated telepads from other deloyables; in other words, no more SimpleDeployables and ComplexDeployables, just Deployables * moved some aspects of the build logic into a deployable control mixin; aspects governing the deplpoyable toolbox have been transferred into the player control agency * moving aspects of teleportation system establishment and decomposition into specialized Telepad control agencies * retiring deployable disposal code path that required a dedicated remover; each deployable now handles its own removal, and some do special things when being removed; process still has some rough edges and tests are probably thoroughly broken * additional modifications to support boomers and telepads; consolidation of code for deployable acknowledgement by owner and during failure conditions; tests for behavior * retooled a significant portion of the build sequence and deconstruct sequence to: eliminate duplicate messages, give the player more input to and control over the process, remove undue responsibility thrust on SessionActor * messaging issue where player did not re-raise hand after exchanging a used construction tool for a new construction tool * modification to deconstruct path to make certain deplayble is unregistered last; ridding requirement of AlertDestroyDeployable; fixing test * create paths for unowned deployable building and (standard) owned deployable building; corrected activation and connection between telepad deployable and internal roouter telepad; wrote tests for connection between telepad deployable and internal telepad * modifiying the conditions of a deployable construction item being moved into a visible player slot such that the construction item's initial output is valid given the player's current certifications * by forcing the fire mode to revert briefly before the ammo type updates, the construction item can be made to remain consistent between fire mode shifts * construction tools now keep track of fire mode ammo types for a period of time, allowing one mode's last setting to be retained * greatly delayed rebase with master * minor changes; test correction (?) * router is go?
This commit is contained in:
parent
7b4f955cbf
commit
2f9c4a7cf2
56 changed files with 2825 additions and 2124 deletions
353
src/test/scala/objects/DeployableBehaviorTest.scala
Normal file
353
src/test/scala/objects/DeployableBehaviorTest.scala
Normal file
|
|
@ -0,0 +1,353 @@
|
|||
// Copyright (c) 2021 PSForever
|
||||
package objects
|
||||
|
||||
import akka.actor.{ActorRef, Props}
|
||||
import akka.testkit.TestProbe
|
||||
import base.{ActorTest, FreedContextActorTest}
|
||||
import net.psforever.objects.avatar.{Avatar, Certification, PlayerControl}
|
||||
import net.psforever.objects.{ConstructionItem, Deployables, GlobalDefinitions, Player}
|
||||
import net.psforever.objects.ce.{Deployable, DeployedItem}
|
||||
import net.psforever.objects.guid.{NumberPoolHub, TaskResolver}
|
||||
import net.psforever.objects.guid.source.MaxNumberSource
|
||||
import net.psforever.objects.zones.{Zone, ZoneDeployableActor, ZoneMap}
|
||||
import net.psforever.packet.game._
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
||||
import net.psforever.types._
|
||||
|
||||
import scala.collection.mutable.ListBuffer
|
||||
import scala.concurrent.duration._
|
||||
|
||||
class DeployableBehaviorSetupTest extends ActorTest {
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val jmine = Deployables.Make(DeployedItem.jammer_mine)() //guid=1
|
||||
val deployableList = new ListBuffer()
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(max = 5))
|
||||
val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools(): Unit = {}
|
||||
GUID(guid)
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
}
|
||||
guid.register(jmine, number = 1)
|
||||
jmine.Faction = PlanetSideEmpire.TR
|
||||
jmine.Position = Vector3(1,2,3)
|
||||
jmine.Orientation = Vector3(4,5,6)
|
||||
|
||||
"DeployableBehavior" should {
|
||||
"perform self-setup" in {
|
||||
assert(deployableList.isEmpty, "self-setup test - deployable list is not empty")
|
||||
zone.Deployables ! Zone.Deployable.Build(jmine)
|
||||
|
||||
val eventsMsgs = eventsProbe.receiveN(3, 10.seconds)
|
||||
eventsMsgs.head match {
|
||||
case LocalServiceMessage(
|
||||
"test",
|
||||
LocalAction.TriggerEffectLocation(PlanetSideGUID(0), "spawn_object_effect", Vector3(1,2,3), Vector3(4,5,6))
|
||||
) => ;
|
||||
case _ => assert(false, "self-setup test - no spawn fx")
|
||||
}
|
||||
eventsMsgs(1) match {
|
||||
case AvatarServiceMessage("test", AvatarAction.DeployItem(PlanetSideGUID(0), obj)) =>
|
||||
assert(obj eq jmine, "self-setup test - not same mine")
|
||||
case _ =>
|
||||
assert( false, "self-setup test - wrong deploy message")
|
||||
}
|
||||
eventsMsgs(2) match {
|
||||
case LocalServiceMessage(
|
||||
"TR",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Build,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.DisruptorMine, Vector3(1,2,3), PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "self-setup test - no icon or wrong icon")
|
||||
}
|
||||
assert(deployableList.contains(jmine), "self-setup test - deployable not appended to list")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DeployableBehaviorSetupOwnedP1Test extends ActorTest {
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val avatar = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
|
||||
val player = Player(avatar) //guid=3
|
||||
val jmine = Deployables.Make(DeployedItem.jammer_mine)() //guid=1
|
||||
val citem = new ConstructionItem(GlobalDefinitions.ace) //guid = 2
|
||||
val deployableList = new ListBuffer()
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(max = 5))
|
||||
val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools(): Unit = {}
|
||||
GUID(guid)
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
override def Players = List(avatar)
|
||||
override def LivePlayers = List(player)
|
||||
}
|
||||
guid.register(jmine, number = 1)
|
||||
guid.register(citem, number = 2)
|
||||
guid.register(player, number = 3)
|
||||
jmine.Faction = PlanetSideEmpire.TR
|
||||
jmine.Position = Vector3(1,2,3)
|
||||
jmine.Orientation = Vector3(4,5,6)
|
||||
jmine.AssignOwnership(player)
|
||||
|
||||
"DeployableBehavior" should {
|
||||
"receive setup functions after asking owner" in {
|
||||
val playerProbe = new TestProbe(system)
|
||||
player.Actor = playerProbe.ref
|
||||
assert(deployableList.isEmpty, "owned setup test, 1 - deployable list is not empty")
|
||||
zone.Deployables ! Zone.Deployable.BuildByOwner(jmine, player, citem)
|
||||
|
||||
playerProbe.receiveOne(200.milliseconds) match {
|
||||
case Player.BuildDeployable(a, b) =>
|
||||
assert((a eq jmine) && (b eq citem), "owned setup test, 1 - process echoing wrong mine or wrong construction item")
|
||||
case _ =>
|
||||
assert(false, "owned setup test, 1 - not echoing messages to owner")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DeployableBehaviorSetupOwnedP2Test extends FreedContextActorTest {
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val avatar = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
|
||||
val player = Player(avatar) //guid=3
|
||||
val jmine = Deployables.Make(DeployedItem.jammer_mine)() //guid=1
|
||||
val citem = new ConstructionItem(GlobalDefinitions.ace) //guid = 2
|
||||
val deployableList = new ListBuffer()
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(max = 5))
|
||||
val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools(): Unit = {}
|
||||
GUID(guid)
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
override def Players = List(avatar)
|
||||
override def LivePlayers = List(player)
|
||||
override def tasks: ActorRef = eventsProbe.ref
|
||||
}
|
||||
guid.register(jmine, number = 1)
|
||||
guid.register(citem, number = 2)
|
||||
guid.register(player, number = 3)
|
||||
guid.register(avatar.locker, number = 4)
|
||||
jmine.Faction = PlanetSideEmpire.TR
|
||||
jmine.Position = Vector3(1,2,3)
|
||||
jmine.Orientation = Vector3(4,5,6)
|
||||
jmine.AssignOwnership(player)
|
||||
avatar.deployables.UpdateMaxCounts(Set(Certification.CombatEngineering, Certification.AssaultEngineering))
|
||||
player.Zone = zone
|
||||
player.Slot(slot = 0).Equipment = citem
|
||||
player.Actor = system.actorOf(Props(classOf[PlayerControl], player, null), name = "deployable-test-player-control")
|
||||
|
||||
"DeployableBehavior" should {
|
||||
"perform setup functions after asking owner" in {
|
||||
assert(player.Slot(slot = 0).Equipment.contains(citem), "owned setup test, 2 - player hand is empty")
|
||||
assert(deployableList.isEmpty, "owned setup test, 2 - deployable list is not empty")
|
||||
assert(!avatar.deployables.Contains(jmine), "owned setup test, 2 - avatar already owns deployable")
|
||||
zone.Deployables ! Zone.Deployable.BuildByOwner(jmine, player, citem)
|
||||
//assert(false, "test needs to be fixed")
|
||||
val eventsMsgs = eventsProbe.receiveN(8, 10.seconds)
|
||||
eventsMsgs.head match {
|
||||
case AvatarServiceMessage(
|
||||
"TestCharacter1",
|
||||
AvatarAction.SendResponse(
|
||||
Service.defaultPlayerGUID,
|
||||
ObjectDeployedMessage(0, "jammer_mine", DeployOutcome.Success, 1, 20)
|
||||
)
|
||||
) => ;
|
||||
case _ =>
|
||||
assert(false, "owned setup test, 2 - did not receive build confirmation")
|
||||
}
|
||||
eventsMsgs(1) match {
|
||||
case LocalServiceMessage("TestCharacter1", LocalAction.DeployableUIFor(DeployedItem.jammer_mine)) => ;
|
||||
case _ => assert(false, "owned setup test, 2 - did not receive ui update")
|
||||
}
|
||||
eventsMsgs(2) match {
|
||||
case LocalServiceMessage(
|
||||
"test",
|
||||
LocalAction.TriggerEffectLocation(PlanetSideGUID(3), "spawn_object_effect", Vector3(1,2,3), Vector3(4,5,6))
|
||||
) => ;
|
||||
case _ => assert(false, "owned setup test, 2 - no spawn fx")
|
||||
}
|
||||
eventsMsgs(3) match {
|
||||
case AvatarServiceMessage("test", AvatarAction.DeployItem(PlanetSideGUID(0), obj)) =>
|
||||
assert(obj eq jmine, "owned setup test, 2 - not same mine")
|
||||
case _ =>
|
||||
assert( false, "owned setup test, 2 - wrong deploy message")
|
||||
}
|
||||
//the message order can be jumbled from here-on
|
||||
eventsMsgs(4) match {
|
||||
case LocalServiceMessage(
|
||||
"TR",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Build,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.DisruptorMine, Vector3(1,2,3), PlanetSideGUID(3))
|
||||
)
|
||||
) => ;
|
||||
case _ =>
|
||||
assert(false, "owned setup test, 2 - no icon or wrong icon")
|
||||
}
|
||||
eventsMsgs(5) match {
|
||||
case AvatarServiceMessage(
|
||||
"TestCharacter1",
|
||||
AvatarAction.SendResponse(Service.defaultPlayerGUID, GenericObjectActionMessage(PlanetSideGUID(1), 21))
|
||||
) => ;
|
||||
case _ =>
|
||||
assert(false, "owned setup test, 2 - build action not reset (GOAM21)")
|
||||
}
|
||||
eventsMsgs(6) match {
|
||||
case AvatarServiceMessage("test", AvatarAction.ObjectDelete(Service.defaultPlayerGUID, PlanetSideGUID(2), 0)) => ;
|
||||
case _ =>
|
||||
assert(false, "owned setup test, 2 - construction tool not deleted")
|
||||
}
|
||||
eventsMsgs(7) match {
|
||||
case TaskResolver.GiveTask(_, _) => ;
|
||||
case _ =>
|
||||
assert(false, "owned setup test, 2 - construction tool not unregistered")
|
||||
}
|
||||
assert(player.Slot(slot = 0).Equipment.isEmpty, "owned setup test, 2 - player hand should be empty")
|
||||
assert(deployableList.contains(jmine), "owned setup test, 2 - deployable not appended to list")
|
||||
assert(avatar.deployables.Contains(jmine), "owned setup test, 2 - avatar does not own deployable")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DeployableBehaviorDeconstructTest extends ActorTest {
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val jmine = Deployables.Make(DeployedItem.jammer_mine)() //guid = 1
|
||||
val deployableList = new ListBuffer()
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(max = 5))
|
||||
val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools(): Unit = {}
|
||||
GUID(guid)
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def tasks: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
}
|
||||
guid.register(jmine, number = 1)
|
||||
jmine.Faction = PlanetSideEmpire.TR
|
||||
jmine.Position = Vector3(1,2,3)
|
||||
jmine.Orientation = Vector3(4,5,6)
|
||||
|
||||
"DeployableBehavior" should {
|
||||
"deconstruct, by self" in {
|
||||
zone.Deployables ! Zone.Deployable.Build(jmine)
|
||||
eventsProbe.receiveN(3, 10.seconds) //all of the messages from the construction (see other testing)
|
||||
assert(deployableList.contains(jmine), "deconstruct test - deployable not appended to list")
|
||||
|
||||
jmine.Actor ! Deployable.Deconstruct()
|
||||
val eventsMsgs = eventsProbe.receiveN(3, 10.seconds)
|
||||
eventsMsgs.head match {
|
||||
case LocalServiceMessage("test", LocalAction.EliminateDeployable(`jmine`, PlanetSideGUID(1), Vector3(1,2,3), 2)) => ;
|
||||
case _ => assert(false, "deconstruct test - not eliminating deployable")
|
||||
}
|
||||
eventsMsgs(1) match {
|
||||
case LocalServiceMessage(
|
||||
"TR",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Dismiss,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.DisruptorMine, Vector3(1, 2, 3), PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "owned deconstruct test - not removing icon")
|
||||
}
|
||||
eventsMsgs(2) match {
|
||||
case TaskResolver.GiveTask(_, _) => ;
|
||||
case _ => assert(false, "deconstruct test - not unregistering deployable")
|
||||
}
|
||||
assert(!deployableList.contains(jmine), "deconstruct test - deployable not removed from list")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DeployableBehaviorDeconstructOwnedTest extends FreedContextActorTest {
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val avatar = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
|
||||
val player = Player(avatar) //guid=3
|
||||
val jmine = Deployables.Make(DeployedItem.jammer_mine)() //guid=1
|
||||
val citem = new ConstructionItem(GlobalDefinitions.ace) //guid = 2
|
||||
val deployableList = new ListBuffer()
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(max = 5))
|
||||
val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools(): Unit = {}
|
||||
GUID(guid)
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
override def Players = List(avatar)
|
||||
override def LivePlayers = List(player)
|
||||
override def tasks: ActorRef = eventsProbe.ref
|
||||
}
|
||||
guid.register(jmine, number = 1)
|
||||
guid.register(citem, number = 2)
|
||||
guid.register(player, number = 3)
|
||||
guid.register(avatar.locker, number = 4)
|
||||
jmine.Faction = PlanetSideEmpire.TR
|
||||
jmine.Position = Vector3(1,2,3)
|
||||
jmine.Orientation = Vector3(4,5,6)
|
||||
jmine.AssignOwnership(player)
|
||||
avatar.deployables.UpdateMaxCounts(Set(Certification.CombatEngineering, Certification.AssaultEngineering))
|
||||
player.Zone = zone
|
||||
player.Slot(slot = 0).Equipment = citem
|
||||
player.Actor = system.actorOf(Props(classOf[PlayerControl], player, null), name = "deployable-test-player-control")
|
||||
|
||||
"DeployableBehavior" should {
|
||||
"deconstruct and alert owner" in {
|
||||
zone.Deployables ! Zone.Deployable.BuildByOwner(jmine, player, citem)
|
||||
eventsProbe.receiveN(8, 10.seconds)
|
||||
assert(deployableList.contains(jmine), "owned deconstruct test - deployable not appended to list")
|
||||
assert(avatar.deployables.Contains(jmine), "owned deconstruct test - avatar does not own deployable")
|
||||
|
||||
jmine.Actor ! Deployable.Deconstruct()
|
||||
val eventsMsgs = eventsProbe.receiveN(4, 10.seconds)
|
||||
eventsMsgs.head match {
|
||||
case LocalServiceMessage("test", LocalAction.EliminateDeployable(`jmine`, PlanetSideGUID(1), Vector3(1,2,3), 2)) => ;
|
||||
case _ => assert(false, "owned deconstruct test - not eliminating deployable")
|
||||
}
|
||||
eventsMsgs(1) match {
|
||||
case LocalServiceMessage("TestCharacter1", LocalAction.DeployableUIFor(DeployedItem.jammer_mine)) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
eventsMsgs(2) match {
|
||||
case LocalServiceMessage(
|
||||
"TR",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Dismiss,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.DisruptorMine, Vector3(1, 2, 3), PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "owned deconstruct test - not removing icon")
|
||||
}
|
||||
eventsMsgs(3) match {
|
||||
case TaskResolver.GiveTask(_, _) => ;
|
||||
case _ => assert(false, "owned deconstruct test - not unregistering deployable")
|
||||
}
|
||||
|
||||
assert(deployableList.isEmpty, "owned deconstruct test - deployable still in list")
|
||||
assert(!avatar.deployables.Contains(jmine), "owned deconstruct test - avatar still owns deployable")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object DeployableBehaviorTest {
|
||||
//...
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package objects
|
||||
|
||||
import akka.actor.{Actor, Props}
|
||||
import akka.actor.{Actor, ActorRef, Props}
|
||||
import akka.testkit.TestProbe
|
||||
import base.ActorTest
|
||||
import net.psforever.objects.ballistics._
|
||||
|
|
@ -10,20 +10,20 @@ import net.psforever.objects.guid.NumberPoolHub
|
|||
import net.psforever.objects.guid.source.MaxNumberSource
|
||||
import net.psforever.objects.serverobject.mount.{MountInfo, Mountable}
|
||||
import net.psforever.objects.vital.Vitality
|
||||
import net.psforever.objects.zones.{Zone, ZoneMap}
|
||||
import net.psforever.objects.zones.{Zone, ZoneDeployableActor, ZoneMap}
|
||||
import net.psforever.objects.{TurretDeployable, _}
|
||||
import net.psforever.packet.game.{DeployableIcon, DeployableInfo, DeploymentAction}
|
||||
import net.psforever.types._
|
||||
import org.specs2.mutable.Specification
|
||||
import net.psforever.services.{RemoverActor, Service}
|
||||
import net.psforever.services.Service
|
||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
||||
import net.psforever.services.support.SupportActor
|
||||
import net.psforever.objects.avatar.Avatar
|
||||
import net.psforever.objects.vital.base.DamageResolution
|
||||
import net.psforever.objects.vital.interaction.DamageInteraction
|
||||
import net.psforever.objects.vital.projectile.ProjectileReason
|
||||
|
||||
import scala.collection.mutable.ListBuffer
|
||||
import scala.concurrent.duration._
|
||||
|
||||
class DeployableTest extends Specification {
|
||||
|
|
@ -307,25 +307,30 @@ class ShieldGeneratorDeployableTest extends Specification {
|
|||
|
||||
class ExplosiveDeployableJammerTest extends ActorTest {
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(10))
|
||||
val zone = new Zone("test", new ZoneMap("test"), 0) {
|
||||
override def SetupNumberPools() = {}
|
||||
GUID(guid)
|
||||
}
|
||||
val activityProbe = TestProbe()
|
||||
val avatarProbe = TestProbe()
|
||||
val localProbe = TestProbe()
|
||||
zone.Activity = activityProbe.ref
|
||||
zone.AvatarEvents = avatarProbe.ref
|
||||
zone.LocalEvents = localProbe.ref
|
||||
val eventsProbe = new TestProbe(system)
|
||||
|
||||
val j_mine = Deployables.Make(DeployedItem.jammer_mine)().asInstanceOf[ExplosiveDeployable] //guid=1
|
||||
val player1 =
|
||||
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
|
||||
player1.Spawn()
|
||||
val player2 =
|
||||
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
|
||||
player2.Spawn()
|
||||
val avatar1 = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
|
||||
val player1 = Player(avatar1) //guid=3
|
||||
val avatar2 = Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)
|
||||
val player2 = Player(avatar2) //guid=4
|
||||
val weapon = Tool(GlobalDefinitions.jammer_grenade) //guid=5
|
||||
val deployableList = new ListBuffer()
|
||||
val zone = new Zone("test", new ZoneMap("test"), 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools() = {}
|
||||
GUID(guid)
|
||||
override def Activity: ActorRef = eventsProbe.ref
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
override def Players = List(avatar1, avatar2)
|
||||
override def LivePlayers = List(player1, player2)
|
||||
override def tasks: ActorRef = eventsProbe.ref
|
||||
}
|
||||
player1.Spawn()
|
||||
player2.Spawn()
|
||||
guid.register(j_mine, 1)
|
||||
guid.register(player1, 3)
|
||||
guid.register(player2, 4)
|
||||
|
|
@ -355,51 +360,22 @@ class ExplosiveDeployableJammerTest extends ActorTest {
|
|||
assert(!j_mine.Destroyed)
|
||||
|
||||
j_mine.Actor ! Vitality.Damage(applyDamageToJ)
|
||||
val msg_local = localProbe.receiveN(4, 200 milliseconds)
|
||||
val msg_avatar = avatarProbe.receiveOne(200 milliseconds)
|
||||
activityProbe.expectNoMessage(200 milliseconds)
|
||||
assert(
|
||||
msg_local.head match {
|
||||
case LocalServiceMessage("TestCharacter2", LocalAction.AlertDestroyDeployable(PlanetSideGUID(0), target)) =>
|
||||
target eq j_mine
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(1) match {
|
||||
case LocalServiceMessage(
|
||||
"NC",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Dismiss,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.DisruptorMine, _, PlanetSideGUID(0))
|
||||
)
|
||||
) =>
|
||||
true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(2) match {
|
||||
case LocalServiceMessage.Deployables(SupportActor.ClearSpecific(List(target), _zone)) =>
|
||||
(j_mine eq target) && (_zone eq zone)
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(3) match {
|
||||
case LocalServiceMessage.Deployables(RemoverActor.AddTask(target, _zone, _)) =>
|
||||
(target eq j_mine) && (_zone eq zone)
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_avatar match {
|
||||
case AvatarServiceMessage("test", AvatarAction.Destroy(PlanetSideGUID(1), _, Service.defaultPlayerGUID, _)) =>
|
||||
true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
val eventMsgs = eventsProbe.receiveN(2, 200 milliseconds)
|
||||
eventMsgs.head match {
|
||||
case LocalServiceMessage(
|
||||
"NC",
|
||||
LocalAction.DeployableMapIcon(
|
||||
ValidPlanetSideGUID(0),
|
||||
DeploymentAction.Dismiss,
|
||||
DeployableInfo(ValidPlanetSideGUID(1), DeployableIcon.DisruptorMine, Vector3.Zero, ValidPlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
eventMsgs(1) match {
|
||||
case AvatarServiceMessage("test", AvatarAction.Destroy(PlanetSideGUID(1), _, Service.defaultPlayerGUID, _)) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
assert(j_mine.Destroyed)
|
||||
}
|
||||
}
|
||||
|
|
@ -407,25 +383,36 @@ class ExplosiveDeployableJammerTest extends ActorTest {
|
|||
|
||||
class ExplosiveDeployableJammerExplodeTest extends ActorTest {
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(10))
|
||||
val zone = new Zone("test", new ZoneMap("test"), 0) {
|
||||
override def SetupNumberPools() = {}
|
||||
GUID(guid)
|
||||
}
|
||||
val activityProbe = TestProbe()
|
||||
val avatarProbe = TestProbe()
|
||||
val localProbe = TestProbe()
|
||||
zone.Activity = activityProbe.ref
|
||||
zone.AvatarEvents = avatarProbe.ref
|
||||
zone.LocalEvents = localProbe.ref
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val player1Probe = new TestProbe(system)
|
||||
val player2Probe = new TestProbe(system)
|
||||
|
||||
val h_mine = Deployables.Make(DeployedItem.he_mine)().asInstanceOf[ExplosiveDeployable] //guid=2
|
||||
val player1 =
|
||||
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
|
||||
player1.Spawn()
|
||||
val player2 =
|
||||
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
|
||||
player2.Spawn()
|
||||
val avatar1 = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
|
||||
val player1 = Player(avatar1) //guid=3
|
||||
val avatar2 = Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)
|
||||
val player2 = Player(avatar2) //guid=4
|
||||
val weapon = Tool(GlobalDefinitions.jammer_grenade) //guid=5
|
||||
val deployableList = new ListBuffer()
|
||||
val zone = new Zone("test", new ZoneMap("test"), 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools() = {}
|
||||
GUID(guid)
|
||||
override def Activity: ActorRef = eventsProbe.ref
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
override def Players = List(avatar1, avatar2)
|
||||
override def LivePlayers = List(player1, player2)
|
||||
override def tasks: ActorRef = eventsProbe.ref
|
||||
}
|
||||
player1.Spawn()
|
||||
player1.Actor = player1Probe.ref
|
||||
avatar2.deployables.AddOverLimit(h_mine) //cram it down your throat
|
||||
player2.Spawn()
|
||||
player2.Position = Vector3(10,0,0)
|
||||
player2.Actor = player2Probe.ref
|
||||
guid.register(h_mine, 2)
|
||||
guid.register(player1, 3)
|
||||
guid.register(player2, 4)
|
||||
|
|
@ -451,66 +438,50 @@ class ExplosiveDeployableJammerExplodeTest extends ActorTest {
|
|||
|
||||
"ExplosiveDeployable" should {
|
||||
"handle being jammered appropriately (detonation)" in {
|
||||
assert(avatar2.deployables.Contains(h_mine))
|
||||
assert(!h_mine.Destroyed)
|
||||
|
||||
h_mine.Actor ! Vitality.Damage(applyDamageToH)
|
||||
val msg_local = localProbe.receiveN(5, 200 milliseconds)
|
||||
val msg_avatar = avatarProbe.receiveOne(200 milliseconds)
|
||||
val msg_activity = activityProbe.receiveOne(200 milliseconds)
|
||||
assert(
|
||||
msg_local.head match {
|
||||
case LocalServiceMessage("test", LocalAction.Detonate(PlanetSideGUID(2), target)) => target eq h_mine
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(1) match {
|
||||
case LocalServiceMessage("TestCharacter2", LocalAction.AlertDestroyDeployable(PlanetSideGUID(0), target)) =>
|
||||
target eq h_mine
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(2) match {
|
||||
case LocalServiceMessage(
|
||||
"NC",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Dismiss,
|
||||
DeployableInfo(PlanetSideGUID(2), DeployableIcon.HEMine, _, PlanetSideGUID(0))
|
||||
)
|
||||
) =>
|
||||
true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(3) match {
|
||||
case LocalServiceMessage.Deployables(SupportActor.ClearSpecific(List(target), _zone)) =>
|
||||
(h_mine eq target) && (_zone eq zone)
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(4) match {
|
||||
case LocalServiceMessage.Deployables(RemoverActor.AddTask(target, _zone, _)) =>
|
||||
(target eq h_mine) && (_zone eq zone)
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_avatar match {
|
||||
case AvatarServiceMessage("test", AvatarAction.Destroy(PlanetSideGUID(2), _, Service.defaultPlayerGUID, _)) =>
|
||||
true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_activity match {
|
||||
case Zone.HotSpot.Conflict(target, attacker, _) => (target.Definition eq h_mine.Definition) && (attacker eq pSource)
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
val eventMsgs = eventsProbe.receiveN(5, 200 milliseconds)
|
||||
val p1Msgs = player1Probe.receiveN(1, 200 milliseconds)
|
||||
player2Probe.expectNoMessage(200 milliseconds)
|
||||
eventMsgs.head match {
|
||||
case Zone.HotSpot.Conflict(target, attacker, _)
|
||||
if (target.Definition eq h_mine.Definition) && (attacker eq pSource) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
eventMsgs(1) match {
|
||||
case LocalServiceMessage("test", LocalAction.Detonate(PlanetSideGUID(2), target))
|
||||
if target eq h_mine => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
eventMsgs(2) match {
|
||||
case LocalServiceMessage("TestCharacter2", LocalAction.DeployableUIFor(DeployedItem.he_mine)) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
eventMsgs(3) match {
|
||||
case LocalServiceMessage(
|
||||
"NC",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Dismiss,
|
||||
DeployableInfo(PlanetSideGUID(2), DeployableIcon.HEMine, _, PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
eventMsgs(4) match {
|
||||
case AvatarServiceMessage(
|
||||
"test",
|
||||
AvatarAction.Destroy(PlanetSideGUID(2), PlanetSideGUID(3), Service.defaultPlayerGUID, Vector3.Zero)
|
||||
) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
p1Msgs.head match {
|
||||
case Vitality.Damage(_) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
assert(!avatar2.deployables.Contains(h_mine))
|
||||
assert(h_mine.Destroyed)
|
||||
}
|
||||
}
|
||||
|
|
@ -518,25 +489,36 @@ class ExplosiveDeployableJammerExplodeTest extends ActorTest {
|
|||
|
||||
class ExplosiveDeployableDestructionTest extends ActorTest {
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(10))
|
||||
val zone = new Zone("test", new ZoneMap("test"), 0) {
|
||||
override def SetupNumberPools() = {}
|
||||
GUID(guid)
|
||||
}
|
||||
val activityProbe = TestProbe()
|
||||
val avatarProbe = TestProbe()
|
||||
val localProbe = TestProbe()
|
||||
zone.Activity = activityProbe.ref
|
||||
zone.AvatarEvents = avatarProbe.ref
|
||||
zone.LocalEvents = localProbe.ref
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val player1Probe = new TestProbe(system)
|
||||
val player2Probe = new TestProbe(system)
|
||||
|
||||
val h_mine = Deployables.Make(DeployedItem.he_mine)().asInstanceOf[ExplosiveDeployable] //guid=2
|
||||
val player1 =
|
||||
Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=3
|
||||
player1.Spawn()
|
||||
val player2 =
|
||||
Player(Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)) //guid=4
|
||||
player2.Spawn()
|
||||
val avatar1 = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
|
||||
val player1 = Player(avatar1) //guid=3
|
||||
val avatar2 = Avatar(0, "TestCharacter2", PlanetSideEmpire.NC, CharacterSex.Male, 0, CharacterVoice.Mute)
|
||||
val player2 = Player(avatar2) //guid=4
|
||||
val weapon = Tool(GlobalDefinitions.suppressor) //guid=5
|
||||
val deployableList = new ListBuffer()
|
||||
val zone = new Zone("test", new ZoneMap("test"), 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools() = {}
|
||||
GUID(guid)
|
||||
override def Activity: ActorRef = eventsProbe.ref
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
override def Players = List(avatar1, avatar2)
|
||||
override def LivePlayers = List(player1, player2)
|
||||
override def tasks: ActorRef = eventsProbe.ref
|
||||
}
|
||||
player1.Spawn()
|
||||
player1.Actor = player1Probe.ref
|
||||
avatar2.deployables.AddOverLimit(h_mine) //cram it down your throat
|
||||
player2.Spawn()
|
||||
player2.Position = Vector3(10,0,0)
|
||||
player2.Actor = player2Probe.ref
|
||||
guid.register(h_mine, 2)
|
||||
guid.register(player1, 3)
|
||||
guid.register(player2, 4)
|
||||
|
|
@ -561,6 +543,10 @@ class ExplosiveDeployableDestructionTest extends ActorTest {
|
|||
)
|
||||
val applyDamageTo = resolved.calculate()
|
||||
|
||||
val activityProbe = TestProbe()
|
||||
val avatarProbe = TestProbe()
|
||||
val localProbe = TestProbe()
|
||||
|
||||
"ExplosiveDeployable" should {
|
||||
"handle being destroyed" in {
|
||||
h_mine.Health = h_mine.Definition.DamageDestroysAt + 1
|
||||
|
|
@ -568,58 +554,35 @@ class ExplosiveDeployableDestructionTest extends ActorTest {
|
|||
assert(!h_mine.Destroyed)
|
||||
|
||||
h_mine.Actor ! Vitality.Damage(applyDamageTo)
|
||||
val msg_local = localProbe.receiveN(5, 200 milliseconds)
|
||||
val msg_avatar = avatarProbe.receiveOne(200 milliseconds)
|
||||
activityProbe.expectNoMessage(200 milliseconds)
|
||||
assert(
|
||||
msg_local.head match {
|
||||
case LocalServiceMessage("TestCharacter2", LocalAction.AlertDestroyDeployable(PlanetSideGUID(0), target)) =>
|
||||
target eq h_mine
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(1) match {
|
||||
case LocalServiceMessage(
|
||||
"NC",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Dismiss,
|
||||
DeployableInfo(PlanetSideGUID(2), DeployableIcon.HEMine, _, PlanetSideGUID(0))
|
||||
)
|
||||
) =>
|
||||
true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(2) match {
|
||||
case LocalServiceMessage.Deployables(SupportActor.ClearSpecific(List(target), _zone)) =>
|
||||
(h_mine eq target) && (_zone eq zone)
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(3) match {
|
||||
case LocalServiceMessage.Deployables(RemoverActor.AddTask(target, _zone, _)) =>
|
||||
(target eq h_mine) && (_zone eq zone)
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_local(4) match {
|
||||
case LocalServiceMessage("test", LocalAction.TriggerEffect(_, "detonate_damaged_mine", PlanetSideGUID(2))) =>
|
||||
true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
assert(
|
||||
msg_avatar match {
|
||||
case AvatarServiceMessage("test", AvatarAction.Destroy(PlanetSideGUID(2), _, Service.defaultPlayerGUID, _)) =>
|
||||
true
|
||||
case _ => false
|
||||
}
|
||||
)
|
||||
val eventMsgs = eventsProbe.receiveN(4, 200 milliseconds)
|
||||
player1Probe.expectNoMessage(200 milliseconds)
|
||||
player2Probe.expectNoMessage(200 milliseconds)
|
||||
eventMsgs.head match {
|
||||
case LocalServiceMessage("TestCharacter2", LocalAction.DeployableUIFor(DeployedItem.he_mine)) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
eventMsgs(1) match {
|
||||
case LocalServiceMessage(
|
||||
"NC",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Dismiss,
|
||||
DeployableInfo(PlanetSideGUID(2), DeployableIcon.HEMine, _, PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
eventMsgs(2) match {
|
||||
case AvatarServiceMessage(
|
||||
"test",
|
||||
AvatarAction.Destroy(PlanetSideGUID(2), PlanetSideGUID(3), Service.defaultPlayerGUID, Vector3.Zero)
|
||||
) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
eventMsgs(3) match {
|
||||
case LocalServiceMessage("test", LocalAction.TriggerEffect(_, "detonate_damaged_mine", PlanetSideGUID(2))) => ;
|
||||
case _ => assert(false, "")
|
||||
}
|
||||
assert(h_mine.Health <= h_mine.Definition.DamageDestroysAt)
|
||||
assert(h_mine.Destroyed)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -383,7 +383,7 @@ class EquipmentTest extends Specification {
|
|||
obj.AmmoType mustEqual DeployedItem.he_mine
|
||||
}
|
||||
|
||||
"when switching fire modes, ammo mode resets to the first entry" in {
|
||||
"when switching fire modes, ammo mode should be maintained" in {
|
||||
val obj: ConstructionItem = ConstructionItem(GlobalDefinitions.ace)
|
||||
obj.NextFireMode
|
||||
obj.AmmoType mustEqual DeployedItem.he_mine
|
||||
|
|
@ -392,8 +392,8 @@ class EquipmentTest extends Specification {
|
|||
obj.NextFireMode //spitfire_turret
|
||||
obj.NextFireMode //motionalarmsensor
|
||||
obj.NextFireMode //boomer
|
||||
obj.NextFireMode
|
||||
obj.AmmoType mustEqual DeployedItem.he_mine
|
||||
obj.NextFireMode //?
|
||||
obj.AmmoType mustEqual DeployedItem.jammer_mine
|
||||
}
|
||||
|
||||
"qualify certifications that must be met before ammo types may be used" in {
|
||||
|
|
|
|||
333
src/test/scala/objects/TelepadRouterTest.scala
Normal file
333
src/test/scala/objects/TelepadRouterTest.scala
Normal file
|
|
@ -0,0 +1,333 @@
|
|||
// Copyright (c) 2021 PSForever
|
||||
package objects
|
||||
|
||||
import akka.actor.{ActorRef, Props}
|
||||
import akka.testkit.TestProbe
|
||||
import base.ActorTest
|
||||
import net.psforever.objects._
|
||||
import net.psforever.objects.ce.{DeployableCategory, DeployedItem, TelepadLike}
|
||||
import net.psforever.objects.guid.NumberPoolHub
|
||||
import net.psforever.objects.guid.source.MaxNumberSource
|
||||
import net.psforever.objects.serverobject.deploy.Deployment
|
||||
import net.psforever.objects.vehicles.{Utility, UtilityType, VehicleControl}
|
||||
import net.psforever.objects.zones.{Zone, ZoneDeployableActor, ZoneMap}
|
||||
import net.psforever.packet.game.objectcreate.ObjectCreateMessageParent
|
||||
import net.psforever.packet.game._
|
||||
import net.psforever.services.avatar.{AvatarAction, AvatarServiceMessage}
|
||||
import net.psforever.services.local.{LocalAction, LocalServiceMessage}
|
||||
import net.psforever.types.{DriveState, PlanetSideGUID, Vector3}
|
||||
|
||||
import scala.collection.mutable.ListBuffer
|
||||
import scala.concurrent.duration._
|
||||
|
||||
class TelepadDeployableNoRouterTest extends ActorTest {
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val telepad = Deployables.Make(DeployedItem.router_telepad_deployable)() //guid=1
|
||||
val deployableList = new ListBuffer()
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(max = 5))
|
||||
val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools(): Unit = {}
|
||||
GUID(guid)
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
}
|
||||
guid.register(telepad, number = 1)
|
||||
|
||||
"TelepadDeployable" should {
|
||||
"fail to activate without a router" in {
|
||||
assert(deployableList.isEmpty, "no-router telepad deployable test - deployable list is not empty")
|
||||
zone.Deployables ! Zone.Deployable.Build(telepad)
|
||||
|
||||
val eventsMsgs = eventsProbe.receiveN(4, 10.seconds)
|
||||
eventsMsgs.head match {
|
||||
case AvatarServiceMessage("test", AvatarAction.DeployItem(PlanetSideGUID(0), obj)) =>
|
||||
assert(obj eq telepad, "no-router telepad deployable testt - not same telepad")
|
||||
case _ =>
|
||||
assert( false, "no-router telepad deployable test - wrong deploy message")
|
||||
}
|
||||
eventsMsgs(1) match {
|
||||
case LocalServiceMessage(
|
||||
"NEUTRAL",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Build,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.RouterTelepad, Vector3.Zero, PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "no-router telepad deployable test - no icon or wrong icon")
|
||||
}
|
||||
eventsMsgs(2) match {
|
||||
case LocalServiceMessage("test", LocalAction.EliminateDeployable(`telepad`, PlanetSideGUID(1), Vector3.Zero, 2)) => ;
|
||||
case _ => assert(false, "no-router telepad deployable test - not eliminating deployable")
|
||||
}
|
||||
eventsMsgs(3) match {
|
||||
case LocalServiceMessage(
|
||||
"NEUTRAL",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Dismiss,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.RouterTelepad, Vector3.Zero, PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "no-router telepad deployable test - no icon or wrong icon cleared")
|
||||
}
|
||||
assert(deployableList.isEmpty, "no-router telepad deployable test - deployable is being tracked")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TelepadDeployableNoActivationTest extends ActorTest {
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val routerProbe = new TestProbe(system)
|
||||
val telepad = Deployables.Make(DeployedItem.router_telepad_deployable)() //guid=1
|
||||
val router = Vehicle(GlobalDefinitions.router) //guid=2
|
||||
val internal = router.Utility(UtilityType.internal_router_telepad_deployable).get //guid=3
|
||||
val deployableList = new ListBuffer()
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(max = 5))
|
||||
val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools(): Unit = {}
|
||||
GUID(guid)
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
override def Vehicles: List[Vehicle] = List(router)
|
||||
}
|
||||
guid.register(telepad, number = 1)
|
||||
guid.register(router, number = 2)
|
||||
guid.register(internal, number = 3)
|
||||
router.Actor = eventsProbe.ref
|
||||
internal.Actor = routerProbe.ref
|
||||
|
||||
"TelepadDeployable" should {
|
||||
"fail to activate without a connected router" in {
|
||||
assert(deployableList.isEmpty, "no-activate telepad deployable test - deployable list is not empty")
|
||||
zone.Deployables ! Zone.Deployable.Build(telepad)
|
||||
|
||||
val eventsMsgs = eventsProbe.receiveN(4, 10.seconds)
|
||||
eventsMsgs.head match {
|
||||
case AvatarServiceMessage("test", AvatarAction.DeployItem(PlanetSideGUID(0), obj)) =>
|
||||
assert(obj eq telepad, "no-activate telepad deployable testt - not same telepad")
|
||||
case _ =>
|
||||
assert( false, "no-activate telepad deployable test - wrong deploy message")
|
||||
}
|
||||
eventsMsgs(1) match {
|
||||
case LocalServiceMessage(
|
||||
"NEUTRAL",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Build,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.RouterTelepad, Vector3.Zero, PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ =>
|
||||
assert( false, "no-activate telepad deployable test - no icon or wrong icon")
|
||||
}
|
||||
eventsMsgs(2) match {
|
||||
case LocalServiceMessage("test", LocalAction.EliminateDeployable(`telepad`, PlanetSideGUID(1), Vector3.Zero, 2)) => ;
|
||||
case _ => assert(false, "no-activate telepad deployable test - not eliminating deployable")
|
||||
}
|
||||
eventsMsgs(3) match {
|
||||
case LocalServiceMessage(
|
||||
"NEUTRAL",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Dismiss,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.RouterTelepad, Vector3.Zero, PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "no-activate telepad deployable test - no icon or wrong icon")
|
||||
}
|
||||
routerProbe.expectNoMessage(100.millisecond)
|
||||
assert(deployableList.isEmpty, "no-activate telepad deployable test - deployable is being tracked")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TelepadDeployableAttemptTest extends ActorTest {
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val routerProbe = new TestProbe(system)
|
||||
val telepad = new TelepadDeployable(TelepadRouterTest.router_telepad_deployable) //guid=1
|
||||
val router = Vehicle(GlobalDefinitions.router) //guid=2
|
||||
val internal = router.Utility(UtilityType.internal_router_telepad_deployable).get //guid=3
|
||||
val deployableList = new ListBuffer()
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(max = 5))
|
||||
val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools(): Unit = {}
|
||||
GUID(guid)
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
override def Vehicles: List[Vehicle] = List(router)
|
||||
}
|
||||
guid.register(telepad, number = 1)
|
||||
guid.register(router, number = 2)
|
||||
guid.register(internal, number = 3)
|
||||
router.Actor = eventsProbe.ref
|
||||
internal.Actor = routerProbe.ref
|
||||
telepad.Router = PlanetSideGUID(2) //artificial
|
||||
|
||||
"TelepadDeployable" should {
|
||||
"attempt to link with a connected router" in {
|
||||
assert(deployableList.isEmpty, "link attempt telepad deployable test - deployable list is not empty")
|
||||
zone.Deployables ! Zone.Deployable.Build(telepad)
|
||||
|
||||
val eventsMsgs = eventsProbe.receiveN(2, 10.seconds)
|
||||
val routerMsgs = routerProbe.receiveN(1, 10.seconds)
|
||||
eventsMsgs.head match {
|
||||
case AvatarServiceMessage("test", AvatarAction.DeployItem(PlanetSideGUID(0), obj)) =>
|
||||
assert(obj eq telepad, "link attempt telepad deployable testt - not same telepad")
|
||||
case _ =>
|
||||
assert( false, "link attempt telepad deployable test - wrong deploy message")
|
||||
}
|
||||
eventsMsgs(1) match {
|
||||
case LocalServiceMessage(
|
||||
"NEUTRAL",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Build,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.RouterTelepad, Vector3.Zero, PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "link attempt telepad deployable test - no icon or wrong icon")
|
||||
}
|
||||
routerMsgs.head match {
|
||||
case TelepadLike.RequestLink(tpad) if tpad eq telepad => ;
|
||||
case _ => assert(false, "link attempt telepad deployable test - did not try to link")
|
||||
}
|
||||
assert(deployableList.contains(telepad), "link attempt telepad deployable test - deployable list is not empty")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TelepadDeployableResponseFromRouterTest extends ActorTest {
|
||||
val eventsProbe = new TestProbe(system)
|
||||
val telepad = new TelepadDeployable(TelepadRouterTest.router_telepad_deployable) //guid=1
|
||||
val router = Vehicle(GlobalDefinitions.router) //guid=2
|
||||
val internal = router
|
||||
.Utility(UtilityType.internal_router_telepad_deployable)
|
||||
.get
|
||||
.asInstanceOf[Utility.InternalTelepad] //guid=3
|
||||
val deployableList = new ListBuffer()
|
||||
val guid = new NumberPoolHub(new MaxNumberSource(max = 5))
|
||||
val zone = new Zone(id = "test", new ZoneMap(name = "test"), zoneNumber = 0) {
|
||||
private val deployables = system.actorOf(Props(classOf[ZoneDeployableActor], this, deployableList), name = "test-zone-deployables")
|
||||
|
||||
override def SetupNumberPools(): Unit = {}
|
||||
GUID(guid)
|
||||
override def AvatarEvents: ActorRef = eventsProbe.ref
|
||||
override def LocalEvents: ActorRef = eventsProbe.ref
|
||||
override def VehicleEvents: ActorRef = eventsProbe.ref
|
||||
override def Deployables: ActorRef = deployables
|
||||
override def Vehicles: List[Vehicle] = List(router)
|
||||
}
|
||||
guid.register(telepad, number = 1)
|
||||
guid.register(router, number = 2)
|
||||
guid.register(internal, number = 3)
|
||||
guid.register(router.Utility(UtilityType.teleportpad_terminal).get, number = 4) //necessary
|
||||
router.Zone = zone
|
||||
router.Actor = system.actorOf(Props(classOf[VehicleControl], router), "test-router")
|
||||
telepad.Router = PlanetSideGUID(2) //artificial
|
||||
|
||||
"TelepadDeployable" should {
|
||||
"link with a connected router" in {
|
||||
assert(!telepad.Active, "link to router test - telepad active earlier than intended (1)")
|
||||
assert(!internal.Active, "link to router test - router internals active earlier than intended")
|
||||
router.Actor.tell(Deployment.TryDeploy(DriveState.Deploying), new TestProbe(system).ref)
|
||||
eventsProbe.receiveN(10, 10.seconds) //flush all messages related to deployment
|
||||
assert(!telepad.Active, "link to router test - telepad active earlier than intended (2)")
|
||||
assert(internal.Active, "link to router test - router internals active not active when expected")
|
||||
|
||||
assert(deployableList.isEmpty, "link to router test - deployable list is not empty")
|
||||
zone.Deployables ! Zone.Deployable.Build(telepad)
|
||||
|
||||
val eventsMsgs = eventsProbe.receiveN(9, 10.seconds)
|
||||
eventsMsgs.head match {
|
||||
case AvatarServiceMessage("test", AvatarAction.DeployItem(PlanetSideGUID(0), obj)) =>
|
||||
assert(obj eq telepad, "link to router test - not same telepad")
|
||||
case _ =>
|
||||
assert( false, "link to router test - wrong deploy message")
|
||||
}
|
||||
eventsMsgs(1) match {
|
||||
case LocalServiceMessage(
|
||||
"NEUTRAL",
|
||||
LocalAction.DeployableMapIcon(
|
||||
PlanetSideGUID(0),
|
||||
DeploymentAction.Build,
|
||||
DeployableInfo(PlanetSideGUID(1), DeployableIcon.RouterTelepad, Vector3.Zero, PlanetSideGUID(0))
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "link to router test - no icon or wrong icon")
|
||||
}
|
||||
eventsMsgs(2) match {
|
||||
case LocalServiceMessage(
|
||||
"test",
|
||||
LocalAction.SendResponse(
|
||||
ObjectCreateMessage(_, 744, PlanetSideGUID(3), Some(ObjectCreateMessageParent(PlanetSideGUID(2), 2)), _)
|
||||
)
|
||||
) => ;
|
||||
case _ => assert(false, "link to router test - did not create the internal router telepad (1)")
|
||||
}
|
||||
eventsMsgs(3) match {
|
||||
case LocalServiceMessage(
|
||||
"test",
|
||||
LocalAction.SendResponse(GenericObjectActionMessage(PlanetSideGUID(3), 27))
|
||||
) => ;
|
||||
case _ => assert(false, "link to router test - did not create the internal router telepad (2)")
|
||||
}
|
||||
eventsMsgs(4) match {
|
||||
case LocalServiceMessage(
|
||||
"test",
|
||||
LocalAction.SendResponse(GenericObjectActionMessage(PlanetSideGUID(3), 30))
|
||||
) => ;
|
||||
case _ => assert(false, "link to router test - did not create the internal router telepad (3)")
|
||||
}
|
||||
eventsMsgs(5) match {
|
||||
case LocalServiceMessage(
|
||||
"test",
|
||||
LocalAction.SendResponse(GenericObjectActionMessage(PlanetSideGUID(3), 27))
|
||||
) => ;
|
||||
case _ => assert(false, "link to router test - did not link the internal telepad (1)")
|
||||
}
|
||||
eventsMsgs(6) match {
|
||||
case LocalServiceMessage(
|
||||
"test",
|
||||
LocalAction.SendResponse(GenericObjectActionMessage(PlanetSideGUID(3), 28))
|
||||
) => ;
|
||||
case _ => assert(false, "link to router test - did not link the internal telepad (2)")
|
||||
}
|
||||
eventsMsgs(7) match {
|
||||
case LocalServiceMessage(
|
||||
"test",
|
||||
LocalAction.SendResponse(GenericObjectActionMessage(PlanetSideGUID(1), 27))
|
||||
) => ;
|
||||
case _ => assert(false, "link to router test - did not link the telepad (1)")
|
||||
}
|
||||
eventsMsgs(8) match {
|
||||
case LocalServiceMessage(
|
||||
"test",
|
||||
LocalAction.SendResponse(GenericObjectActionMessage(PlanetSideGUID(1), 28))
|
||||
) => ;
|
||||
case _ => assert(false, "link to router test - did not link the telepad (2)")
|
||||
}
|
||||
assert(telepad.Active, "link to router test - telepad not active when expected")
|
||||
assert(internal.Active, "link to router test - router internals active not active when expected (2)")
|
||||
assert(deployableList.contains(telepad), "link to router test - deployable list is not empty")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object TelepadRouterTest {
|
||||
val router_telepad_deployable = new TelepadDeployableDefinition(DeployedItem.router_telepad_deployable.id) {
|
||||
Name = "test_telepad_dep"
|
||||
DeployTime = Duration.create(1, "ms")
|
||||
DeployCategory = DeployableCategory.Telepads
|
||||
linkTime = 1.second
|
||||
}
|
||||
}
|
||||
|
|
@ -78,20 +78,6 @@ class LocalService5Test extends ActorTest {
|
|||
}
|
||||
}
|
||||
|
||||
class AlertDestroyDeployableTest extends ActorTest {
|
||||
ServiceManager.boot(system)
|
||||
val obj = new SensorDeployable(GlobalDefinitions.motionalarmsensor)
|
||||
|
||||
"LocalService" should {
|
||||
"pass AlertDestroyDeployable" in {
|
||||
val service = system.actorOf(Props(classOf[LocalService], Zone.Nowhere), "l_service")
|
||||
service ! Service.Join("test")
|
||||
service ! LocalServiceMessage("test", LocalAction.AlertDestroyDeployable(PlanetSideGUID(10), obj))
|
||||
expectMsg(LocalServiceResponse("/test/Local", PlanetSideGUID(0), LocalResponse.AlertDestroyDeployable(obj)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DeployableMapIconTest extends ActorTest {
|
||||
ServiceManager.boot(system)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,175 +0,0 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package service
|
||||
|
||||
import akka.actor.Props
|
||||
import base.ActorTest
|
||||
import net.psforever.objects._
|
||||
import net.psforever.objects.zones.Zone
|
||||
import net.psforever.types.PlanetSideGUID
|
||||
import net.psforever.services.local.support.RouterTelepadActivation
|
||||
import net.psforever.services.support.SupportActor
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
class RouterTelepadActivationTest extends ActorTest {
|
||||
"RouterTelepadActivation" should {
|
||||
"construct" in {
|
||||
system.actorOf(Props[RouterTelepadActivation](), "activation-test-actor")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class RouterTelepadActivationSimpleTest extends ActorTest {
|
||||
"RouterTelepadActivation" should {
|
||||
"handle a task" in {
|
||||
val telepad = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad.GUID = PlanetSideGUID(1)
|
||||
val obj = system.actorOf(
|
||||
Props(classOf[ActorTest.SupportActorInterface], Props[RouterTelepadActivation](), self),
|
||||
"activation-test-actor"
|
||||
)
|
||||
|
||||
obj ! RouterTelepadActivation.AddTask(telepad, Zone.Nowhere, Some(2 seconds))
|
||||
expectMsg(3 seconds, RouterTelepadActivation.ActivateTeleportSystem(telepad, Zone.Nowhere))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class RouterTelepadActivationComplexTest extends ActorTest {
|
||||
"RouterTelepadActivation" should {
|
||||
"handle multiple tasks" in {
|
||||
val telepad1 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad1.GUID = PlanetSideGUID(1)
|
||||
val telepad2 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad2.GUID = PlanetSideGUID(2)
|
||||
val telepad3 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad3.GUID = PlanetSideGUID(3)
|
||||
val obj = system.actorOf(
|
||||
Props(classOf[ActorTest.SupportActorInterface], Props[RouterTelepadActivation](), self),
|
||||
"activation-test-actor"
|
||||
)
|
||||
|
||||
obj ! RouterTelepadActivation.AddTask(telepad1, Zone.Nowhere, Some(2 seconds))
|
||||
obj ! RouterTelepadActivation.AddTask(telepad2, Zone.Nowhere, Some(3 seconds))
|
||||
obj ! RouterTelepadActivation.AddTask(telepad3, Zone.Nowhere, Some(1 seconds))
|
||||
val msgs = receiveN(3, 5 seconds) //organized by duration
|
||||
assert(msgs.head.isInstanceOf[RouterTelepadActivation.ActivateTeleportSystem])
|
||||
assert(msgs.head.asInstanceOf[RouterTelepadActivation.ActivateTeleportSystem].telepad == telepad3)
|
||||
assert(msgs(1).isInstanceOf[RouterTelepadActivation.ActivateTeleportSystem])
|
||||
assert(msgs(1).asInstanceOf[RouterTelepadActivation.ActivateTeleportSystem].telepad == telepad1)
|
||||
assert(msgs(2).isInstanceOf[RouterTelepadActivation.ActivateTeleportSystem])
|
||||
assert(msgs(2).asInstanceOf[RouterTelepadActivation.ActivateTeleportSystem].telepad == telepad2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class RouterTelepadActivationHurryTest extends ActorTest {
|
||||
"RouterTelepadActivation" should {
|
||||
"hurry specific tasks" in {
|
||||
val telepad1 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad1.GUID = PlanetSideGUID(1)
|
||||
val telepad2 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad2.GUID = PlanetSideGUID(2)
|
||||
val telepad3 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad3.GUID = PlanetSideGUID(3)
|
||||
val obj = system.actorOf(
|
||||
Props(classOf[ActorTest.SupportActorInterface], Props[RouterTelepadActivation](), self),
|
||||
"activation-test-actor"
|
||||
)
|
||||
|
||||
obj ! RouterTelepadActivation.AddTask(telepad1, Zone.Nowhere, Some(2 seconds))
|
||||
obj ! RouterTelepadActivation.AddTask(telepad2, Zone.Nowhere, Some(2 seconds))
|
||||
obj ! RouterTelepadActivation.AddTask(telepad3, Zone.Nowhere, Some(2 seconds))
|
||||
obj ! SupportActor.HurrySpecific(List(telepad1, telepad2), Zone.Nowhere)
|
||||
val msgs = receiveN(2, 1 seconds)
|
||||
assert(msgs.head.isInstanceOf[RouterTelepadActivation.ActivateTeleportSystem])
|
||||
assert(msgs.head.asInstanceOf[RouterTelepadActivation.ActivateTeleportSystem].telepad == telepad1)
|
||||
assert(msgs(1).isInstanceOf[RouterTelepadActivation.ActivateTeleportSystem])
|
||||
assert(msgs(1).asInstanceOf[RouterTelepadActivation.ActivateTeleportSystem].telepad == telepad2)
|
||||
val last = receiveOne(3 seconds)
|
||||
assert(last.isInstanceOf[RouterTelepadActivation.ActivateTeleportSystem])
|
||||
assert(last.asInstanceOf[RouterTelepadActivation.ActivateTeleportSystem].telepad == telepad3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class RouterTelepadActivationHurryAllTest extends ActorTest {
|
||||
"RouterTelepadActivation" should {
|
||||
"hurry all tasks" in {
|
||||
val telepad1 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad1.GUID = PlanetSideGUID(1)
|
||||
val telepad2 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad2.GUID = PlanetSideGUID(2)
|
||||
val telepad3 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad3.GUID = PlanetSideGUID(3)
|
||||
val obj = system.actorOf(
|
||||
Props(classOf[ActorTest.SupportActorInterface], Props[RouterTelepadActivation](), self),
|
||||
"activation-test-actor"
|
||||
)
|
||||
|
||||
obj ! RouterTelepadActivation.AddTask(telepad1, Zone.Nowhere, Some(7 seconds))
|
||||
obj ! RouterTelepadActivation.AddTask(telepad2, Zone.Nowhere, Some(5 seconds))
|
||||
obj ! RouterTelepadActivation.AddTask(telepad3, Zone.Nowhere, Some(6 seconds))
|
||||
obj ! SupportActor.HurryAll()
|
||||
val msgs =
|
||||
receiveN(
|
||||
3,
|
||||
4 seconds
|
||||
) //organized by duration; note: all messages received before the earliest task should be performed
|
||||
assert(msgs.head.isInstanceOf[RouterTelepadActivation.ActivateTeleportSystem])
|
||||
assert(msgs.head.asInstanceOf[RouterTelepadActivation.ActivateTeleportSystem].telepad == telepad2)
|
||||
assert(msgs(1).isInstanceOf[RouterTelepadActivation.ActivateTeleportSystem])
|
||||
assert(msgs(1).asInstanceOf[RouterTelepadActivation.ActivateTeleportSystem].telepad == telepad3)
|
||||
assert(msgs(2).isInstanceOf[RouterTelepadActivation.ActivateTeleportSystem])
|
||||
assert(msgs(2).asInstanceOf[RouterTelepadActivation.ActivateTeleportSystem].telepad == telepad1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class RouterTelepadActivationClearTest extends ActorTest {
|
||||
"RouterTelepadActivation" should {
|
||||
"clear specific tasks" in {
|
||||
val telepad1 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad1.GUID = PlanetSideGUID(1)
|
||||
val telepad2 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad2.GUID = PlanetSideGUID(2)
|
||||
val telepad3 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad3.GUID = PlanetSideGUID(3)
|
||||
val obj = system.actorOf(
|
||||
Props(classOf[ActorTest.SupportActorInterface], Props[RouterTelepadActivation](), self),
|
||||
"activation-test-actor"
|
||||
)
|
||||
|
||||
obj ! RouterTelepadActivation.AddTask(telepad1, Zone.Nowhere, Some(2 seconds))
|
||||
obj ! RouterTelepadActivation.AddTask(telepad2, Zone.Nowhere, Some(2 seconds))
|
||||
obj ! RouterTelepadActivation.AddTask(telepad3, Zone.Nowhere, Some(2 seconds))
|
||||
obj ! SupportActor.ClearSpecific(List(telepad1, telepad2), Zone.Nowhere)
|
||||
val msgs = receiveN(1, 3 seconds) //should only receive telepad3
|
||||
assert(msgs.head.isInstanceOf[RouterTelepadActivation.ActivateTeleportSystem])
|
||||
assert(msgs.head.asInstanceOf[RouterTelepadActivation.ActivateTeleportSystem].telepad == telepad3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class RouterTelepadActivationClearAllTest extends ActorTest {
|
||||
"RouterTelepadActivation" should {
|
||||
"clear all tasks" in {
|
||||
val telepad1 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad1.GUID = PlanetSideGUID(1)
|
||||
val telepad2 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad2.GUID = PlanetSideGUID(2)
|
||||
val telepad3 = new TelepadDeployable(GlobalDefinitions.router_telepad_deployable)
|
||||
telepad3.GUID = PlanetSideGUID(3)
|
||||
val obj = system.actorOf(
|
||||
Props(classOf[ActorTest.SupportActorInterface], Props[RouterTelepadActivation](), self),
|
||||
"activation-test-actor"
|
||||
)
|
||||
|
||||
obj ! RouterTelepadActivation.AddTask(telepad1, Zone.Nowhere, Some(2 seconds))
|
||||
obj ! RouterTelepadActivation.AddTask(telepad2, Zone.Nowhere, Some(2 seconds))
|
||||
obj ! RouterTelepadActivation.AddTask(telepad3, Zone.Nowhere, Some(2 seconds))
|
||||
obj ! SupportActor.ClearAll()
|
||||
expectNoMessage(4 seconds)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue