Я думал, что у меня уже было это из коробки, но это не так. Я планирую добавить это в спецификации в следующие дни:
import org.specs._
import org.specs.matcher._
object SeqMatcher extends Specification {
implicit def toSeqMatcher[T](m: Matcher[T]) = new ToSeqMatcher(m)
class ToSeqMatcher[T](m: Matcher[T]) {
def toSeq: Matcher[Seq[T]] = new Matcher[Seq[T]]() {
type Res = (Boolean, String, String)
def apply(v: =>Seq[T]) = ((true, "", "") /: v) { (res: Res, cur: T) =>
def append(first: String, separator: String, second: String) =
first + (if (first.isEmpty) "" else separator) + second
val currentRes = m(cur)
if (currentRes._1)
(res._1 && currentRes._1, append(res._2, " and ", currentRes._2), append(res._3, " and ", currentRes._2))
else
(res._1 && currentRes._1, append(res._2, " and ", currentRes._2), append(res._2, " but ", currentRes._2))
}
}
}
List(1, 2, 6).toSeq must beLessThan(5).toSeq
}
SeqMatcher.reportSpecs
Это распечатает:
x example 1
1 is less than 5 and 2 is less than 5 but 6 is less than 5
Оставайтесь с нами!
Эрик.