♻️ Add factory for page maker interactions
[Sone.git] / src / test / java / net / pterodactylus / sone / test / TestUtil.java
index 22c2057..745733f 100644 (file)
@@ -1,15 +1,20 @@
 package net.pterodactylus.sone.test;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 
+import kotlin.Deprecated;
+import kotlin.ReplaceWith;
+
 /**
  * Utilities for testing.
  */
 public class TestUtil {
 
+       @Deprecated(message = "It only checks the given class, not its superclasses.", replaceWith = @ReplaceWith(imports = { "net.pterodactylus.sone.test" }, expression = "setField(`object`, fieldName, value)"))
        public static void setFinalField(Object object, String fieldName, Object value) {
                try {
                        Field clientCoreField = object.getClass().getField(fieldName);
@@ -43,4 +48,14 @@ public class TestUtil {
                }
        }
 
+       public static <T> T createObject(Class<T> clazz, Class[] parameterTypes, Object... arguments) {
+               try {
+                       Constructor<T> constructor = clazz.getDeclaredConstructor(parameterTypes);
+                       constructor.setAccessible(true);
+                       return constructor.newInstance(arguments);
+               } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
+                       throw new RuntimeException(e);
+               }
+       }
+
 }