package org.jolokia.util; /* * Copyright 2009-2013 Roland Huss * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.io.File; import java.io.IOException; import java.util.*; import org.testng.annotations.Test; import static org.testng.Assert.*; /** * @author roland * @since 19.04.11 */ public class ClassUtilTest { public ClassUtilTest() { } public ClassUtilTest(String stringProp, Integer intProp) { this.stringProp = stringProp; this.intProp = intProp; } public void setStringProp(String stringProp) { this.stringProp = stringProp; } public void setIntProp(int intProp) { this.intProp = intProp; } private String stringProp; private int intProp; @Test public void classForName() { assertTrue(ClassUtil.checkForClass("java.lang.String")); assertEquals(ClassUtil.classForName(ClassUtilTest.class.getName()),ClassUtilTest.class); assertNull(ClassUtil.classForName("blablub")); } @Test public void classForNameFoundInParent() throws ClassNotFoundException { ClassLoader oldCl = Thread.currentThread().getContextClassLoader(); ClassLoader cl = new MyCl(oldCl); Thread.currentThread().setContextClassLoader(cl); Class clazz = ClassUtil.classForName("org.jolokia.util.RequestType"); assertEquals(clazz.getName(),"org.jolokia.util.RequestType"); assertEquals(oldCl.loadClass("org.jolokia.util.RequestType"),clazz); Thread.currentThread().setContextClassLoader(oldCl); } @Test public void classForNameWithoutContextClassLoader() { Thread current = Thread.currentThread(); ClassLoader origLoader = current.getContextClassLoader(); current.setContextClassLoader(null); try { classForName(); } finally { current.setContextClassLoader(origLoader); } } @Test public void resourceAsStream() { checkResources(); Thread current = Thread.currentThread(); ClassLoader origLoader = current.getContextClassLoader(); current.setContextClassLoader(null); try { checkResources(); } finally { current.setContextClassLoader(origLoader); } } @Test public void testGetResources() throws IOException { Set<String> urls = ClassUtil.getResources("META-INF/detectors"); assertNotNull(urls); assertEquals(urls.size(),1); } @Test public void testNewInstance() { ClassUtilTest test = ClassUtil.newInstance(getClass().getCanonicalName()); assertEquals(test.getClass(),getClass()); } @Test(expectedExceptions = IllegalArgumentException.class,expectedExceptionsMessageRegExp = ".*find.*") public void testNewInstanceFail1() { ClassUtil.newInstance("blubber.bla"); } @Test(expectedExceptions = IllegalArgumentException.class,expectedExceptionsMessageRegExp = ".*NoSuchMethodException.*") public void testNewInstanceFail2() { ClassUtil.newInstance("java.lang.String",Boolean.TRUE); } @Test public void testApply() { File testFile = new File("/cannot/possibly/exist/at/all"); Boolean result = (Boolean) ClassUtil.applyMethod(testFile,"exists"); assertFalse(result); } @Test public void testApplyWithPrimitive() { ClassUtilTest test = new ClassUtilTest("bla",1); assertEquals(test.intProp,1); ClassUtil.applyMethod(test,"setIntProp",new Integer(2)); assertEquals(test.intProp,2); } @Test public void testApplyNoArgs() { String fs = System.getProperty("path.separator"); String pathname = fs + "tmp"; File testFile = new File(pathname); String path = (String) ClassUtil.applyMethod(testFile,"getPath"); assertEquals(path, pathname); } @Test public void testApplyWithArgs() { Map<String,String> map = new HashMap<String,String>(); ClassUtil.applyMethod(map,"put","hello","world"); assertEquals(map.get("hello"),"world"); } @Test public void testApplyWithNullArg() { ClassUtilTest test = new ClassUtilTest("set",0); assertEquals(test.stringProp,"set"); ClassUtil.applyMethod(test,"setStringProp",new Object[] { null }); assertEquals(test.stringProp,null); } @Test(expectedExceptions = IllegalArgumentException.class,expectedExceptionsMessageRegExp = ".*NoSuchMethod.*") public void testApplyWithArgsFail1() { Map<String,String> map = new HashMap<String,String>(); ClassUtil.applyMethod(map, "putBlubber", "hello", "world"); } @Test(expectedExceptions = IllegalArgumentException.class,expectedExceptionsMessageRegExp = ".*NoSuchMethod.*") public void testApplyWithFail2() { ClassUtilTest test = new ClassUtilTest(); ClassUtil.applyMethod(test,"setStringProp",Boolean.TRUE); } @Test(expectedExceptions = IllegalArgumentException.class,expectedExceptionsMessageRegExp = ".*NoSuchMethodException.*") public void testApplyFail1() { ClassUtil.applyMethod(new Object(),"bullablu"); } @Test public void testNewInstanceWithConstructor() { ClassUtilTest test = ClassUtil.newInstance(getClass().getCanonicalName(),"eins",2); assertEquals(test.getClass(),getClass()); assertEquals(test.stringProp,"eins"); assertEquals(test.intProp,2); } @Test(expectedExceptions = IllegalArgumentException.class,expectedExceptionsMessageRegExp = ".*Blub.*") public void testNewInstanceNotFound() { ClassUtil.newInstance(getClass().getCanonicalName() + "$Blub"); } private void checkResources() { assertNotNull(ClassUtil.getResourceAsStream("access-sample1.xml")); assertNull(ClassUtil.getResourceAsStream("plumperquatsch")); } public static class MyCl extends ClassLoader { protected MyCl(ClassLoader cl) { super(cl); } @Override public Class<?> loadClass(String name) throws ClassNotFoundException { if (name.equals("org.jolokia.util.RequestType")) { throw new ClassNotFoundException(); } return super.loadClass(name); } } }