mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-02-24 17:13:43 +00:00
274 lines
12 KiB
Scala
274 lines
12 KiB
Scala
// Copyright (c) 2021 PSForever
|
|
package objects
|
|
|
|
import net.psforever.objects.{GlobalDefinitions, Player, Vehicle}
|
|
import net.psforever.objects.avatar.Avatar
|
|
import net.psforever.objects.serverobject.shuttle.OrbitalShuttle
|
|
import net.psforever.objects.vehicles.AccessPermissionGroup
|
|
import net.psforever.types.{CharacterSex, CharacterVoice, PlanetSideEmpire}
|
|
import org.specs2.mutable.Specification
|
|
|
|
class OrbitalShuttleTest extends Specification {
|
|
val testAvatar1 = Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
|
|
val testAvatar2 = Avatar(1, "TestCharacter2", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
|
|
val testAvatar3 = Avatar(2, "TestCharacter3", PlanetSideEmpire.TR, CharacterSex.Male, 0, CharacterVoice.Mute)
|
|
|
|
"OrbitalShuttle" should {
|
|
"construct (proper definition)" in {
|
|
new OrbitalShuttle(GlobalDefinitions.orbital_shuttle)
|
|
ok
|
|
}
|
|
|
|
"construct (any type of vehicle)" in {
|
|
new OrbitalShuttle(GlobalDefinitions.fury)
|
|
ok
|
|
}
|
|
|
|
"only use known mount points" in {
|
|
val fury = new OrbitalShuttle(GlobalDefinitions.fury)
|
|
fury.MountPoints.get(0).isEmpty mustEqual true
|
|
fury.MountPoints.get(1).nonEmpty mustEqual true
|
|
fury.MountPoints.get(2).nonEmpty mustEqual true
|
|
fury.MountPoints.get(3).isEmpty mustEqual true
|
|
|
|
val shuttle = new OrbitalShuttle(GlobalDefinitions.orbital_shuttle)
|
|
shuttle.MountPoints.get(0).isEmpty mustEqual true
|
|
shuttle.MountPoints.get(1).nonEmpty mustEqual true
|
|
shuttle.MountPoints.get(2).nonEmpty mustEqual true
|
|
shuttle.MountPoints.get(3).nonEmpty mustEqual true
|
|
shuttle.MountPoints.get(4).nonEmpty mustEqual true
|
|
shuttle.MountPoints.get(5).nonEmpty mustEqual true
|
|
shuttle.MountPoints.get(6).nonEmpty mustEqual true
|
|
shuttle.MountPoints.get(7).nonEmpty mustEqual true
|
|
shuttle.MountPoints.get(8).nonEmpty mustEqual true
|
|
shuttle.MountPoints.get(9).isEmpty mustEqual true
|
|
}
|
|
|
|
"will only discover unoccupied seats" in {
|
|
val fury1 = new OrbitalShuttle(GlobalDefinitions.fury)
|
|
val player1 = Player(testAvatar1)
|
|
fury1.GetSeatFromMountPoint(mountPoint = 1) match {
|
|
case Some(seatNumber) => fury1.Seat(seatNumber) match {
|
|
case Some(seat) => seat.mount(player1).contains(player1) mustEqual true
|
|
case _ => ko
|
|
}
|
|
case _ => ko
|
|
}
|
|
fury1.GetSeatFromMountPoint(mountPoint = 1).isEmpty mustEqual true //seat is occupied
|
|
|
|
//comparison with normal Vehicle
|
|
val fury2 = new Vehicle(GlobalDefinitions.fury)
|
|
val player2 = Player(testAvatar2)
|
|
fury2.GetSeatFromMountPoint(mountPoint = 1) match {
|
|
case Some(seatNumber) => fury2.Seat(seatNumber) match {
|
|
case Some(seat) => seat.mount(player2).contains(player2) mustEqual true
|
|
case _ => ko
|
|
}
|
|
case _ => ko
|
|
}
|
|
fury2.GetSeatFromMountPoint(mountPoint = 1).contains(0) mustEqual true //even though seat is occupied
|
|
}
|
|
|
|
"have a fixed number of normal seats (using normal definition)" in {
|
|
val fury1 = new OrbitalShuttle(GlobalDefinitions.fury)
|
|
fury1.Seats.size mustEqual 1
|
|
fury1.MountPoints.size mustEqual 2
|
|
val player1 = Player(testAvatar1)
|
|
fury1.GetSeatFromMountPoint(mountPoint = 1) match {
|
|
case Some(seatNumber) => fury1.Seat(seatNumber) match {
|
|
case Some(seat) => seat.mount(player1).contains(player1) mustEqual true
|
|
case _ => ko
|
|
}
|
|
case _ => ko
|
|
}
|
|
fury1.Seats.size mustEqual 1
|
|
fury1.MountPoints.size mustEqual 2
|
|
val player2 = Player(testAvatar2)
|
|
fury1.GetSeatFromMountPoint(mountPoint = 1).isEmpty mustEqual true
|
|
fury1.Seats.size mustEqual 1
|
|
fury1.MountPoints.size mustEqual 2
|
|
|
|
//congruent with normal Vehicle
|
|
val fury2 = new Vehicle(GlobalDefinitions.fury)
|
|
fury2.Seats.size mustEqual 1
|
|
fury2.MountPoints.size mustEqual 2
|
|
val player3 = Player(testAvatar3)
|
|
fury2.GetSeatFromMountPoint(mountPoint = 1) match {
|
|
case Some(seatNumber) => fury2.Seat(seatNumber) match {
|
|
case Some(seat) => seat.mount(player3).contains(player3) mustEqual true
|
|
case _ => ko
|
|
}
|
|
case _ => ko
|
|
}
|
|
fury2.Seats.size mustEqual 1
|
|
fury2.MountPoints.size mustEqual 2
|
|
fury2.GetSeatFromMountPoint(mountPoint = 1) match {
|
|
case Some(seatNumber) => fury2.Seat(seatNumber) match {
|
|
case Some(seat) => seat.mount(player2).contains(player2) mustEqual false
|
|
case _ => ko
|
|
}
|
|
case _ => ko
|
|
}
|
|
fury2.Seats.size mustEqual 1
|
|
fury2.MountPoints.size mustEqual 2
|
|
}
|
|
|
|
"create seats as needed (with appropriate definition)" in {
|
|
GlobalDefinitions.fury
|
|
.Seats(0).occupancy == 1 mustEqual true
|
|
GlobalDefinitions.orbital_shuttle
|
|
.Seats(0).occupancy > 1 mustEqual true
|
|
|
|
val shuttle1 = new OrbitalShuttle(GlobalDefinitions.orbital_shuttle)
|
|
shuttle1.Seats.size mustEqual 1
|
|
shuttle1.MountPoints.size mustEqual 8
|
|
val player1 = Player(testAvatar1)
|
|
shuttle1.GetSeatFromMountPoint(mountPoint = 1) match {
|
|
case Some(seatNumber) => shuttle1.Seat(seatNumber) match {
|
|
case Some(seat) => seat.mount(player1).contains(player1) mustEqual true
|
|
case _ => ko
|
|
}
|
|
case _ => ko
|
|
}
|
|
shuttle1.Seats.size mustEqual 1
|
|
shuttle1.MountPoints.size mustEqual 8
|
|
val player2 = Player(testAvatar2)
|
|
shuttle1.GetSeatFromMountPoint(mountPoint = 1) match {
|
|
case Some(seatNumber) => shuttle1.Seat(seatNumber) match {
|
|
case Some(seat) => seat.mount(player2).contains(player2) mustEqual true
|
|
case _ => ko
|
|
}
|
|
case _ => ko
|
|
}
|
|
shuttle1.Seats.size mustEqual 2
|
|
shuttle1.MountPoints.size mustEqual 8
|
|
|
|
//comparison with normal Vehicle
|
|
val shuttle2 = new Vehicle(GlobalDefinitions.orbital_shuttle)
|
|
shuttle2.Seats.size mustEqual 1
|
|
shuttle2.MountPoints.size mustEqual 8
|
|
val player3 = Player(testAvatar3)
|
|
shuttle2.GetSeatFromMountPoint(mountPoint = 1) match {
|
|
case Some(seatNumber) => shuttle2.Seat(seatNumber) match {
|
|
case Some(seat) => seat.mount(player3).contains(player3) mustEqual true
|
|
case _ => ko
|
|
}
|
|
case _ => ko
|
|
}
|
|
shuttle2.Seats.size mustEqual 1
|
|
shuttle2.MountPoints.size mustEqual 8
|
|
shuttle2.GetSeatFromMountPoint(mountPoint = 1) match {
|
|
case Some(seatNumber) => shuttle2.Seat(seatNumber) match {
|
|
case Some(seat) => seat.mount(player2).contains(player2) mustEqual false
|
|
case _ => ko
|
|
}
|
|
case _ => ko
|
|
}
|
|
shuttle2.Seats.size mustEqual 1
|
|
shuttle2.MountPoints.size mustEqual 8
|
|
}
|
|
|
|
"not create new seats out of order" in {
|
|
val shuttle = new OrbitalShuttle(GlobalDefinitions.orbital_shuttle)
|
|
val player1 = Player(testAvatar1)
|
|
shuttle.Seat(seatNumber = 0) match {
|
|
case Some(seat) => seat.mount(player1).contains(player1) mustEqual true
|
|
case _ => ko
|
|
}
|
|
val player2 = Player(testAvatar2)
|
|
shuttle.Seat(seatNumber = 2).isEmpty mustEqual true
|
|
}
|
|
|
|
"recognize proper seating arrangements" in {
|
|
val shuttle = new OrbitalShuttle(GlobalDefinitions.orbital_shuttle)
|
|
val player1 = Player(testAvatar1)
|
|
shuttle.Seat(seatNumber = 0) match {
|
|
case Some(seat) => seat.mount(player1).contains(player1) mustEqual true
|
|
case _ => ko
|
|
}
|
|
val player2 = Player(testAvatar2)
|
|
shuttle.Seat(seatNumber = 1) match {
|
|
case Some(seat) => seat.mount(player2).contains(player2) mustEqual true
|
|
case _ => ko
|
|
}
|
|
val player3 = Player(testAvatar3)
|
|
shuttle.Seat(seatNumber = 2) match {
|
|
case Some(seat) => seat.mount(player3).contains(player3) mustEqual true
|
|
case _ => ko
|
|
}
|
|
shuttle.PassengerInSeat(player1).contains(0) mustEqual true
|
|
shuttle.PassengerInSeat(player2).contains(1) mustEqual true
|
|
shuttle.PassengerInSeat(player3).contains(2) mustEqual true
|
|
}
|
|
|
|
"retain created seats after dismount" in {
|
|
val shuttle = new OrbitalShuttle(GlobalDefinitions.orbital_shuttle)
|
|
val player1 = Player(testAvatar1)
|
|
shuttle.Seat(seatNumber = 0) match {
|
|
case Some(seat) => seat.mount(player1).contains(player1) mustEqual true
|
|
case _ => ko
|
|
}
|
|
val player2 = Player(testAvatar2)
|
|
shuttle.Seat(seatNumber = 1) match {
|
|
case Some(seat) => seat.mount(player2).contains(player2) mustEqual true
|
|
case _ => ko
|
|
}
|
|
val player3 = Player(testAvatar3)
|
|
shuttle.Seat(seatNumber = 2) match {
|
|
case Some(seat) => seat.mount(player3).contains(player3) mustEqual true
|
|
case _ => ko
|
|
}
|
|
|
|
shuttle.Seats(0).isOccupied mustEqual true
|
|
shuttle.Seats(1).isOccupied mustEqual true
|
|
shuttle.Seats(2).isOccupied mustEqual true
|
|
shuttle.Seats.size mustEqual 3
|
|
//IMPORTANT TO NOTE
|
|
shuttle.GetSeatFromMountPoint(mountPoint = 1).contains(3) mustEqual true //new seat
|
|
|
|
shuttle.Seat(seatNumber = 1) match {
|
|
case Some(seat) => seat.unmount(player2).isEmpty mustEqual true
|
|
case _ => ko
|
|
}
|
|
shuttle.Seats(0).isOccupied mustEqual true
|
|
shuttle.Seats(1).isOccupied mustEqual false
|
|
shuttle.Seats(2).isOccupied mustEqual true
|
|
shuttle.Seats.size mustEqual 3
|
|
//IMPORTANT TO NOTE
|
|
shuttle.GetSeatFromMountPoint(mountPoint = 1).contains(1) mustEqual true //reuse newly unoccupied seat
|
|
}
|
|
|
|
"consider all seats as passenger seats" in {
|
|
val fury1 = Vehicle(GlobalDefinitions.fury)
|
|
fury1.SeatPermissionGroup(seatNumber = 0).contains(AccessPermissionGroup.Driver)
|
|
fury1.SeatPermissionGroup(seatNumber = 1).isEmpty mustEqual true
|
|
|
|
val fury2 = Vehicle(GlobalDefinitions.orbital_shuttle)
|
|
fury2.SeatPermissionGroup(seatNumber = 0).contains(AccessPermissionGroup.Driver)
|
|
fury2.SeatPermissionGroup(seatNumber = 1).isEmpty mustEqual true
|
|
|
|
val shuttle1 = new OrbitalShuttle(GlobalDefinitions.fury)
|
|
shuttle1.SeatPermissionGroup(seatNumber = 0).contains(AccessPermissionGroup.Passenger)
|
|
shuttle1.SeatPermissionGroup(seatNumber = 1).isEmpty mustEqual true
|
|
|
|
val shuttle2 = new OrbitalShuttle(GlobalDefinitions.orbital_shuttle)
|
|
shuttle2.SeatPermissionGroup(seatNumber = 0).contains(AccessPermissionGroup.Passenger)
|
|
shuttle2.SeatPermissionGroup(seatNumber = 1).contains(AccessPermissionGroup.Passenger) //seat does not exist yet
|
|
shuttle2.SeatPermissionGroup(seatNumber = 2).isEmpty mustEqual true
|
|
val player1 = Player(testAvatar1)
|
|
shuttle2.Seat(seatNumber = 0) match {
|
|
case Some(seat) => seat.mount(player1).contains(player1) mustEqual true
|
|
case _ => ko
|
|
}
|
|
val player2 = Player(testAvatar2)
|
|
shuttle2.Seat(seatNumber = 1) match {
|
|
case Some(seat) => seat.mount(player2).contains(player2) mustEqual true
|
|
case _ => ko
|
|
}
|
|
shuttle2.SeatPermissionGroup(seatNumber = 0).contains(AccessPermissionGroup.Passenger)
|
|
shuttle2.SeatPermissionGroup(seatNumber = 1).contains(AccessPermissionGroup.Passenger)
|
|
shuttle2.SeatPermissionGroup(seatNumber = 2).contains(AccessPermissionGroup.Passenger) //seat does not exist yet
|
|
shuttle2.SeatPermissionGroup(seatNumber = 3).isEmpty mustEqual true
|
|
}
|
|
}
|
|
}
|