]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/FindAllowedChars.java
Automatic execution of SCL tests in Maven
[simantics/platform.git] / tests / org.simantics.scl.compiler.tests / src / org / simantics / scl / compiler / tests / FindAllowedChars.java
diff --git a/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/FindAllowedChars.java b/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/FindAllowedChars.java
new file mode 100644 (file)
index 0000000..1e40786
--- /dev/null
@@ -0,0 +1,66 @@
+package org.simantics.scl.compiler.tests;\r
+\r
+import java.lang.reflect.Method;\r
+\r
+import org.objectweb.asm.ClassWriter;\r
+import org.objectweb.asm.MethodVisitor;\r
+import org.objectweb.asm.Opcodes;\r
+\r
+public class FindAllowedChars {\r
+    public static class MyClassLoader extends ClassLoader {\r
+        final String className;\r
+        final byte[] classBytes;\r
+        \r
+        public MyClassLoader(ClassLoader parent, String className, byte[] classBytes) {\r
+            super(parent);\r
+            this.className = className;\r
+            this.classBytes = classBytes;\r
+        }\r
+        \r
+        public MyClassLoader(String className, byte[] classBytes) {\r
+            this.className = className;\r
+            this.classBytes = classBytes;\r
+        }\r
+\r
+        @Override\r
+        protected Class<?> findClass(String name) throws ClassNotFoundException {\r
+            if(name.equals(name))\r
+                return defineClass(name, classBytes, 0, classBytes.length);\r
+            else\r
+                return super.findClass(name);\r
+        }\r
+    }\r
+    \r
+    public static void test(String className, String methodName) throws Exception {\r
+        ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);\r
+        classWriter.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, className, null, "java/lang/Object", null);\r
+        \r
+        MethodVisitor methodVisitor = classWriter.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, methodName, "()V", null, null);\r
+        /*methodVisitor.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");\r
+        methodVisitor.visitLdcInsn("Hello world!");\r
+        methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);*/\r
+        methodVisitor.visitInsn(Opcodes.RETURN);\r
+        methodVisitor.visitMaxs(0, 0);\r
+        methodVisitor.visitEnd();\r
+        classWriter.visitEnd();\r
\r
+        ClassLoader loader = new MyClassLoader(className, classWriter.toByteArray());\r
+        Class<?> clazz = loader.loadClass(className);\r
+        Method method = clazz.getMethod(methodName);\r
+        method.invoke(null);\r
+    }\r
+    \r
+    public static void main(String[] args) throws Exception {\r
+        for(int a=Character.MIN_VALUE;a<Character.MAX_VALUE;++a) {\r
+            //for(char b=0;b<256;++b) {\r
+                String name = new String(new char[] {(char)a});\r
+                try {\r
+                    test(name, "test");\r
+                } catch(Throwable e) {\r
+                    System.out.println(name + " (" + a + ")");\r
+                }\r
+            //}   \r
+        }\r
+        System.out.println((int)Character.MAX_VALUE);\r
+    }\r
+}\r