/**
  * Verifies that the type of the column is equal to one of the types in parameters.
  *
  * @param <A> The type of the assertion which call this method.
  * @param assertion The assertion which call this method.
  * @param info Writable information about an assertion.
  * @param valuesList The list of values.
  * @param expected The expected types to compare to.
  * @return {@code this} assertion object.
  * @throws AssertionError If the type of the column is different to all the types in parameters.
  */
 public static <A extends AbstractAssert> A isOfAnyTypeIn(
     A assertion, WritableAssertionInfo info, List<Object> valuesList, ValueType... expected) {
   int index = 0;
   loop:
   for (Object value : valuesList) {
     ValueType type = ValueType.getType(value);
     for (ValueType valueType : expected) {
       if (type == valueType) {
         index++;
         continue loop;
       }
     }
     throw failures.failure(info, shouldBeValueTypeOfAny(index, value, type, expected));
   }
   return assertion;
 }
  /**
   * /** Verifies that the type of the values of the column is equal to the type in parameter.
   *
   * @param <A> The type of the assertion which call this method.
   * @param assertion The assertion which call this method.
   * @param info Writable information about an assertion.
   * @param valuesList The list of values.
   * @param expected The expected type to compare to.
   * @param lenient {@code true} if the test is lenient : if the type of a value is not identified
   *     (for example when the value is {@code null}), it consider that it is ok.
   * @return {@code this} assertion object.
   * @throws AssertionError If the type of the column is different to the type in parameter.
   */
  public static <A extends AbstractAssert> A isOfType(
      A assertion,
      WritableAssertionInfo info,
      List<Object> valuesList,
      ValueType expected,
      boolean lenient) {
    if (lenient) {
      return isOfAnyTypeIn(assertion, info, valuesList, expected, ValueType.NOT_IDENTIFIED);
    }

    int index = 0;
    for (Object value : valuesList) {
      ValueType type = ValueType.getType(value);
      if (type != expected) {
        throw failures.failure(
            info, ShouldBeValueType.shouldBeValueType(index, value, expected, type));
      }
      index++;
    }
    return assertion;
  }