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

jvmMain.io.kotest.equals.ReflectionIgnoringFieldsEquality.kt Maven / Gradle / Ivy

package io.kotest.equals

import io.kotest.matchers.equality.beEqualToIgnoringFields
import kotlin.reflect.KProperty

class ReflectionIgnoringFieldsEquality(
   private val property: KProperty<*>,
   private val others: Array>,
   private val ignorePrivateFields: Boolean = true,
) : Equality {
   override fun name(): String {
      val plural = if (others.isNotEmpty()) "s" else ""
      val ignoringPrivate = if (ignorePrivateFields) "ignoring" else "including"
      return "reflection equality ignoring field$plural ${(listOf(property) + others).map { it.name }} and $ignoringPrivate private fields"
   }

   fun includingPrivateFields(): ReflectionIgnoringFieldsEquality {
      return withIgnorePrivateFields(false)
   }

   fun ignoringPrivateFields(): ReflectionIgnoringFieldsEquality {
      return withIgnorePrivateFields(true)
   }

   private fun withIgnorePrivateFields(value: Boolean): ReflectionIgnoringFieldsEquality {
      return ReflectionIgnoringFieldsEquality(
         property = property,
         others = others,
         ignorePrivateFields = value,
      )
   }

   override fun verify(actual: T, expected: T): EqualityResult {
      val result = beEqualToIgnoringFields(expected, ignorePrivateFields, property, *others).test(actual)
      if(result.passed()) return EqualityResult.equal(actual, expected, this)
      return EqualityResult.notEqual(actual, expected, this).withDetails { result.failureMessage() }
   }

   override fun toString(): String = name()
}

fun  Equality.Companion.byReflectionIgnoringFields(
   property: KProperty<*>,
   vararg others: KProperty<*>,
   ignorePrivateFields: Boolean = true,
) = ReflectionIgnoringFieldsEquality(
   property = property,
   others = others,
   ignorePrivateFields = ignorePrivateFields
)




© 2015 - 2025 Weber Informatics LLC | Privacy Policy