Persistence #1 featuring quill (#508)

* Add .scalafmt.conf

* Adopt quill for database access

* Removed postgresql-async
* Refactored all instances of database access
* Creating duplicate characters of the same account is no longer possible
* Rewrote large parts of LoginSessionActor

* Implement migrations

* Move overrides into subdirectory

* Make usernames case insensitive

* Use LOWER(?) comparison instead of storing lowercased username

* import scala.util.{Success, Failure}

* Add config and joda-time dependencies

* Add sbt-scalafmt

* Use defaultWithAlign scalafmt preset

* Format all

* Add scalafix

* Remove unused imports

* Don't lowercase username when inserting

* Update readme

* Listen on worldserver.Hostname address

* Remove database test on startup

It could fail when the global thread pool is busy loading zone
maps. Migrations run on the main thread and also serve the
purpose of verifying the database configuration so it's fine to
remove the test altogether.

* Refactor chat message handlers, zones

What started as a small change to how zones are stored turned
into a pretty big effort of refactoring the chat message handler.
The !hack command was removed, the /capturebase commandwas added.

* Expose db ports in docker-compose.yml

* Silence property override log

* Rework configuration

* Unify configuration using the typesafe.config library
* Add configuration option for public address
* Configuration is now loaded from application.conf rather than worldserver.ini
* Refactor PsLogin and remove unnecessary logging
* Move pslogin into net.psforever.pslogin namespace

* Fix coverage
This commit is contained in:
Jakob Gillich 2020-07-14 05:54:05 +02:00 committed by GitHub
parent 88b194fde2
commit e0defe8240
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
850 changed files with 144487 additions and 47476 deletions

View file

