| /* |
| * 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() { |
| }; |
| |
| } |