Size

org.scalatest.enablers.Size
See theSize companion object
trait Size[T]

Supertrait for Size typeclasses.

Trait Size is a typeclass trait for objects that can be queried for size. Objects of type T for which an implicit Size[T] is available can be used with the should have size syntax. In other words, this trait enables you to use the size checking syntax with arbitrary objects. As an example, the following Bridge class:

scala> import org.scalatest._
import org.scalatest._

scala> import enablers.Size
import enablers.Size

scala> import Matchers._
import Matchers._

scala> case class Bridge(span: Int)
defined class Bridge

Out of the box you can't use the should have size syntax with Bridge, because ScalaTest doesn't know that a bridge's span means its size:

scala> val bridge = new Bridge(2000)
bridge: Bridge = Bridge(2000)

scala> bridge should have size 2000
<console>:34: error: could not find implicit value for
   parameter sz: org.scalatest.enablers.Size[Bridge]
     bridge should have size 2000
                        ^

You can teach this to ScalaTest, however, by defining an implicit Size[Bridge].

scala> implicit val sizeOfBridge: Size[Bridge] =
    |   new Size[Bridge] {
    |     def sizeOf(b: Bridge): Long = b.span
    |   }
sizeOfBridge: org.scalatest.enablers.Size[Bridge] = $anon$1@3fa27a4a

With the implicit Size[Bridge] in scope, you can now use ScalaTest's should have size syntax with Bridge instances:

scala> bridge should have size 2000
res4: org.scalatest.Assertion = Succeeded

scala> bridge should have size 2001
org.scalatest.exceptions.TestFailedException: Bridge(2000) had size 2000 instead of expected size 2001
 at org.scalatest.MatchersHelper$.newTestFailedException(MatchersHelper.scala:148)
 at org.scalatest.MatchersHelper$.indicateFailure(MatchersHelper.scala:366)
 at org.scalatest.Matchers$ResultOfHaveWordForExtent.size(Matchers.scala:2720)
 ... 43 elided

Attributes

Companion
object
Graph
Supertypes
class Object
trait Matchable
class Any

Members list

Value members

Abstract methods

def sizeOf(obj: T): Long

Returns the size of the passed object.

Returns the size of the passed object.

Value parameters

obj

the object whose size to return

Attributes

Returns

the size of the passed object