blob: b846ce6db1ff44ce45ffae646b100862a87c2497 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package org.apache.openjpa.lib.util;
import java.util.concurrent.TimeUnit;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
public class ClassUtilTest {
@Test
public void testToClass() {
Assert.assertEquals(this.getClass(), toClass("org.apache.openjpa.lib.util.ClassUtilTest"));
Assert.assertEquals(new ClassUtilTest[0].getClass(), toClass("org.apache.openjpa.lib.util.ClassUtilTest[]"));
Assert.assertEquals(Integer.class, toClass("java.lang.Integer"));
Assert.assertEquals(byte.class, toClass("byte"));
Assert.assertEquals(char.class, toClass("char"));
Assert.assertEquals(double.class, toClass("double"));
Assert.assertEquals(float.class, toClass("float"));
Assert.assertEquals(int.class, toClass("int"));
Assert.assertEquals(long.class, toClass("long"));
Assert.assertEquals(short.class, toClass("short"));
Assert.assertEquals(boolean.class, toClass("boolean"));
Assert.assertEquals(void.class, toClass("void"));
Assert.assertEquals(new float[0].getClass(), toClass("float[]"));
Assert.assertEquals(new float[0][0].getClass(), toClass("float[][]"));
Assert.assertEquals(new long[0][0][0].getClass(), toClass("long[][][]"));
}
@Test(expected = IllegalArgumentException.class)
public void nonExistingClass() {
toClass("does.not.Exist");
}
private Class toClass(String clazz) {
return ClassUtil.toClass(clazz, false, this.getClass().getClassLoader());
}
@Test
public void testGetClassName() {
Assert.assertEquals("ClassUtilTest", ClassUtil.getClassName(ClassUtilTest.class));
Assert.assertEquals("ClassUtilTest$MyInnerClass", ClassUtil.getClassName(MyInnerClass.class));
// anonymous class
Assert.assertEquals("ClassUtilTest$1", ClassUtil.getClassName(INSTANCE.getClass()));
// primitives
Assert.assertEquals("byte", ClassUtil.getClassName(byte.class));
Assert.assertEquals("char", ClassUtil.getClassName(char.class));
Assert.assertEquals("double", ClassUtil.getClassName(double.class));
Assert.assertEquals("float", ClassUtil.getClassName(float.class));
Assert.assertEquals("int", ClassUtil.getClassName(int.class));
Assert.assertEquals("long", ClassUtil.getClassName(long.class));
Assert.assertEquals("short", ClassUtil.getClassName(short.class));
Assert.assertEquals("boolean", ClassUtil.getClassName(boolean.class));
Assert.assertEquals("void", ClassUtil.getClassName(void.class));
// arrays
Assert.assertEquals("long[]", ClassUtil.getClassName(long[].class));
Assert.assertEquals("long[][]", ClassUtil.getClassName(long[][].class));
Assert.assertEquals("float[][][]", ClassUtil.getClassName(float[][][].class));
Assert.assertEquals("ClassUtilTest[]", ClassUtil.getClassName(ClassUtilTest[].class));
Assert.assertEquals("ClassUtilTest$MyInnerClass[]", ClassUtil.getClassName(MyInnerClass[].class));
Assert.assertEquals("ClassUtilTest$MyInnerClass[][]", ClassUtil.getClassName(MyInnerClass[][].class));
}
@Test
@Ignore("only needed for manual performance tests")
public void testGetClassNamePerformance() {
long start = System.nanoTime();
for (int i = 1; i < 10000000; i++) {
//X String className = Strings.getClassName(MyInnerClass.class);
ClassUtil.getClassName(MyInnerClass.class);
}
long stop = System.nanoTime();
System.out.println("took: " + TimeUnit.NANOSECONDS.toMillis(stop - start));
}
@Test
public void testGetPackageName() {
Assert.assertEquals("org.apache.openjpa.lib.util", ClassUtil.getPackageName(ClassUtilTest.class));
Assert.assertEquals("org.apache.openjpa.lib.util", ClassUtil.getPackageName(MyInnerClass.class));
Assert.assertEquals("org.apache.openjpa.lib.util", ClassUtil.getPackageName(MyInnerClass[].class));
Assert.assertEquals("org.apache.openjpa.lib.util", ClassUtil.getPackageName(INSTANCE.getClass()));
Assert.assertEquals("", ClassUtil.getPackageName(long.class));
Assert.assertEquals("", ClassUtil.getPackageName(long[].class));
}
private static abstract class MyInnerClass {
// not needed
}
private static final MyInnerClass INSTANCE = new MyInnerClass() {
};
}