Skip to content

Commit

Permalink
Merge branch 'cheeseng-feature-expectation-clue-support'
Browse files Browse the repository at this point in the history
  • Loading branch information
bvenners committed Aug 4, 2023
2 parents 170aea1 + 3d36779 commit 9e3e76e
Show file tree
Hide file tree
Showing 6 changed files with 600 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
package org.scalatest.expectations

import org.scalactic.{Resources => _, _}
import org.scalatest.{Assertion, CompileMacro, Expectation, Fact, Suite, Resources}
import org.scalatest.{Assertion, CompileMacro, Expectation, Fact, Suite, Resources, AppendedClues}
import Fact._
import scala.concurrent.ExecutionContext
import scala.concurrent.Future
Expand Down Expand Up @@ -143,6 +143,9 @@ trait Expectations {
inline def expect(expression: Boolean)(implicit prettifier: Prettifier): Fact =
${ ExpectationsMacro.expect('{expression})('{prettifier}) }

inline def expect(expression: Boolean, clue: Any)(implicit prettifier: Prettifier): Fact =
${ ExpectationsMacro.expectWithClue('{expression}, '{clue})('{prettifier}) }

/**
* Expects that a given code snippet does not compile.
*
Expand Down Expand Up @@ -205,6 +208,8 @@ object Expectations extends Expectations {
*/
class ExpectationsHelper {

import org.scalactic.Requirements.requireNonNull

/**
* A helper method for macro-generated assertions.
*
Expand All @@ -214,31 +219,33 @@ object Expectations extends Expectations {
* @return a [[Fact]] representing the result of the assertion
*/
def macroExpect(bool: Bool, clue: Any, prettifier: Prettifier): Fact = {
//requireNonNull(clue)
if (!bool.value)
No(
bool.rawFailureMessage,
bool.rawFailureMessage,
bool.rawFailureMessage,
bool.rawFailureMessage,
bool.failureMessageArgs,
bool.failureMessageArgs,
bool.failureMessageArgs,
bool.failureMessageArgs,
prettifier
)
else
Yes(
bool.rawNegatedFailureMessage,
bool.rawNegatedFailureMessage,
bool.rawNegatedFailureMessage,
bool.rawNegatedFailureMessage,
bool.negatedFailureMessageArgs,
bool.negatedFailureMessageArgs,
bool.negatedFailureMessageArgs,
bool.negatedFailureMessageArgs,
prettifier
)
requireNonNull(clue)
val result =
if (!bool.value)
No(
bool.rawFailureMessage,
bool.rawFailureMessage,
bool.rawFailureMessage,
bool.rawFailureMessage,
bool.failureMessageArgs,
bool.failureMessageArgs,
bool.failureMessageArgs,
bool.failureMessageArgs,
prettifier
)
else
Yes(
bool.rawNegatedFailureMessage,
bool.rawNegatedFailureMessage,
bool.rawNegatedFailureMessage,
bool.rawNegatedFailureMessage,
bool.negatedFailureMessageArgs,
bool.negatedFailureMessageArgs,
bool.negatedFailureMessageArgs,
bool.negatedFailureMessageArgs,
prettifier
)
if (clue == "") result else result.modifyMessage(_.map(ori => AppendedClues.appendClue(ori, clue.toString)))
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,9 @@ object ExpectationsMacro {
val bool = BooleanMacro.parse(condition, prettifier)
'{ Expectations.expectationsHelper.macroExpect($bool, "", $prettifier) }
}

def expectWithClue(condition: Expr[Boolean], clue: Expr[Any])(prettifier: Expr[Prettifier])(using Quotes): Expr[Fact] = {
val bool = BooleanMacro.parse(condition, prettifier)
'{ Expectations.expectationsHelper.macroExpect($bool, $clue, $prettifier) }
}
}
Loading

0 comments on commit 9e3e76e

Please sign in to comment.