 
                        
        
                        
        org.catools.media.extensions.waitVerify.interfaces.CImageComparisionWaitVerifier Maven / Gradle / Ivy
package org.catools.media.extensions.waitVerify.interfaces;
import org.catools.common.extensions.verify.CVerificationBuilder;
import org.catools.common.extensions.verify.CVerificationQueue;
import org.catools.common.io.CFile;
import org.catools.common.io.CResource;
import org.catools.common.tests.CTest;
import org.catools.media.extensions.verify.interfaces.CImageComparisionVerifier;
import org.catools.media.extensions.wait.interfaces.CImageComparisionWaiter;
import org.catools.media.utils.CImageUtil;
import java.awt.image.BufferedImage;
import java.io.File;
import static org.catools.media.enums.CImageComparisonType.GRAY_FLOAT_32;
/**
 * CImageComparisionWaitVerifier is an interface for BufferedImage verification related methods.
 *
 * We need this interface to have possibility of adding verification to any exists objects with
 * the minimum change in the code. In the meantime adding verification method in one place can be
 * extend cross all other objects:
 */
public interface CImageComparisionWaitVerifier extends CImageComparisionVerifier {
  /**
   * Verify that actual and expected are equal
   *
   * @param testInstance instance of test related to this verification
   * @param expected value to compare
   * @param diffFileName the file name for diff image which should be generated in case if images
   *     did not match
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CTest testInstance,
      final BufferedImage expected,
      final String diffFileName,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        testInstance.verify,
        expected,
        diffFileName,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param testInstance instance of test related to this verification
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CTest testInstance,
      final CFile expected,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        testInstance.verify,
        expected,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param testInstance instance of test related to this verification
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CTest testInstance,
      final CResource expected,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        testInstance.verify,
        expected,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param expected value to compare
   * @param diffFileName the file name for diff image which should be generated in case if images
   *     did not match
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CVerificationQueue verificationQueue,
      final BufferedImage expected,
      final String diffFileName,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        verificationQueue,
        expected,
        diffFileName,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CVerificationQueue verificationQueue,
      final CFile expected,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        verificationQueue,
        expected,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CVerificationQueue verificationQueue,
      final CResource expected,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        verificationQueue,
        expected,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param testInstance instance of test related to this verification
   * @param expected value to compare
   * @param diffFileName the file name for diff image which should be generated in case if images
   *     did not match
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CTest testInstance,
      final BufferedImage expected,
      final String diffFileName,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        testInstance.verify,
        expected,
        diffFileName,
        waitInSeconds,
        intervalInMilliSeconds,
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param testInstance instance of test related to this verification
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CTest testInstance,
      final CFile expected,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        testInstance.verify, expected, waitInSeconds, intervalInMilliSeconds, message, params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param testInstance instance of test related to this verification
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CTest testInstance,
      final CResource expected,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        testInstance.verify, expected, waitInSeconds, intervalInMilliSeconds, message, params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param expected value to compare
   * @param diffFileName the file name for diff image which should be generated in case if images
   *     did not match
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CVerificationQueue verificationQueue,
      final BufferedImage expected,
      final String diffFileName,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    _verify(
        verificationQueue,
        expected,
        false,
        (a, b) -> _toState(a).isEqual(b),
        (a, b) ->
            CImageUtil.generateDiffFile(
                verificationQueue.getLogger(), (BufferedImage) a, b, diffFileName, GRAY_FLOAT_32),
        waitInSeconds,
        intervalInMilliSeconds,
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CVerificationQueue verificationQueue,
      final CFile expected,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        verificationQueue,
        CImageUtil.readImageOrNull(expected),
        expected.getName(),
        waitInSeconds,
        intervalInMilliSeconds,
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEquals(
      CVerificationQueue verificationQueue,
      final CResource expected,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    verifyEquals(
        verificationQueue,
        CImageUtil.readImageOrNull(expected),
        expected.getResourceName(),
        waitInSeconds,
        intervalInMilliSeconds,
        message,
        params);
  }
  /**
   * Verify that actual and expected are not equal
   *
   * @param testInstance instance of test related to this verification
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyNotEquals(
      CTest testInstance,
      final CFile expected,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyNotEquals(
        testInstance.verify,
        expected,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are not equal
   *
   * @param testInstance instance of test related to this verification
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyNotEquals(
      CTest testInstance,
      final CResource expected,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyNotEquals(
        testInstance.verify,
        expected,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are not equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyNotEquals(
      CVerificationQueue verificationQueue,
      final CFile expected,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyNotEquals(
        verificationQueue,
        expected,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are not equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyNotEquals(
      CVerificationQueue verificationQueue,
      final CResource expected,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyNotEquals(
        verificationQueue,
        expected,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are not equal
   *
   * @param testInstance instance of test related to this verification
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyNotEquals(
      CTest testInstance,
      final CFile expected,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    verifyNotEquals(
        testInstance.verify, expected, waitInSeconds, intervalInMilliSeconds, message, params);
  }
  /**
   * Verify that actual and expected are not equal
   *
   * @param testInstance instance of test related to this verification
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyNotEquals(
      CTest testInstance,
      final CResource expected,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    verifyNotEquals(
        testInstance.verify, expected, waitInSeconds, intervalInMilliSeconds, message, params);
  }
  /**
   * Verify that actual and expected are not equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyNotEquals(
      CVerificationQueue verificationQueue,
      final CFile expected,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    _verify(
        verificationQueue,
        expected,
        false,
        (a, b) -> _toState(a).isNotEqual(b),
        waitInSeconds,
        intervalInMilliSeconds,
        message,
        params);
  }
  /**
   * Verify that actual and expected are not equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyNotEquals(
      CVerificationQueue verificationQueue,
      final CResource expected,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    _verify(
        verificationQueue,
        expected,
        false,
        (a, b) -> _toState(a).isNotEqual(b),
        waitInSeconds,
        intervalInMilliSeconds,
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param testInstance instance of test related to this verification
   * @param diffFileNamePrefix the file name for diff image which should be generated in case if
   *     images did not match. Please Note that we add index to the end to avoid duplicate file
   *     name.
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEqualsAny(
      CTest testInstance,
      final Iterable expected,
      final String diffFileNamePrefix,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyEqualsAny(
        testInstance.verify,
        expected,
        diffFileNamePrefix,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param diffFileNamePrefix the file name for diff image which should be generated in case if
   *     images did not match. Please Note that we add index to the end to avoid duplicate file
   *     name.
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEqualsAny(
      CVerificationQueue verificationQueue,
      final Iterable expected,
      final String diffFileNamePrefix,
      final int waitInSeconds,
      final String message,
      final Object... params) {
    verifyEqualsAny(
        verificationQueue,
        expected,
        diffFileNamePrefix,
        waitInSeconds,
        getDefaultWaitIntervalInMilliSeconds(),
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param testInstance instance of test related to this verification
   * @param diffFileNamePrefix the file name for diff image which should be generated in case if
   *     images did not match. Please Note that we add index to the end to avoid duplicate file
   *     name.
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEqualsAny(
      CTest testInstance,
      final Iterable expected,
      final String diffFileNamePrefix,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    verifyEqualsAny(
        testInstance.verify,
        expected,
        diffFileNamePrefix,
        waitInSeconds,
        intervalInMilliSeconds,
        message,
        params);
  }
  /**
   * Verify that actual and expected are equal
   *
   * @param verificationQueue CTest, CVerifier or any other verification queue instance
   * @param diffFileNamePrefix the file name for diff image which should be generated in case if
   *     images did not match. Please Note that we add index to the end to avoid duplicate file
   *     name.
   * @param expected value to compare
   * @param waitInSeconds maximum wait time
   * @param intervalInMilliSeconds interval between retries in milliseconds
   * @param message information about the propose of this verification
   * @param params parameters in case if message is a format {@link String#format}
   * @caller {@link CVerificationBuilder} so we can do chain calls
   */
  default void verifyEqualsAny(
      CVerificationQueue verificationQueue,
      final Iterable expected,
      final String diffFileNamePrefix,
      final int waitInSeconds,
      final int intervalInMilliSeconds,
      final String message,
      final Object... params) {
    _verify(
        verificationQueue,
        expected,
        false,
        (a, e) -> _toState(a).equalsAny(e),
        (a, e) -> generateDiffForAllExpected(verificationQueue, diffFileNamePrefix, e),
        waitInSeconds,
        intervalInMilliSeconds,
        message,
        params);
  }
  private CImageComparisionWaiter _toWaiter(Object o) {
    if (o instanceof File) {
      return () -> CImageUtil.readImageOrNull((File) o);
    }
    if (o instanceof CResource) {
      return () -> CImageUtil.readImageOrNull((CResource) o);
    }
    if (o == null) {
      return () -> null;
    }
    return () -> (BufferedImage) o;
  }
}