String Includes Many Substrings in Scalatest Matchers
I Need to Check That One String Contains Many Substrings. the Following Works String Should Include ("Seven") String Should Include ("Eight") String Should...
I need to check that one string contains many substrings. The following works
string should include ("seven")
string should include ("eight")
string should include ("nine")
but it takes three almost duplicated lines. I'm looking for something like
string should contain allOf ("seven", "eight", "nine")
however this doesn't work... The assertion just fails while string contains these substrings for sure.
How can I perform such assertion in one line?
2 Answers
Try this:
string should (include("seven") and include("eight") and include("nine"))
You can always create a custom matcher:
it should "..." in {
"str asd dsa ddsd" should includeAllOf ("r as", "asd", "dd")
}
def includeAllOf(expectedSubstrings: String*): Matcher[String] =
new Matcher[String] {
def apply(left: String): MatchResult =
MatchResult(expectedSubstrings forall left.contains,
s"""String "$left" did not include all of those substrings: ${expectedSubstrings.map(s => s""""$s"""").mkString(", ")}""",
s"""String "$left" contained all of those substrings: ${expectedSubstrings.map(s => s""""$s"""").mkString(", ")}""")
}
See for more details.