All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.specs2.matcher.StoredExpectations.scala Maven / Gradle / Ivy

There is a newer version: 3.10.0
Show newest version
package org.specs2
package matcher

import execute._

/**
 * This trait evaluates expectations and stores them in a local variable for further usage
 */
trait StoredExpectations extends Expectations {
  private[specs2] lazy val results = new scala.collection.mutable.ListBuffer[MatchResult[_]]

  override protected def checkMatchResultFailure[T](m: MatchResult[T]): MatchResult[T] = {
    results.append(m)
    m
  }

  def storedResults: Seq[Result] = {
    val failures = results.toSeq.filterNot(_.isSuccess)
    val rs = results.toSeq.map {
      case f: MatchFailure[_] if failures.size > 1 =>
        f.copy(ok = () => addLocation(f.okMessage, f.toResult.location), ko = () => addLocation(f.koMessage, f.toResult.location))

      case other => other
    }.map(_.toResult)
    results.clear()
    rs
  }

  def addLocation(message: String, location: String): String = {
    val locationMessage = s" [$location]"
    message + (if (!message.endsWith(locationMessage)) locationMessage else "")
  }

  override def sandboxMatchResult[T](mr: =>MatchResult[T]): MatchResult[T] = synchronized {
    val resultsCopy = new scala.collection.mutable.ListBuffer[MatchResult[_]]
    resultsCopy.appendAll(results)
    try mr
    finally {
      results.clear
      results.appendAll(resultsCopy)
    }
  }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy