--- /dev/null
+package org.simantics.scl.reflection.tests;\r
+\r
+import static junit.framework.Assert.*;\r
+import static org.simantics.scl.compiler.types.Types.parseType;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.junit.Test;\r
+import org.simantics.scl.reflection.MinimalTypeBindingScheme;\r
+import org.simantics.scl.reflection.ReflectionUtils;\r
+import org.simantics.scl.reflection.TypeBindingScheme;\r
+import org.simantics.scl.runtime.function.Function;\r
+\r
+public class TestReflectionUtils {\r
+\r
+ @Test\r
+ public void testReflectionUtils() throws Exception {\r
+ TypeBindingScheme s = MinimalTypeBindingScheme.INSTANCE; \r
+ \r
+ Class<?> c = getClass();\r
+ \r
+ assertTrue(ReflectionUtils.isAssignableFrom(s, parseType("Integer"), Integer.class));\r
+ assertTrue(ReflectionUtils.isAssignableFrom(s, parseType("Integer"), int.class));\r
+ assertTrue(ReflectionUtils.isAssignableFrom(s, parseType("String"), String.class));\r
+ assertTrue(ReflectionUtils.isAssignableFrom(s, parseType("[String]"), List.class));\r
+ assertTrue(ReflectionUtils.isAssignableFrom(s, parseType("[String]"), ArrayList.class));\r
+ assertTrue(ReflectionUtils.isAssignableFrom(s, List.class, parseType("[String]")));\r
+ assertFalse(ReflectionUtils.isAssignableFrom(s, ArrayList.class, parseType("[String]")));\r
+ assertTrue(ReflectionUtils.isAssignableFrom(s, parseType("String -> String"), \r
+ Function.class));\r
+ assertTrue(ReflectionUtils.isCompatible(s, parseType("String -> Integer"), \r
+ c.getMethod("method1", String.class)));\r
+ assertTrue(ReflectionUtils.isCompatible(s, parseType("String -> ()"), \r
+ c.getMethod("method2", String.class)));\r
+ assertTrue(ReflectionUtils.isCompatible(s, parseType("Integer"), \r
+ c.getMethod("method3")));\r
+ \r
+ assertFalse(ReflectionUtils.isAssignableFrom(s, parseType("String"), Integer.class));\r
+ \r
+ }\r
+ \r
+ public static int method1(String a) {\r
+ return a.length();\r
+ }\r
+ \r
+ public static void method2(String a) {\r
+ System.out.println(a);\r
+ }\r
+ \r
+ public static int method3() {\r
+ return 3;\r
+ }\r
+}\r