jaroslav@355: /** jaroslav@355: * Back 2 Browser Bytecode Translator jaroslav@1787: * Copyright (C) 2012-2015 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@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@1982: public class ReflectionClassValueTest { jaroslav@1982: private static final class StringValue extends ClassValue { jaroslav@1982: private final boolean upper; jaroslav@1982: jaroslav@1982: public StringValue(boolean upper) { jaroslav@1982: this.upper = upper; jaroslav@1982: } jaroslav@1982: jaroslav@1982: @Override jaroslav@1982: protected String computeValue(Class type) { jaroslav@1982: final String str = new String(type.toString()); jaroslav@1982: return upper ? str.toUpperCase() : str.toLowerCase(); jaroslav@1982: } jaroslav@1982: } jaroslav@1982: private static final StringValue UPPER = new StringValue(true); jaroslav@1982: private static final StringValue LOWER = new StringValue(false); jaroslav@1982: jaroslav@1982: @Compare public String upperRunnable() { jaroslav@1982: return UPPER.get(Runnable.class); jaroslav@1982: } jaroslav@1982: jaroslav@1982: @Compare public String lowerRunnable() { jaroslav@1982: return LOWER.get(Runnable.class); jaroslav@412: } jaroslav@412: jaroslav@1982: @Compare public boolean valueIsCached() { jaroslav@1982: String one = LOWER.get(Runnable.class); jaroslav@1982: String two = LOWER.get(Runnable.class); jaroslav@1982: return one == two; jaroslav@355: } jaroslav@355: jaroslav@1982: @Compare public boolean valueCanBeCleared() { jaroslav@1982: String one = LOWER.get(Runnable.class); jaroslav@1982: LOWER.remove(Runnable.class); jaroslav@1982: String two = LOWER.get(Runnable.class); jaroslav@1982: return one != two; jaroslav@413: } jaroslav@413: jaroslav@1982: @Compare public String upperObject() { jaroslav@1982: return UPPER.get(Object.class); jaroslav@649: } jaroslav@649: jaroslav@1982: @Compare public String lowerObject() { jaroslav@1982: return LOWER.get(Object.class); jaroslav@886: } jaroslav@886: jaroslav@1982: @Compare public String upperLowerString() { jaroslav@1982: return UPPER.get(String.class) + LOWER.get(String.class); jaroslav@886: } jaroslav@886: jaroslav@1982: @Compare public String lowerUpperSeq() { jaroslav@1982: return LOWER.get(CharSequence.class) + UPPER.get(CharSequence.class); jaroslav@886: } jaroslav@886: jaroslav@355: @Factory jaroslav@355: public static Object[] create() { jaroslav@1982: return VMTest.create(ReflectionClassValueTest.class); jaroslav@1838: } jaroslav@355: }