repaired some broken tests; LoadoutManager respects length; squad ids attempt to reset only when no players are logged in

This commit is contained in:
FateJH 2019-10-17 16:27:19 -04:00
parent 35a8d87941
commit 0c105f3826
6 changed files with 75 additions and 73 deletions

View file

@ -11,7 +11,7 @@ class LoadoutManager(size : Int) {
def SaveLoadout(owner : Any, label : String, line : Int) : Unit = { def SaveLoadout(owner : Any, label : String, line : Int) : Unit = {
Loadout.Create(owner, label) match { Loadout.Create(owner, label) match {
case Success(loadout) => case Success(loadout) if entries.length > line =>
entries(line) = Some(loadout) entries(line) = Some(loadout)
case _ => ; case _ => ;
} }
@ -20,7 +20,9 @@ class LoadoutManager(size : Int) {
def LoadLoadout(line : Int) : Option[Loadout] = entries.lift(line).flatten def LoadLoadout(line : Int) : Option[Loadout] = entries.lift(line).flatten
def DeleteLoadout(line : Int) : Unit = { def DeleteLoadout(line : Int) : Unit = {
entries(line) = None if(entries.length > line) {
entries(line) = None
}
} }
def Loadouts : Seq[(Int, Loadout)] = entries.zipWithIndex.collect { case(Some(loadout), index) => (index, loadout) } toSeq def Loadouts : Seq[(Int, Loadout)] = entries.zipWithIndex.collect { case(Some(loadout), index) => (index, loadout) } toSeq

View file

@ -152,11 +152,11 @@ class SquadService extends Actor {
} }
/** /**
* Set the unique squad identifier back to the start (1) if no squads are active. * Set the unique squad identifier back to the start (1) if no squads are active and no players are logged on.
* @return `true`, if the identifier is reset; `false`, otherwise * @return `true`, if the identifier is reset; `false`, otherwise
*/ */
def TryResetSquadId() : Boolean = { def TryResetSquadId() : Boolean = {
if(squadFeatures.isEmpty) { if(UserEvents.isEmpty && squadFeatures.isEmpty) {
sid = 1 sid = 1
true true
} }
@ -2451,7 +2451,6 @@ class SquadService extends Actor {
squadFeatures.remove(guid).get.Stop, squadFeatures.remove(guid).get.Stop,
None None
) )
TryResetSquadId()
} }
/** /**
@ -2652,6 +2651,7 @@ class SquadService extends Actor {
UserEvents.remove(charId) UserEvents.remove(charId)
} }
SquadEvents.unsubscribe(sender) //just to make certain SquadEvents.unsubscribe(sender) //just to make certain
TryResetSquadId()
} }
/** /**

View file

@ -206,7 +206,7 @@ class SquadMembershipResponseTest extends Specification {
"decode (7-1)" in { "decode (7-1)" in {
PacketCoding.DecodePacket(string_71).require match { PacketCoding.DecodePacket(string_71).require match {
case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) => case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) =>
unk1 mustEqual SquadResponseType.Disband unk1 mustEqual SquadResponseType.PlatoonInvite
unk2 mustEqual 2 unk2 mustEqual 2
unk3 mustEqual 0 unk3 mustEqual 0
unk4 mustEqual 1176612L unk4 mustEqual 1176612L
@ -222,7 +222,7 @@ class SquadMembershipResponseTest extends Specification {
"decode (7-2)" in { "decode (7-2)" in {
PacketCoding.DecodePacket(string_72).require match { PacketCoding.DecodePacket(string_72).require match {
case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) => case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) =>
unk1 mustEqual SquadResponseType.Disband unk1 mustEqual SquadResponseType.PlatoonInvite
unk2 mustEqual 0 unk2 mustEqual 0
unk3 mustEqual 0 unk3 mustEqual 0
unk4 mustEqual 41578085L unk4 mustEqual 41578085L
@ -238,7 +238,7 @@ class SquadMembershipResponseTest extends Specification {
"decode (8-1)" in { "decode (8-1)" in {
PacketCoding.DecodePacket(string_81).require match { PacketCoding.DecodePacket(string_81).require match {
case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) => case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) =>
unk1 mustEqual SquadResponseType.PlatoonInvite unk1 mustEqual SquadResponseType.PlatoonAccept
unk2 mustEqual 0 unk2 mustEqual 0
unk3 mustEqual 0 unk3 mustEqual 0
unk4 mustEqual 30910985L unk4 mustEqual 30910985L
@ -254,7 +254,7 @@ class SquadMembershipResponseTest extends Specification {
"decode (9-1)" in { "decode (9-1)" in {
PacketCoding.DecodePacket(string_91).require match { PacketCoding.DecodePacket(string_91).require match {
case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) => case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) =>
unk1 mustEqual SquadResponseType.PlatoonAccept unk1 mustEqual SquadResponseType.PlatoonReject
unk2 mustEqual 0 unk2 mustEqual 0
unk3 mustEqual 0 unk3 mustEqual 0
unk4 mustEqual 297025L unk4 mustEqual 297025L
@ -270,7 +270,7 @@ class SquadMembershipResponseTest extends Specification {
"decode (9-2)" in { "decode (9-2)" in {
PacketCoding.DecodePacket(string_92).require match { PacketCoding.DecodePacket(string_92).require match {
case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) => case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) =>
unk1 mustEqual SquadResponseType.PlatoonAccept unk1 mustEqual SquadResponseType.PlatoonReject
unk2 mustEqual 0 unk2 mustEqual 0
unk3 mustEqual 0 unk3 mustEqual 0
unk4 mustEqual 30910985L unk4 mustEqual 30910985L
@ -286,7 +286,7 @@ class SquadMembershipResponseTest extends Specification {
"decode (b-1)" in { "decode (b-1)" in {
PacketCoding.DecodePacket(string_b1).require match { PacketCoding.DecodePacket(string_b1).require match {
case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) => case SquadMembershipResponse(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8) =>
unk1 mustEqual SquadResponseType.PlatoonCancel unk1 mustEqual SquadResponseType.PlatoonLeave
unk2 mustEqual 0 unk2 mustEqual 0
unk3 mustEqual 1 unk3 mustEqual 1
unk4 mustEqual 30910985L unk4 mustEqual 30910985L
@ -377,42 +377,42 @@ class SquadMembershipResponseTest extends Specification {
} }
"encode (7-1)" in { "encode (7-1)" in {
val msg = SquadMembershipResponse(SquadResponseType.Disband, 2, 0, 1176612L, Some(0L), "", true, Some(None)) val msg = SquadMembershipResponse(SquadResponseType.PlatoonInvite, 2, 0, 1176612L, Some(0L), "", true, Some(None))
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string_71 pkt mustEqual string_71
} }
"encode (7-2)" in { "encode (7-2)" in {
val msg = SquadMembershipResponse(SquadResponseType.Disband, 0, 0, 41578085L, Some(30910985L), "Wizkid45", true, Some(None)) val msg = SquadMembershipResponse(SquadResponseType.PlatoonInvite, 0, 0, 41578085L, Some(30910985L), "Wizkid45", true, Some(None))
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string_72 pkt mustEqual string_72
} }
"encode (8-1)" in { "encode (8-1)" in {
val msg = SquadMembershipResponse(SquadResponseType.PlatoonInvite, 0, 0, 30910985L, Some(41578085L), "Wizkid45", false, Some(None)) val msg = SquadMembershipResponse(SquadResponseType.PlatoonAccept, 0, 0, 30910985L, Some(41578085L), "Wizkid45", false, Some(None))
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string_81 pkt mustEqual string_81
} }
"encode (9-1)" in { "encode (9-1)" in {
val msg = SquadMembershipResponse(SquadResponseType.PlatoonAccept, 0, 0, 297025L, Some(41605002L), "", true, Some(None)) val msg = SquadMembershipResponse(SquadResponseType.PlatoonReject, 0, 0, 297025L, Some(41605002L), "", true, Some(None))
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string_91 pkt mustEqual string_91
} }
"encode (9-2)" in { "encode (9-2)" in {
val msg = SquadMembershipResponse(SquadResponseType.PlatoonAccept, 0, 0, 30910985L, Some(41578085L), "Wizkid45", false, Some(None)) val msg = SquadMembershipResponse(SquadResponseType.PlatoonReject, 0, 0, 30910985L, Some(41578085L), "Wizkid45", false, Some(None))
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string_92 pkt mustEqual string_92
} }
"encode (b-1)" in { "encode (b-1)" in {
val msg = SquadMembershipResponse(SquadResponseType.PlatoonCancel, 0, 1, 30910985L, Some(41578085L), "SAraisVanu", false, Some(None)) val msg = SquadMembershipResponse(SquadResponseType.PlatoonLeave, 0, 1, 30910985L, Some(41578085L), "SAraisVanu", false, Some(None))
val pkt = PacketCoding.EncodePacket(msg).require.toByteVector val pkt = PacketCoding.EncodePacket(msg).require.toByteVector
pkt mustEqual string_b1 pkt mustEqual string_b1

View file

@ -121,19 +121,19 @@ class AvatarTest extends Specification {
obj.Implants(0).Active mustEqual false obj.Implants(0).Active mustEqual false
obj.Implants(0).Implant mustEqual ImplantType.None obj.Implants(0).Implant mustEqual ImplantType.None
obj.Implant(0) mustEqual ImplantType.None obj.Implant(0) mustEqual ImplantType.None
obj.Implants(0).Installed mustEqual None obj.Implants(0).Installed.isEmpty mustEqual true
obj.Implants(1).Unlocked mustEqual false obj.Implants(1).Unlocked mustEqual false
obj.Implants(1).Initialized mustEqual false obj.Implants(1).Initialized mustEqual false
obj.Implants(1).Active mustEqual false obj.Implants(1).Active mustEqual false
obj.Implants(1).Implant mustEqual ImplantType.None obj.Implants(1).Implant mustEqual ImplantType.None
obj.Implant(1) mustEqual ImplantType.None obj.Implant(1) mustEqual ImplantType.None
obj.Implants(1).Installed mustEqual None obj.Implants(1).Installed.isEmpty mustEqual true
obj.Implants(2).Unlocked mustEqual false obj.Implants(2).Unlocked mustEqual false
obj.Implants(2).Initialized mustEqual false obj.Implants(2).Initialized mustEqual false
obj.Implants(2).Active mustEqual false obj.Implants(2).Active mustEqual false
obj.Implants(2).Implant mustEqual ImplantType.None obj.Implants(2).Implant mustEqual ImplantType.None
obj.Implant(2) mustEqual ImplantType.None obj.Implant(2) mustEqual ImplantType.None
obj.Implants(2).Installed mustEqual None obj.Implants(2).Installed.isEmpty mustEqual true
obj.Implant(3) mustEqual ImplantType.None //invalid slots beyond the third always reports as ImplantType.None obj.Implant(3) mustEqual ImplantType.None //invalid slots beyond the third always reports as ImplantType.None
} }
@ -142,10 +142,10 @@ class AvatarTest extends Specification {
val testplant : ImplantDefinition = ImplantDefinition(1) val testplant : ImplantDefinition = ImplantDefinition(1)
val obj = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)
obj.Implants(0).Unlocked = true obj.Implants(0).Unlocked = true
obj.InstallImplant(testplant) mustEqual Some(0) obj.InstallImplant(testplant).contains(0) mustEqual true
obj.Implants.find({p => p.Implant == ImplantType(1)}) match { //find the installed implant obj.Implants.find({p => p.Implant == ImplantType(1)}) match { //find the installed implant
case Some(slot) => case Some(slot) =>
slot.Installed mustEqual Some(testplant) slot.Installed.contains(testplant) mustEqual true
case _ => case _ =>
ko ko
} }
@ -159,8 +159,8 @@ class AvatarTest extends Specification {
obj.Implants(0).Unlocked = true obj.Implants(0).Unlocked = true
obj.Implants(1).Unlocked = true obj.Implants(1).Unlocked = true
obj.InstallImplant(testplant1) mustEqual Some(0) obj.InstallImplant(testplant1).contains(0) mustEqual true
obj.InstallImplant(testplant2) mustEqual Some(1) obj.InstallImplant(testplant2).contains(1) mustEqual true
} }
"can not install the same type of implant twice" in { "can not install the same type of implant twice" in {
@ -170,8 +170,8 @@ class AvatarTest extends Specification {
obj.Implants(0).Unlocked = true obj.Implants(0).Unlocked = true
obj.Implants(1).Unlocked = true obj.Implants(1).Unlocked = true
obj.InstallImplant(testplant1) mustEqual Some(0) obj.InstallImplant(testplant1).contains(0) mustEqual true
obj.InstallImplant(testplant2) mustEqual None obj.InstallImplant(testplant2).isEmpty mustEqual true
} }
"can not install more implants than slots available (two unlocked)" in { "can not install more implants than slots available (two unlocked)" in {
@ -182,9 +182,9 @@ class AvatarTest extends Specification {
obj.Implants(0).Unlocked = true obj.Implants(0).Unlocked = true
obj.Implants(1).Unlocked = true obj.Implants(1).Unlocked = true
obj.InstallImplant(testplant1) mustEqual Some(0) obj.InstallImplant(testplant1).contains(0) mustEqual true
obj.InstallImplant(testplant2) mustEqual Some(1) obj.InstallImplant(testplant2).contains(1) mustEqual true
obj.InstallImplant(testplant3) mustEqual None obj.InstallImplant(testplant3).isEmpty mustEqual true
} }
"can not install more implants than slots available (four implants)" in { "can not install more implants than slots available (four implants)" in {
@ -197,21 +197,21 @@ class AvatarTest extends Specification {
obj.Implants(1).Unlocked = true obj.Implants(1).Unlocked = true
obj.Implants(2).Unlocked = true obj.Implants(2).Unlocked = true
obj.InstallImplant(testplant1) mustEqual Some(0) obj.InstallImplant(testplant1).contains(0) mustEqual true
obj.InstallImplant(testplant2) mustEqual Some(1) obj.InstallImplant(testplant2).contains(1) mustEqual true
obj.InstallImplant(testplant3) mustEqual Some(2) obj.InstallImplant(testplant3).contains(2) mustEqual true
obj.InstallImplant(testplant4) mustEqual None obj.InstallImplant(testplant4).isEmpty mustEqual true
} }
"can uninstall an implant" in { "can uninstall an implant" in {
val testplant : ImplantDefinition = ImplantDefinition(1) val testplant : ImplantDefinition = ImplantDefinition(1)
val obj = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)
obj.Implants(0).Unlocked = true obj.Implants(0).Unlocked = true
obj.InstallImplant(testplant) mustEqual Some(0) obj.InstallImplant(testplant).contains(0) mustEqual true
obj.Implants(0).Installed mustEqual Some(testplant) obj.Implants(0).Installed.contains(testplant) mustEqual true
obj.UninstallImplant(testplant.Type) mustEqual Some(0) obj.UninstallImplant(testplant.Type).contains(0) mustEqual true
obj.Implants(0).Installed mustEqual None obj.Implants(0).Installed.isEmpty mustEqual true
} }
"can uninstall just a specific implant" in { "can uninstall just a specific implant" in {
@ -222,14 +222,14 @@ class AvatarTest extends Specification {
obj.Implants(0).Unlocked = true obj.Implants(0).Unlocked = true
obj.Implants(1).Unlocked = true obj.Implants(1).Unlocked = true
obj.Implants(2).Unlocked = true obj.Implants(2).Unlocked = true
obj.InstallImplant(testplant1) mustEqual Some(0) obj.InstallImplant(testplant1).contains(0) mustEqual true
obj.InstallImplant(testplant2) mustEqual Some(1) obj.InstallImplant(testplant2).contains(1) mustEqual true
obj.InstallImplant(testplant3) mustEqual Some(2) obj.InstallImplant(testplant3).contains(2) mustEqual true
obj.Implant(0) mustEqual testplant1.Type obj.Implant(0) mustEqual testplant1.Type
obj.Implant(1) mustEqual testplant2.Type obj.Implant(1) mustEqual testplant2.Type
obj.Implant(2) mustEqual testplant3.Type obj.Implant(2) mustEqual testplant3.Type
obj.UninstallImplant(testplant2.Type) mustEqual Some(1) obj.UninstallImplant(testplant2.Type).contains(1) mustEqual true
obj.Implant(0) mustEqual testplant1.Type obj.Implant(0) mustEqual testplant1.Type
obj.Implant(1) mustEqual ImplantType.None obj.Implant(1) mustEqual ImplantType.None
obj.Implant(2) mustEqual testplant3.Type obj.Implant(2) mustEqual testplant3.Type
@ -243,16 +243,16 @@ class AvatarTest extends Specification {
obj.Implants(0).Unlocked = true obj.Implants(0).Unlocked = true
obj.Implants(1).Unlocked = true obj.Implants(1).Unlocked = true
obj.Implants(2).Unlocked = true obj.Implants(2).Unlocked = true
obj.InstallImplant(testplant1) mustEqual Some(0) obj.InstallImplant(testplant1).contains(0) mustEqual true
obj.InstallImplant(testplant2) mustEqual Some(1) obj.InstallImplant(testplant2).contains(1) mustEqual true
obj.InstallImplant(testplant3) mustEqual Some(2) obj.InstallImplant(testplant3).contains(2) mustEqual true
obj.UninstallImplant(testplant2.Type) mustEqual Some(1) obj.UninstallImplant(testplant2.Type).contains(1) mustEqual true
obj.Implant(0) mustEqual testplant1.Type obj.Implant(0) mustEqual testplant1.Type
obj.Implant(1) mustEqual ImplantType.None obj.Implant(1) mustEqual ImplantType.None
obj.Implant(2) mustEqual testplant3.Type obj.Implant(2) mustEqual testplant3.Type
val testplant4 : ImplantDefinition = ImplantDefinition(4) val testplant4 : ImplantDefinition = ImplantDefinition(4)
obj.InstallImplant(testplant4) mustEqual Some(1) obj.InstallImplant(testplant4).contains(1) mustEqual true
obj.Implant(0) mustEqual testplant1.Type obj.Implant(0) mustEqual testplant1.Type
obj.Implant(1) mustEqual testplant4.Type obj.Implant(1) mustEqual testplant4.Type
obj.Implant(2) mustEqual testplant3.Type obj.Implant(2) mustEqual testplant3.Type
@ -264,8 +264,8 @@ class AvatarTest extends Specification {
val obj = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = Avatar("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)
obj.Implants(0).Unlocked = true obj.Implants(0).Unlocked = true
obj.Implants(1).Unlocked = true obj.Implants(1).Unlocked = true
obj.InstallImplant(testplant1) mustEqual Some(0) obj.InstallImplant(testplant1).contains(0) mustEqual true
obj.InstallImplant(testplant2) mustEqual Some(1) obj.InstallImplant(testplant2).contains(1) mustEqual true
obj.Implants(0).Initialized = true obj.Implants(0).Initialized = true
obj.Implants(0).Active = true obj.Implants(0).Active = true
obj.Implants(1).Initialized = true obj.Implants(1).Initialized = true
@ -281,7 +281,7 @@ class AvatarTest extends Specification {
"does not have any loadout specifications by default" in { "does not have any loadout specifications by default" in {
val (_, avatar) = CreatePlayer() val (_, avatar) = CreatePlayer()
(0 to 9).foreach { avatar.EquipmentLoadouts.LoadLoadout(_) mustEqual None } (0 to 9).foreach { avatar.EquipmentLoadouts.LoadLoadout(_).isEmpty mustEqual true }
ok ok
} }
@ -337,9 +337,9 @@ class AvatarTest extends Specification {
"try to save player's current inventory as a loadout, but will not save to an invalid slot" in { "try to save player's current inventory as a loadout, but will not save to an invalid slot" in {
val (obj, avatar) = CreatePlayer() val (obj, avatar) = CreatePlayer()
avatar.EquipmentLoadouts.SaveLoadout(obj, "test", 10) avatar.EquipmentLoadouts.SaveLoadout(obj, "test", 50)
avatar.EquipmentLoadouts.LoadLoadout(10) mustEqual None avatar.EquipmentLoadouts.LoadLoadout(50).isEmpty mustEqual true
} }
"save player's current inventory as a loadout, without inventory contents" in { "save player's current inventory as a loadout, without inventory contents" in {
@ -384,7 +384,7 @@ class AvatarTest extends Specification {
avatar.EquipmentLoadouts.LoadLoadout(0).isDefined mustEqual true avatar.EquipmentLoadouts.LoadLoadout(0).isDefined mustEqual true
avatar.EquipmentLoadouts.DeleteLoadout(0) avatar.EquipmentLoadouts.DeleteLoadout(0)
avatar.EquipmentLoadouts.LoadLoadout(0) mustEqual None avatar.EquipmentLoadouts.LoadLoadout(0).isEmpty mustEqual true
} }
"the fifth slot is the locker wrapped in an EquipmentSlot" in { "the fifth slot is the locker wrapped in an EquipmentSlot" in {

View file

@ -245,34 +245,34 @@ class PlayerTest extends Specification {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)
obj.Slot(-1).Equipment = wep obj.Slot(-1).Equipment = wep
obj.Slot(-1).Equipment mustEqual None obj.Slot(-1).Equipment.isEmpty mustEqual true
} }
"search for the smallest available slot in which to store equipment" in { "search for the smallest available slot in which to store equipment" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)
obj.Inventory.Resize(3,3) //fits one item obj.Inventory.Resize(3,3) //fits one item
obj.Fit(Tool(GlobalDefinitions.beamer)) mustEqual Some(0) obj.Fit(Tool(GlobalDefinitions.beamer)).contains(0) mustEqual true
obj.Fit(Tool(GlobalDefinitions.suppressor)) mustEqual Some(2) obj.Fit(Tool(GlobalDefinitions.suppressor)).contains(2) mustEqual true
val ammo = AmmoBox(GlobalDefinitions.bullet_9mm) val ammo = AmmoBox(GlobalDefinitions.bullet_9mm)
val ammo2 = AmmoBox(GlobalDefinitions.bullet_9mm) val ammo2 = AmmoBox(GlobalDefinitions.bullet_9mm)
val ammo3 = AmmoBox(GlobalDefinitions.bullet_9mm) val ammo3 = AmmoBox(GlobalDefinitions.bullet_9mm)
obj.Fit(ammo) mustEqual Some(6) obj.Fit(ammo).contains(6) mustEqual true
obj.Slot(6).Equipment = ammo obj.Slot(6).Equipment = ammo
obj.Fit(ammo2) mustEqual Some(Player.FreeHandSlot) obj.Fit(ammo2).contains(Player.FreeHandSlot) mustEqual true
obj.Slot(Player.FreeHandSlot).Equipment = ammo2 obj.Slot(Player.FreeHandSlot).Equipment = ammo2
obj.Fit(ammo3) mustEqual None obj.Fit(ammo3).isEmpty mustEqual true
} }
"can use their free hand to hold things" in { "can use their free hand to hold things" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)
val ammo = AmmoBox(GlobalDefinitions.bullet_9mm) val ammo = AmmoBox(GlobalDefinitions.bullet_9mm)
obj.FreeHand.Equipment mustEqual None obj.FreeHand.Equipment.isEmpty mustEqual true
obj.FreeHand.Equipment = ammo obj.FreeHand.Equipment = ammo
obj.FreeHand.Equipment mustEqual Some(ammo) obj.FreeHand.Equipment.contains(ammo) mustEqual true
} }
"can access the player's locker-space" in { "can access the player's locker-space" in {
@ -308,12 +308,12 @@ class PlayerTest extends Specification {
item item
} }
obj.Find(PlanetSideGUID(1)) mustEqual Some(0) //holsters obj.Find(PlanetSideGUID(1)).contains(0) mustEqual true //holsters
obj.Find(PlanetSideGUID(2)) mustEqual Some(4) //holsters, melee obj.Find(PlanetSideGUID(2)).contains(4) mustEqual true //holsters, melee
obj.Find(PlanetSideGUID(3)) mustEqual Some(6) //inventory obj.Find(PlanetSideGUID(3)).contains(6) mustEqual true //inventory
obj.Find(PlanetSideGUID(4)) mustEqual None //can not find in locker-space obj.Find(PlanetSideGUID(4)).isEmpty mustEqual true //can not find in locker-space
obj.Find(PlanetSideGUID(5)) mustEqual Some(Player.FreeHandSlot) //free hand obj.Find(PlanetSideGUID(5)).contains(Player.FreeHandSlot) mustEqual true //free hand
obj.Find(PlanetSideGUID(6)) mustEqual None //not here obj.Find(PlanetSideGUID(6)).isEmpty mustEqual true //not here
} }
"does equipment collision checking (are we already holding something there?)" in { "does equipment collision checking (are we already holding something there?)" in {
@ -437,20 +437,20 @@ class PlayerTest extends Specification {
"seat in a vehicle" in { "seat in a vehicle" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)
obj.VehicleSeated mustEqual None obj.VehicleSeated.isEmpty mustEqual true
obj.VehicleSeated = PlanetSideGUID(65) obj.VehicleSeated = PlanetSideGUID(65)
obj.VehicleSeated mustEqual Some(PlanetSideGUID(65)) obj.VehicleSeated.contains(PlanetSideGUID(65)) mustEqual true
obj.VehicleSeated = None obj.VehicleSeated = None
obj.VehicleSeated mustEqual None obj.VehicleSeated.isEmpty mustEqual true
} }
"own in a vehicle" in { "own in a vehicle" in {
val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5) val obj = TestPlayer("Chord", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Voice5)
obj.VehicleOwned mustEqual None obj.VehicleOwned.isEmpty mustEqual true
obj.VehicleOwned = PlanetSideGUID(65) obj.VehicleOwned = PlanetSideGUID(65)
obj.VehicleOwned mustEqual Some(PlanetSideGUID(65)) obj.VehicleOwned.contains(PlanetSideGUID(65)) mustEqual true
obj.VehicleOwned = None obj.VehicleOwned = None
obj.VehicleOwned mustEqual None obj.VehicleOwned.isEmpty mustEqual true
} }
"remember what zone he is in" in { "remember what zone he is in" in {

View file

@ -485,7 +485,7 @@ class PacketCodingActorITest extends ActorTest {
) )
val obj = DetailedPlayerData(pos, app, char, InventoryData(Nil), DrawnSlot.None) val obj = DetailedPlayerData(pos, app, char, InventoryData(Nil), DrawnSlot.None)
val pkt = MultiPacketBundle(List(ObjectCreateDetailedMessage(0x79, PlanetSideGUID(75), obj))) val pkt = MultiPacketBundle(List(ObjectCreateDetailedMessage(0x79, PlanetSideGUID(75), obj)))
val string_hex = hex"000900001879060000bc84b000000000000000000002040000097049006c006c006c004900490049006c006c006c0049006c0049006c006c0049006c006c006c0049006c006c00490084524000000000000000000000000000000020000007f35703fffffffffffffffffffffffffffffffc000000000000000000000000000000000000000190019000640000000000c800c80000000000000000000000000000000000000001c00042c54686c7000000000000000000000000000000000000000000000000000000000000000000000400e0" val string_hex = hex"00090000186c060000bc84b000000000000000000002040000097049006c006c006c004900490049006c006c006c0049006c0049006c006c0049006c006c006c0049006c006c00490084524000000000000000000000000000000020000007f35703fffffffffffffffffffffffffffffffc000000000000000000000000000000000000000190019000640000000000c800c80000000000000000000000000000000000000001c00042c54686c7000000000000000000000000000000000000000000000000000000000000100000000400e0"
"PacketCodingActor" should { "PacketCodingActor" should {
"bundle an r-originating packet into an l-facing SlottedMetaPacket byte stream data (SlottedMetaPacket)" in { "bundle an r-originating packet into an l-facing SlottedMetaPacket byte stream data (SlottedMetaPacket)" in {