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

hope.kola.contract.assertj.Helper Maven / Gradle / Ivy

There is a newer version: 1.1.2-RELEASE
Show newest version
package hope.kola.contract.assertj;

import com.squareup.javapoet.ArrayTypeName;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.TypeName;
import hope.kola.contract.assertj.model.DynamicProperty;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.*;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import org.assertj.core.data.Offset;

public class Helper {

  static final Map PRIMITIVE_SUPPORTS =
      new HashMap<>() {
        {
          put(ClassName.get(Boolean.class), "newBoolean");
          put(ClassName.get(Integer.class), "newInteger");
          put(ClassName.get(Long.class), "newLong");
          put(ClassName.get(Double.class), "newDouble");
          put(ClassName.get(Float.class), "newFloat");
          put(ClassName.get(LocalDate.class), "newLocalDate");
          put(ClassName.get(LocalDateTime.class), "newLocalDateTime");
          put(ClassName.get(LocalTime.class), "newLocalTime");
          put(ClassName.get(BigDecimal.class), "newBigDecimal");
          put(ClassName.get(BigInteger.class), "newBigInteger");
          put(ClassName.get(String.class), "newString");
          put(ClassName.get(Instant.class), "newInstant");
          put(ClassName.get(Offset.class), "newOffset");
          put(ClassName.get(Byte.class), "newByte");
          put(ClassName.get(Month.class), "newMonth");
          put(ClassName.get(Short.class), "newShort");

          // Arrays:
          put(ArrayTypeName.of(String.class), "newStringArray");
          put(ArrayTypeName.of(Integer.class), "newIntegerArray");
          put(ArrayTypeName.of(Long.class), "newLongArray");
          put(ArrayTypeName.of(Double.class), "newDoubleArray");
          put(ArrayTypeName.of(Float.class), "newFloatArray");
          put(ArrayTypeName.of(Byte.class), "newByteArray");
        }
      };

  public static DynamicProperty newOffset(final Offset offset) {
    return DynamicProperty.newGeneric(offset, offsetBuilder(offset));
  }

  public static Consumer offsetBuilder(final Offset offset) {
    return builder -> {
      if (offset.strict) {
        builder.add("$T.strictOffset($L)", Offset.class, offset.value);
      } else {
        builder.add("$T.offset($L)", Offset.class, offset.value);
      }
    };
  }

  public static String method(final TypeName typeName) {
    return PRIMITIVE_SUPPORTS.get(typeName);
  }

  public static TypeName mapperName(final String name) {

    switch (name) {
      case "boolean", "bool" -> {
        return ClassName.get(Boolean.class);
      }
      case "int" -> {
        return ClassName.get(Integer.class);
      }
      case "long" -> {
        return ClassName.get(Long.class);
      }
      case "double" -> {
        return ClassName.get(Double.class);
      }
      case "float" -> {
        return ClassName.get(Float.class);
      }
      case "short" -> {
        return ClassName.get(Short.class);
      }
      case "char" -> {
        return ClassName.get(char.class);
      }
      case "byte" -> {
        return ClassName.get(Byte.class);
      }
      case "byte[]" -> {
        return ClassName.get(Byte[].class);
      }
      case "java.lang.CharSequence" -> {
        return ClassName.get(String.class);
      }
      case "java.lang.CharSequence[]" -> {
        return ArrayTypeName.of(String.class);
      }
    }

    if (name.endsWith("[]")) {
      String _name = name.substring(0, name.length() - 2);
      return ArrayTypeName.of(ClassName.bestGuess(_name));
    }

    return ClassName.bestGuess(name);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy