mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-01-26 13:24:45 +00:00
186 lines
6.4 KiB
Scala
186 lines
6.4 KiB
Scala
// Copyright (c) 2017 PSForever
|
|
package objects
|
|
|
|
import net.psforever.objects.guid.key.{LoanedKey, SecureKey}
|
|
import net.psforever.objects.guid.AvailabilityPolicy
|
|
import org.specs2.mutable.Specification
|
|
|
|
class NumberSourceTest extends Specification {
|
|
import net.psforever.objects.entity.IdentifiableEntity
|
|
private class TestClass extends IdentifiableEntity
|
|
|
|
"LimitedNumberSource" should {
|
|
import net.psforever.objects.guid.source.LimitedNumberSource
|
|
"construct" in {
|
|
val obj = LimitedNumberSource(25)
|
|
obj.Size mustEqual 26
|
|
obj.CountAvailable mustEqual 26
|
|
obj.CountUsed mustEqual 0
|
|
}
|
|
|
|
"get a number" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val result : Option[LoanedKey] = obj.Available(5)
|
|
result.isDefined mustEqual true
|
|
result.get.GUID mustEqual 5
|
|
result.get.Policy mustEqual AvailabilityPolicy.Leased
|
|
result.get.Object mustEqual None
|
|
obj.Size mustEqual 26
|
|
obj.CountAvailable mustEqual 25
|
|
obj.CountUsed mustEqual 1
|
|
}
|
|
|
|
"assign the number" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val result : Option[LoanedKey] = obj.Available(5)
|
|
result.isDefined mustEqual true
|
|
result.get.Object = new TestClass()
|
|
ok
|
|
}
|
|
|
|
"return a number (unused)" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val result : Option[LoanedKey] = obj.Available(5)
|
|
result.isDefined mustEqual true
|
|
result.get.GUID mustEqual 5
|
|
obj.CountUsed mustEqual 1
|
|
val ret = obj.Return(result.get)
|
|
ret mustEqual None
|
|
obj.CountUsed mustEqual 0
|
|
}
|
|
|
|
"return a number (assigned)" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val test = new TestClass()
|
|
val result : Option[LoanedKey] = obj.Available(5)
|
|
result.isDefined mustEqual true
|
|
result.get.GUID mustEqual 5
|
|
result.get.Object = test
|
|
obj.CountUsed mustEqual 1
|
|
val ret = obj.Return(result.get)
|
|
ret mustEqual Some(test)
|
|
obj.CountUsed mustEqual 0
|
|
}
|
|
|
|
"restrict a number (unassigned)" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val result : Option[LoanedKey] = obj.Restrict(5)
|
|
result.isDefined mustEqual true
|
|
result.get.GUID mustEqual 5
|
|
result.get.Policy mustEqual AvailabilityPolicy.Restricted
|
|
result.get.Object mustEqual None
|
|
}
|
|
|
|
"restrict a number (assigned + multiple assignments)" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val test1 = new TestClass()
|
|
val test2 = new TestClass()
|
|
val result : Option[LoanedKey] = obj.Restrict(5)
|
|
result.get.GUID mustEqual 5
|
|
result.get.Policy mustEqual AvailabilityPolicy.Restricted
|
|
result.get.Object mustEqual None
|
|
result.get.Object = None //assignment 1
|
|
result.get.Object mustEqual None //still unassigned
|
|
result.get.Object = test1 //assignment 2
|
|
result.get.Object mustEqual Some(test1)
|
|
result.get.Object = test2 //assignment 3
|
|
result.get.Object mustEqual Some(test1) //same as above
|
|
}
|
|
|
|
"return a restricted number (correctly fail)" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val test = new TestClass()
|
|
val result : Option[LoanedKey] = obj.Restrict(5)
|
|
result.get.GUID mustEqual 5
|
|
result.get.Policy mustEqual AvailabilityPolicy.Restricted
|
|
result.get.Object = test
|
|
|
|
obj.Return(5)
|
|
val result2 : Option[SecureKey] = obj.Get(5)
|
|
result2.get.GUID mustEqual 5
|
|
result2.get.Policy mustEqual AvailabilityPolicy.Restricted
|
|
result2.get.Object mustEqual Some(test)
|
|
}
|
|
|
|
"restrict a previously-assigned number" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val test = new TestClass()
|
|
val result1 : Option[LoanedKey] = obj.Available(5)
|
|
result1.isDefined mustEqual true
|
|
result1.get.Policy mustEqual AvailabilityPolicy.Leased
|
|
result1.get.Object = test
|
|
val result2 : Option[LoanedKey] = obj.Restrict(5)
|
|
result2.isDefined mustEqual true
|
|
result2.get.Policy mustEqual AvailabilityPolicy.Restricted
|
|
result2.get.Object mustEqual Some(test)
|
|
}
|
|
|
|
"check a number (not previously gotten)" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val result2 : Option[SecureKey] = obj.Get(5)
|
|
result2.get.GUID mustEqual 5
|
|
result2.get.Policy mustEqual AvailabilityPolicy.Available
|
|
result2.get.Object mustEqual None
|
|
}
|
|
|
|
"check a number (previously gotten)" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val result : Option[LoanedKey] = obj.Available(5)
|
|
result.isDefined mustEqual true
|
|
result.get.GUID mustEqual 5
|
|
result.get.Policy mustEqual AvailabilityPolicy.Leased
|
|
result.get.Object mustEqual None
|
|
val result2 : Option[SecureKey] = obj.Get(5)
|
|
result2.get.GUID mustEqual 5
|
|
result2.get.Policy mustEqual AvailabilityPolicy.Leased
|
|
result2.get.Object mustEqual None
|
|
}
|
|
|
|
"check a number (assigned)" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val result : Option[LoanedKey] = obj.Available(5)
|
|
result.isDefined mustEqual true
|
|
result.get.GUID mustEqual 5
|
|
result.get.Policy mustEqual AvailabilityPolicy.Leased
|
|
result.get.Object = new TestClass()
|
|
val result2 : Option[SecureKey] = obj.Get(5)
|
|
result2.get.GUID mustEqual 5
|
|
result2.get.Policy mustEqual AvailabilityPolicy.Leased
|
|
result2.get.Object mustEqual result.get.Object
|
|
}
|
|
|
|
"check a number (assigned and returned)" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val test = new TestClass()
|
|
val result : Option[LoanedKey] = obj.Available(5)
|
|
result.get.Policy mustEqual AvailabilityPolicy.Leased
|
|
result.get.Object = test
|
|
val result2 : Option[SecureKey] = obj.Get(5)
|
|
result2.get.Policy mustEqual AvailabilityPolicy.Leased
|
|
result2.get.Object.get mustEqual test
|
|
obj.Return(5) mustEqual Some(test)
|
|
val result3 : Option[SecureKey] = obj.Get(5)
|
|
result3.get.Policy mustEqual AvailabilityPolicy.Available
|
|
result3.get.Object mustEqual None
|
|
}
|
|
|
|
"clear" in {
|
|
val obj = LimitedNumberSource(25)
|
|
val test1 = new TestClass()
|
|
val test2 = new TestClass()
|
|
obj.Available(5) //no assignment
|
|
obj.Available(10).get.Object = test1
|
|
obj.Available(15).get.Object = test2
|
|
obj.Restrict(15)
|
|
obj.Restrict(20).get.Object = test1
|
|
obj.CountUsed mustEqual 4
|
|
|
|
val list : List[IdentifiableEntity] = obj.Clear()
|
|
obj.CountUsed mustEqual 0
|
|
list.size mustEqual 3
|
|
list.count(obj => obj == test1) mustEqual 2
|
|
list.count(obj => obj == test2) mustEqual 1
|
|
}
|
|
}
|
|
}
|