How ScalaTest DSL works (simplified version) - grant-guo/Ideas GitHub Wiki
With ScalaTest, we usually write the test cases like this
"subject" should "verb" in {
... ...
}
How this DSL is executed is the topic of this wiki page
we can identify should
and in
are the key words, which are represented by Scala functions, classes or structures.
At first, let's see how "subject" should
work together. By searching the source code, I found the following implicit
function in Matchers.scala
implicit def convertToStringShouldWrapper(o: String)(implicit pos: source.Position, prettifier: Prettifier): StringShouldWrapper = new StringShouldWrapper(o, pos, prettifier)
This function implicitly converts an String to a StringShouldWrapper
object. object Position
defines an implicit function called here
, and object Prettifier
defines an implicit object called default
The class StringShouldWrapper
mixin the trait ShouldVerb
, which has the following function
def should(right: String)(implicit svsi: StringVerbStringInvocation): ResultOfStringPassedToVerb
FlatSpecLike
defines an implicit StringVerbStringInvocation
object called shorthandTestRegistrationFunction
Function in
is defined in protected final class InAndIgnoreMethods(resultOfStringPassedToVerb: ResultOfStringPassedToVerb)
within the trait FlatSpecLike
Also in FlatSpecLike
, there is an implicit function as the following
protected implicit def convertToInAndIgnoreMethods(resultOfStringPassedToVerb: ResultOfStringPassedToVerb): InAndIgnoreMethods =
new InAndIgnoreMethods(resultOfStringPassedToVerb)