@ -9,14 +9,12 @@ import net.psforever.types.PlanetSideGUID
import org.specs2.mutable._
import scala.collection.mutable.ListBuffer
import scala.util.Success
import scala.util.{Success, Failure}
class InventoryTest extends Specification {
val
bullet9mmBox1 = AmmoBox(bullet_9mm)
val bullet9mmBox1 = AmmoBox(bullet_9mm)
bullet9mmBox1.GUID = PlanetSideGUID(1)
val
bullet9mmBox2 = AmmoBox(bullet_9mm)
val bullet9mmBox2 = AmmoBox(bullet_9mm)
bullet9mmBox2.GUID = PlanetSideGUID(2)
"InventoryDisarrayException" should {
@ -33,67 +31,67 @@ class InventoryTest extends Specification {
"GridInventory" should {
"construct" in {
val obj : GridInventory = GridInventory()
val obj: GridInventory = GridInventory()
obj.TotalCapacity mustEqual 1
obj.Capacity mustEqual 1
}
"resize" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj.TotalCapacity mustEqual 54
obj.Capacity mustEqual 54
obj.Size mustEqual 0
}
"check for collision with inventory border" in {
val obj : GridInventory = GridInventory(3, 3)
val obj: GridInventory = GridInventory(3, 3)
//safe
obj.CheckCollisionsAsList(0, 3, 3) mustEqual Success(Nil)
//right
obj.CheckCollisionsAsList(-1, 3, 3) match {
case scala.util.Failure(fail) =>
case Failure(fail) =>
fail.isInstanceOf[IndexOutOfBoundsException] mustEqual true
case _ => ko
}
//left
obj.CheckCollisionsAsList(1, 3, 3) match {
case scala.util.Failure(fail) =>
case Failure(fail) =>
fail.isInstanceOf[IndexOutOfBoundsException] mustEqual true
case _ => ko
}
//bottom
obj.CheckCollisionsAsList(3, 3, 3) match {
case scala.util.Failure(fail) =>
case Failure(fail) =>
fail.isInstanceOf[IndexOutOfBoundsException] mustEqual true
case _ => ko
}
}
"check for item collision (right insert)" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj += 0 -> bullet9mmBox1
obj.Capacity mustEqual 45
val w = bullet9mmBox2.Tile.Width
val h = bullet9mmBox2.Tile.Height
val w = bullet9mmBox2.Tile.Width
val h = bullet9mmBox2.Tile.Height
val list0 = obj.CheckCollisionsAsList(0, w, h)
obj.CheckCollisionsAsList(0, w, h) match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list1 = obj.CheckCollisionsAsList(1, w, h)
list1 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list2 = obj.CheckCollisionsAsList(2, w, h)
list2 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list3 = obj.CheckCollisionsAsList(3, w, h)
list3 match {
case scala.util.Success(list) => list.isEmpty mustEqual true
case scala.util.Failure(_) => ko
case Success(list) => list.isEmpty mustEqual true
case Failure(_) => ko
}
obj.CheckCollisionsAsGrid(0, w, h) mustEqual list0
obj.CheckCollisionsAsGrid(1, w, h) mustEqual list1
@ -104,30 +102,30 @@ class InventoryTest extends Specification {
}
"check for item collision (left insert)" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj += 3 -> bullet9mmBox1
obj.Capacity mustEqual 45
val w = bullet9mmBox2.Tile.Width
val h = bullet9mmBox2.Tile.Height
val w = bullet9mmBox2.Tile.Width
val h = bullet9mmBox2.Tile.Height
val list0 = obj.CheckCollisionsAsList(3, w, h)
list0 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list1 = obj.CheckCollisionsAsList(2, w, h)
list1 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list2 = obj.CheckCollisionsAsList(1, w, h)
list2 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list3 = obj.CheckCollisionsAsList(0, w, h)
list3 match {
case scala.util.Success(list) => list.isEmpty mustEqual true
case scala.util.Failure(_) => ko
case Success(list) => list.isEmpty mustEqual true
case Failure(_) => ko
}
obj.CheckCollisionsAsGrid(3, w, h) mustEqual list0
obj.CheckCollisionsAsGrid(2, w, h) mustEqual list1
@ -138,30 +136,30 @@ class InventoryTest extends Specification {
}
"check for item collision (below insert)" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj += 0 -> bullet9mmBox1
obj.Capacity mustEqual 45
val w = bullet9mmBox2.Tile.Width
val h = bullet9mmBox2.Tile.Height
val w = bullet9mmBox2.Tile.Width
val h = bullet9mmBox2.Tile.Height
val list0 = obj.CheckCollisionsAsList(0, w, h)
list0 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list1 = obj.CheckCollisionsAsList(9, w, h)
list1 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list2 = obj.CheckCollisionsAsList(18, w, h)
list2 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list3 = obj.CheckCollisionsAsList(27, w, h)
list3 match {
case scala.util.Success(list) => list.isEmpty mustEqual true
case scala.util.Failure(_) => ko
case Success(list) => list.isEmpty mustEqual true
case Failure(_) => ko
}
obj.CheckCollisionsAsGrid(0, w, h) mustEqual list0
obj.CheckCollisionsAsGrid(9, w, h) mustEqual list1
@ -172,30 +170,30 @@ class InventoryTest extends Specification {
}
"check for item collision (above insert)" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj += 27 -> bullet9mmBox1
obj.Capacity mustEqual 45
val w = bullet9mmBox2.Tile.Width
val h = bullet9mmBox2.Tile.Height
val w = bullet9mmBox2.Tile.Width
val h = bullet9mmBox2.Tile.Height
val list0 = obj.CheckCollisionsAsList(27, w, h)
list0 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list1 = obj.CheckCollisionsAsList(18, w, h)
list1 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list2 = obj.CheckCollisionsAsList(9, w, h)
list2 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list3 = obj.CheckCollisionsAsList(0, w, h)
list3 match {
case scala.util.Success(list) => list.isEmpty mustEqual true
case scala.util.Failure(_) => ko
case Success(list) => list.isEmpty mustEqual true
case Failure(_) => ko
}
obj.CheckCollisionsAsGrid(27, w, h) mustEqual list0
obj.CheckCollisionsAsGrid(18, w, h) mustEqual list1
@ -218,50 +216,50 @@ class InventoryTest extends Specification {
- - - - - - - - - - - -
- - - - - - - - - - - -
*/
val obj : GridInventory = GridInventory(12, 9)
val obj: GridInventory = GridInventory(12, 9)
obj += 39 -> bullet9mmBox1
obj.Capacity mustEqual 99 //108 - 9
val w = bullet9mmBox2.Tile.Width
val h = bullet9mmBox2.Tile.Height
val w = bullet9mmBox2.Tile.Width
val h = bullet9mmBox2.Tile.Height
val list0 = obj.CheckCollisionsAsList(0, w, h)
list0 match {
case scala.util.Success(list) => list.isEmpty mustEqual true
case scala.util.Failure(_) => ko
case Success(list) => list.isEmpty mustEqual true
case Failure(_) => ko
}
val list1 = obj.CheckCollisionsAsList(13, w, h)
list1 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list2 = obj.CheckCollisionsAsList(6, w, h)
list2 match {
case scala.util.Success(list) =>list.isEmpty mustEqual true
case scala.util.Failure(_) => ko
case Success(list) => list.isEmpty mustEqual true
case Failure(_) => ko
}
val list3 = obj.CheckCollisionsAsList(17, w, h)
list3 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list4 = obj.CheckCollisionsAsList(72, w, h)
list4 match {
case scala.util.Success(list) => list.isEmpty mustEqual true
case scala.util.Failure(_) => ko
case Success(list) => list.isEmpty mustEqual true
case Failure(_) => ko
}
val list5 = obj.CheckCollisionsAsList(61, w, h)
list5 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
val list6 = obj.CheckCollisionsAsList(78, w, h)
list6 match {
case scala.util.Success(list) => list.isEmpty mustEqual true
case scala.util.Failure(_) => ko
case Success(list) => list.isEmpty mustEqual true
case Failure(_) => ko
}
val list7 = obj.CheckCollisionsAsList(65, w, h)
list7 match {
case scala.util.Success(list) => list.length mustEqual 1
case scala.util.Failure(_) => ko
case Success(list) => list.length mustEqual 1
case Failure(_) => ko
}
obj.CheckCollisionsAsGrid(0, w, h) mustEqual list0
obj.CheckCollisionsAsGrid(13, w, h) mustEqual list1
@ -276,7 +274,7 @@ class InventoryTest extends Specification {
}
"insert item" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj.CheckCollisions(23, bullet9mmBox1) mustEqual Success(Nil)
obj += 2 -> bullet9mmBox1
obj.TotalCapacity mustEqual 54
@ -288,7 +286,7 @@ class InventoryTest extends Specification {
}
"not insert into an invalid slot (n < 0)" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj.Capacity mustEqual 54
obj.Size mustEqual 0
obj.Insert(-1, bullet9mmBox1) must throwA[IndexOutOfBoundsException]
@ -297,7 +295,7 @@ class InventoryTest extends Specification {
}
"not insert into an invalid slot (n > capacity)" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj.Capacity mustEqual 54
obj.Size mustEqual 0
obj.Insert(55, bullet9mmBox1) must throwA[IndexOutOfBoundsException]
@ -306,7 +304,7 @@ class InventoryTest extends Specification {
}
"block insertion if item collision" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj += 0 -> bullet9mmBox1
obj.Capacity mustEqual 45
obj.hasItem(PlanetSideGUID(1)).contains(bullet9mmBox1) mustEqual true
@ -315,44 +313,44 @@ class InventoryTest extends Specification {
}
"insert items quickly (risk overwriting entries)" in {
val obj : GridInventory = GridInventory(6, 6)
val obj: GridInventory = GridInventory(6, 6)
(obj += 0 -> bullet9mmBox1) mustEqual true
val collision1 = obj.CheckCollisions(0,1,1)
obj.CheckCollisions(1,1,1) mustEqual collision1
obj.CheckCollisions(2,1,1) mustEqual collision1
obj.CheckCollisions(6,1,1) mustEqual collision1
obj.CheckCollisions(7,1,1) mustEqual collision1
obj.CheckCollisions(8,1,1) mustEqual collision1
obj.CheckCollisions(12,1,1) mustEqual collision1
obj.CheckCollisions(13,1,1) mustEqual collision1
obj.CheckCollisions(14,1,1) mustEqual collision1
val collision1 = obj.CheckCollisions(0, 1, 1)
obj.CheckCollisions(1, 1, 1) mustEqual collision1
obj.CheckCollisions(2, 1, 1) mustEqual collision1
obj.CheckCollisions(6, 1, 1) mustEqual collision1
obj.CheckCollisions(7, 1, 1) mustEqual collision1
obj.CheckCollisions(8, 1, 1) mustEqual collision1
obj.CheckCollisions(12, 1, 1) mustEqual collision1
obj.CheckCollisions(13, 1, 1) mustEqual collision1
obj.CheckCollisions(14, 1, 1) mustEqual collision1
(obj += 7 -> bullet9mmBox2) mustEqual false //can not insert overlapping object
obj.CheckCollisions(0,1,1) mustEqual collision1
obj.CheckCollisions(1,1,1) mustEqual collision1
obj.CheckCollisions(2,1,1) mustEqual collision1
obj.CheckCollisions(6,1,1) mustEqual collision1
obj.CheckCollisions(7,1,1) mustEqual collision1
obj.CheckCollisions(8,1,1) mustEqual collision1
obj.CheckCollisions(12,1,1) mustEqual collision1
obj.CheckCollisions(13,1,1) mustEqual collision1
obj.CheckCollisions(14,1,1) mustEqual collision1
obj.CheckCollisions(0, 1, 1) mustEqual collision1
obj.CheckCollisions(1, 1, 1) mustEqual collision1
obj.CheckCollisions(2, 1, 1) mustEqual collision1
obj.CheckCollisions(6, 1, 1) mustEqual collision1
obj.CheckCollisions(7, 1, 1) mustEqual collision1
obj.CheckCollisions(8, 1, 1) mustEqual collision1
obj.CheckCollisions(12, 1, 1) mustEqual collision1
obj.CheckCollisions(13, 1, 1) mustEqual collision1
obj.CheckCollisions(14, 1, 1) mustEqual collision1
obj.InsertQuickly(7, bullet9mmBox2) mustEqual true //overwrite
val collision2 = obj.CheckCollisions(7,1,1)
obj.CheckCollisions(0,1,1) mustEqual collision1
obj.CheckCollisions(1,1,1) mustEqual collision1
obj.CheckCollisions(2,1,1) mustEqual collision1
obj.CheckCollisions(6,1,1) mustEqual collision1
obj.CheckCollisions(7,1,1) mustEqual collision2
obj.CheckCollisions(8,1,1) mustEqual collision2
obj.CheckCollisions(12,1,1) mustEqual collision1
obj.CheckCollisions(13,1,1) mustEqual collision2
obj.CheckCollisions(14,1,1) mustEqual collision2
val collision2 = obj.CheckCollisions(7, 1, 1)
obj.CheckCollisions(0, 1, 1) mustEqual collision1
obj.CheckCollisions(1, 1, 1) mustEqual collision1
obj.CheckCollisions(2, 1, 1) mustEqual collision1
obj.CheckCollisions(6, 1, 1) mustEqual collision1
obj.CheckCollisions(7, 1, 1) mustEqual collision2
obj.CheckCollisions(8, 1, 1) mustEqual collision2
obj.CheckCollisions(12, 1, 1) mustEqual collision1
obj.CheckCollisions(13, 1, 1) mustEqual collision2
obj.CheckCollisions(14, 1, 1) mustEqual collision2
}
"clear all items" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj += 2 -> bullet9mmBox1
obj.Size mustEqual 1
obj.hasItem(PlanetSideGUID(1)).contains(bullet9mmBox1) mustEqual true
@ -362,7 +360,7 @@ class InventoryTest extends Specification {
}
"remove item" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj += 0 -> bullet9mmBox1
obj.hasItem(PlanetSideGUID(1)).contains(bullet9mmBox1) mustEqual true
obj -= PlanetSideGUID(1)
@ -372,17 +370,17 @@ class InventoryTest extends Specification {
}
"fail to remove from an invalid slot (n < 0)" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
(obj -= -1) mustEqual false
}
"fail to remove from an invalid slot (n > capacity)" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
(obj -= 55) mustEqual false
}
"unblock insertion on item removal" in {
val obj : GridInventory = GridInventory(9, 6)
val obj: GridInventory = GridInventory(9, 6)
obj.CheckCollisions(23, bullet9mmBox1) mustEqual Success(Nil)
obj += 23 -> bullet9mmBox1
obj.hasItem(PlanetSideGUID(1)).contains(bullet9mmBox1) mustEqual true
@ -402,8 +400,8 @@ class InventoryTest extends Specification {
val sampleDef63 = new SimpleItemDefinition(149)
sampleDef63.Tile = InventoryTile.Tile63
val obj : GridInventory = GridInventory(9, 9)
obj += 0 -> SimpleItem(sampleDef22)
val obj: GridInventory = GridInventory(9, 9)
obj += 0 -> SimpleItem(sampleDef22)
obj += 20 -> SimpleItem(sampleDef63)
obj += 56 -> SimpleItem(sampleDef33)
obj.Fit(InventoryTile.Tile33) match {
@ -425,7 +423,7 @@ class InventoryTest extends Specification {
val sampleDef4 = new SimpleItemDefinition(149)
sampleDef4.Tile = InventoryTile.Tile63
val list : ListBuffer[InventoryItem] = ListBuffer()
val list: ListBuffer[InventoryItem] = ListBuffer()
list += new InventoryItem(SimpleItem(sampleDef2), -1)
list += new InventoryItem(SimpleItem(sampleDef3), -1)
list += new InventoryItem(SimpleItem(sampleDef1), -1)
@ -434,7 +432,7 @@ class InventoryTest extends Specification {
list += new InventoryItem(SimpleItem(sampleDef4), -1)
list += new InventoryItem(SimpleItem(sampleDef2), -1)
list += new InventoryItem(SimpleItem(sampleDef3), -1)
val obj : GridInventory = GridInventory(9, 9)
val obj: GridInventory = GridInventory(9, 9)
val (elements, out) = GridInventory.recoverInventory(list.toList, obj)
elements.length mustEqual 6
@ -443,13 +441,13 @@ class InventoryTest extends Specification {
obj.Insert(item.start, item.obj) mustEqual true
})
out.head.Definition.Tile mustEqual InventoryTile.Tile22 //did not fit
out(1).Definition.Tile mustEqual InventoryTile.Tile22 //did not fit
out(1).Definition.Tile mustEqual InventoryTile.Tile22 //did not fit
ok
}
"confirm integrity of inventory as a grid" in {
val obj : GridInventory = GridInventory(6, 6)
(obj += 0 -> bullet9mmBox1) mustEqual true
val obj: GridInventory = GridInventory(6, 6)
(obj += 0 -> bullet9mmBox1) mustEqual true
(obj += 21 -> bullet9mmBox2) mustEqual true
//artificially pollute the inventory grid-space
obj.SetCells(10, 1, 1, 3)
@ -458,8 +456,8 @@ class InventoryTest extends Specification {
}
"confirm integrity of inventory as a list (no overlap)" in {
val obj : GridInventory = GridInventory(9, 9)
val gun = Tool(suppressor)
val obj: GridInventory = GridInventory(9, 9)
val gun = Tool(suppressor)
obj.InsertQuickly(0, gun)
obj.InsertQuickly(33, bullet9mmBox1)
//nothing should overlap
@ -468,9 +466,9 @@ class InventoryTest extends Specification {
}
"confirm integrity of inventory as a list (normal overlap)" in {
val obj : GridInventory = GridInventory(9, 9)
val gun = Tool(suppressor)
val bullet9mmBox3 = AmmoBox(bullet_9mm)
val obj: GridInventory = GridInventory(9, 9)
val gun = Tool(suppressor)
val bullet9mmBox3 = AmmoBox(bullet_9mm)
obj.InsertQuickly(0, gun)
obj.InsertQuickly(18, bullet9mmBox1)
obj.InsertQuickly(38, bullet9mmBox2)
@ -482,13 +480,11 @@ class InventoryTest extends Specification {
lists.size mustEqual 2
lists.foreach { list =>
val out = list.map { _.obj }
if(out.size == 2 && out.contains(gun) && out.contains(bullet9mmBox1)) {
if (out.size == 2 && out.contains(gun) && out.contains(bullet9mmBox1)) {
ok
}
else if(out.size == 2 && out.contains(bullet9mmBox1) && out.contains(bullet9mmBox2)) {
} else if (out.size == 2 && out.contains(bullet9mmBox1) && out.contains(bullet9mmBox2)) {
ok
}
else {
} else {
ko
}
}
@ -496,10 +492,10 @@ class InventoryTest extends Specification {
}
"confirm integrity of inventory as a list (triple overlap)" in {
val obj : GridInventory = GridInventory(9, 9)
val gun = Tool(suppressor)
val bullet9mmBox3 = AmmoBox(bullet_9mm)
val bullet9mmBox4 = AmmoBox(bullet_9mm)
val obj: GridInventory = GridInventory(9, 9)
val gun = Tool(suppressor)
val bullet9mmBox3 = AmmoBox(bullet_9mm)
val bullet9mmBox4 = AmmoBox(bullet_9mm)
obj.InsertQuickly(0, gun)
obj.InsertQuickly(18, bullet9mmBox1)
obj.InsertQuickly(36, bullet9mmBox2)
@ -512,13 +508,13 @@ class InventoryTest extends Specification {
lists.size mustEqual 2
lists.foreach { list =>
val out = list.map { _.obj }
if(out.size == 2 && out.contains(gun) && out.contains(bullet9mmBox1)) {
if (out.size == 2 && out.contains(gun) && out.contains(bullet9mmBox1)) {
ok
}
else if(out.size == 3 && out.contains(bullet9mmBox1) && out.contains(bullet9mmBox2) && out.contains(bullet9mmBox3)) {
} else if (
out.size == 3 && out.contains(bullet9mmBox1) && out.contains(bullet9mmBox2) && out.contains(bullet9mmBox3)
) {
ok
}
else {
} else {
ko
}
}
@ -528,14 +524,14 @@ class InventoryTest extends Specification {
"InventoryEquiupmentSlot" should {
"insert, collide, insert" in {
val obj : GridInventory = GridInventory(7, 7)
val obj: GridInventory = GridInventory(7, 7)
obj.Slot(16).Equipment = bullet9mmBox1
//confirm all squares
obj.Slot( 8).Equipment.nonEmpty mustEqual false
obj.Slot( 9).Equipment.nonEmpty mustEqual false
obj.Slot( 10).Equipment.nonEmpty mustEqual false
obj.Slot( 11).Equipment.nonEmpty mustEqual false
obj.Slot( 12).Equipment.nonEmpty mustEqual false
obj.Slot(8).Equipment.nonEmpty mustEqual false
obj.Slot(9).Equipment.nonEmpty mustEqual false
obj.Slot(10).Equipment.nonEmpty mustEqual false
obj.Slot(11).Equipment.nonEmpty mustEqual false
obj.Slot(12).Equipment.nonEmpty mustEqual false
//
obj.Slot(15).Equipment.nonEmpty mustEqual false
obj.Slot(16).Equipment.nonEmpty mustEqual true
@ -563,11 +559,11 @@ class InventoryTest extends Specification {
//
//remove
obj.Slot(16).Equipment = None
obj.Slot( 8).Equipment.nonEmpty mustEqual false
obj.Slot( 9).Equipment.nonEmpty mustEqual false
obj.Slot( 10).Equipment.nonEmpty mustEqual false
obj.Slot( 11).Equipment.nonEmpty mustEqual false
obj.Slot( 12).Equipment.nonEmpty mustEqual false
obj.Slot(8).Equipment.nonEmpty mustEqual false
obj.Slot(9).Equipment.nonEmpty mustEqual false
obj.Slot(10).Equipment.nonEmpty mustEqual false
obj.Slot(11).Equipment.nonEmpty mustEqual false
obj.Slot(12).Equipment.nonEmpty mustEqual false
//
obj.Slot(15).Equipment.nonEmpty mustEqual false
obj.Slot(16).Equipment.nonEmpty mustEqual false
@ -594,11 +590,11 @@ class InventoryTest extends Specification {
obj.Slot(40).Equipment.nonEmpty mustEqual false
//insert again
obj.Slot(16).Equipment = bullet9mmBox2
obj.Slot( 8).Equipment.nonEmpty mustEqual false
obj.Slot( 9).Equipment.nonEmpty mustEqual false
obj.Slot( 10).Equipment.nonEmpty mustEqual false
obj.Slot( 11).Equipment.nonEmpty mustEqual false
obj.Slot( 12).Equipment.nonEmpty mustEqual false
obj.Slot(8).Equipment.nonEmpty mustEqual false
obj.Slot(9).Equipment.nonEmpty mustEqual false
obj.Slot(10).Equipment.nonEmpty mustEqual false
obj.Slot(11).Equipment.nonEmpty mustEqual false
obj.Slot(12).Equipment.nonEmpty mustEqual false
//
obj.Slot(15).Equipment.nonEmpty mustEqual false
obj.Slot(16).Equipment.nonEmpty mustEqual true
@ -626,11 +622,11 @@ class InventoryTest extends Specification {
//
//remove
obj.Slot(16).Equipment = None
obj.Slot( 8).Equipment.nonEmpty mustEqual false
obj.Slot( 9).Equipment.nonEmpty mustEqual false
obj.Slot( 10).Equipment.nonEmpty mustEqual false
obj.Slot( 11).Equipment.nonEmpty mustEqual false
obj.Slot( 12).Equipment.nonEmpty mustEqual false
obj.Slot(8).Equipment.nonEmpty mustEqual false
obj.Slot(9).Equipment.nonEmpty mustEqual false
obj.Slot(10).Equipment.nonEmpty mustEqual false
obj.Slot(11).Equipment.nonEmpty mustEqual false
obj.Slot(12).Equipment.nonEmpty mustEqual false
//
obj.Slot(15).Equipment.nonEmpty mustEqual false
obj.Slot(16).Equipment.nonEmpty mustEqual false