Provides ScalaTest's “explicitly DSL,” which facilitates the explicit specification of an Equality[T]
or a Uniformity[T]
where Equality[T]
is taken implicitly.
The Explicitly DSL can be used with the ===
and !==
operators of Scalactic as well as the should
equal
, be
, contain
, and ===
syntax of ScalaTest matchers.
If you want to customize equality for a type in general, you would likely want to place an implicit Equality[T]
for that type in scope (or in T
's companion object). That implicit equality definition will then be picked up and used when that type is compared for equality with the equal
, be
, and contain
matchers in ScalaTest tests and with ===
in both tests and production code. If you just want to use a custom equality for a single comparison, however, you may prefer to pass it explicitly. For example, if you have an implicit Equality[String]
in scope, you can force a comparison to use the default equality with this syntax:
// In production code: if ((result === "hello")(decided by defaultEquality)) true else false // In tests: result should equal ("hello") (decided by defaultEquality)
The explicitly DSL also provides support for specifying a one-off equality that is based on a normalization. For example, Scalactic offers a StringNormalizations
trait that provides methods such as trimmed
and lowerCased
that return Normalization[String]
instances that normalize by trimming and lower-casing, respectively. If you bring those into scope by mixing in or importing the members of StringNormalizations
, you could use the explicitly DSL like this:
// In production code: if ((result === "hello")(after being lowerCased)) true else false // In tests: result should equal ("hello") (after being lowerCased and trimmed)
If you prefer not to use English-like DSLs in your production code, you can alternatively not use the Explicitly
trait and instead write:
// To explicitly specify an Equality instance, just specify it: if ((result === "hello")(Equality.default)) true else false // To base an Equality instance on a Uniformity, just // call toEquality on it: if ((result === "hello")(lowerCased.toEquality)) true else false
Attributes
- Companion
- object
- Source
- Explicitly.scala
- Graph
-
- Supertypes
-
class Objecttrait Matchableclass Any
- Known subtypes
-
object Explicitly.type