jaroslav@355: /** jaroslav@355: * Back 2 Browser Bytecode Translator jaroslav@355: * Copyright (C) 2012 Jaroslav Tulach jaroslav@355: * jaroslav@355: * This program is free software: you can redistribute it and/or modify jaroslav@355: * it under the terms of the GNU General Public License as published by jaroslav@355: * the Free Software Foundation, version 2 of the License. jaroslav@355: * jaroslav@355: * This program is distributed in the hope that it will be useful, jaroslav@355: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@355: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@355: * GNU General Public License for more details. jaroslav@355: * jaroslav@355: * You should have received a copy of the GNU General Public License jaroslav@355: * along with this program. Look for COPYING file in the top folder. jaroslav@355: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@355: */ jaroslav@355: package org.apidesign.bck2brwsr.tck; jaroslav@355: jaroslav@392: import java.lang.reflect.Method; jaroslav@392: import java.util.Arrays; jaroslav@392: import java.util.Collections; jaroslav@392: import java.util.List; jaroslav@392: import org.apidesign.bck2brwsr.core.JavaScriptBody; jaroslav@355: import org.apidesign.bck2brwsr.vmtest.Compare; jaroslav@355: import org.apidesign.bck2brwsr.vmtest.VMTest; jaroslav@355: import org.testng.annotations.Factory; jaroslav@355: jaroslav@355: /** jaroslav@355: * jaroslav@355: * @author Jaroslav Tulach jaroslav@355: */ jaroslav@355: public class ReflectionTest { jaroslav@412: @Compare public boolean nonNullThis() { jaroslav@412: return this == null; jaroslav@412: } jaroslav@412: jaroslav@355: @Compare public String intType() { jaroslav@355: return Integer.TYPE.toString(); jaroslav@355: } jaroslav@355: jaroslav@413: @Compare public String voidType() throws Exception { jaroslav@413: return void.class.toString(); jaroslav@413: } jaroslav@413: jaroslav@355: @Compare public String longClass() { jaroslav@355: return long.class.toString(); jaroslav@355: } jaroslav@355: jaroslav@392: @Compare public String namesOfMethods() { jaroslav@392: StringBuilder sb = new StringBuilder(); jaroslav@392: String[] arr = new String[20]; jaroslav@392: int i = 0; jaroslav@392: for (Method m : StaticUse.class.getMethods()) { jaroslav@392: arr[i++] = m.getName(); jaroslav@392: } jaroslav@392: for (String s : sort(arr, i)) { jaroslav@392: sb.append(s).append("\n"); jaroslav@392: } jaroslav@392: return sb.toString(); jaroslav@392: } jaroslav@392: jaroslav@413: @Compare public String cannotCallNonStaticMethodWithNull() throws Exception { jaroslav@413: try { jaroslav@413: StaticUse.class.getMethod("instanceMethod").invoke(null); jaroslav@413: return "should not happen"; jaroslav@413: } catch (Exception ex) { jaroslav@413: return ex.getClass().getName() + ":" + ex.getMessage(); jaroslav@413: } jaroslav@413: } jaroslav@413: jaroslav@394: @Compare public String newInstanceFails() throws InstantiationException { jaroslav@394: try { jaroslav@394: return "success: " + StaticUse.class.newInstance(); jaroslav@394: } catch (IllegalAccessException ex) { jaroslav@394: return ex.getClass().getName(); jaroslav@394: } jaroslav@394: } jaroslav@394: jaroslav@392: @JavaScriptBody(args = { "arr", "len" }, body="var a = arr.slice(0, len); a.sort(); return a;") jaroslav@392: private static String[] sort(String[] arr, int len) { jaroslav@392: List list = Arrays.asList(arr).subList(0, len); jaroslav@392: Collections.sort(list); jaroslav@392: return list.toArray(new String[0]); jaroslav@392: } jaroslav@355: jaroslav@355: @Factory jaroslav@355: public static Object[] create() { jaroslav@355: return VMTest.create(ReflectionTest.class); jaroslav@355: } jaroslav@355: jaroslav@355: }