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

org.mockito.matchers.MacroMatchers_211.scala Maven / Gradle / Ivy

package org.mockito.matchers

import org.mockito.internal.MacroDebug.debugResult
import org.mockito.internal.ValueClassExtractor
import org.mockito.{ ArgumentMatchers => JavaMatchers }
import org.scalactic.{ Equality, Prettifier }

import scala.reflect.macros.blackbox

object MacroMatchers_211 {
  def eqTo[T: Equality: ValueClassExtractor](value: T)(implicit $pt: Prettifier): T = {
    JavaMatchers.argThat(new EqTo[T](value))
    value
  }

  def eqToMatcher[T: c.WeakTypeTag](c: blackbox.Context)(value: c.Expr[T]): c.Expr[T] = {
    import c.universe._

    def isValueClass(tpe: Tree) = tpe.symbol.isClass && tpe.symbol.asClass.isDerivedValueClass

    val r = c.Expr[T] {
      c.macroApplication match {
        case q"$_.eqTo[$tpe](new $clazz($arg))" if isValueClass(tpe) =>
          q"new $clazz(_root_.org.mockito.matchers.MacroMatchers_211.eqTo($arg))"

        case q"$_.eqTo[$tpe](..$arg)" =>
          q"_root_.org.mockito.matchers.MacroMatchers_211.eqTo[$tpe](..$arg)"

        case o => throw new Exception(s"Couldn't recognize ${show(o)}")
      }
    }
    debugResult(c)("mockito-print-matcher")(r.tree)
    r
  }

  def eqToValMatcher[T: c.WeakTypeTag](c: blackbox.Context)(value: c.Expr[T]): c.Expr[T] = {
    import c.universe._

    val r = c.Expr[T] {
      c.macroApplication match {
        case q"$_.eqToVal[$_]($clazz($arg))"     => q"$clazz(_root_.org.mockito.matchers.MacroMatchers_211.eqTo($arg))"
        case q"$_.eqToVal[$_](new $clazz($arg))" => q"new $clazz(_root_.org.mockito.matchers.MacroMatchers_211.eqTo($arg))"
        case q"$_.eqToVal[$tpe]($arg)" =>
          val companion = q"$tpe".symbol.companion
          q"$companion.apply(_root_.org.mockito.matchers.MacroMatchers_211.eqTo( $companion.unapply($arg).get ))"
        case o => throw new Exception(s"Couldn't recognize ${show(o)}")
      }
    }
    debugResult(c)("mockito-print-matcher")(r.tree)
    r
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy