blob: 7031a447f870254025f8ebba97c782f41d3d5262 [file] [log] [blame]
/*
* Copyright 2017 HugeGraph Authors
*
* 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 com.baidu.hugegraph.unit.util;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;
import org.apache.commons.collections.IteratorUtils;
import org.junit.Test;
import com.baidu.hugegraph.perf.PerfUtil.Watched;
import com.baidu.hugegraph.testutil.Assert;
import com.baidu.hugegraph.unit.BaseUnitTest;
import com.baidu.hugegraph.unit.perf.testclass.TestClass;
import com.baidu.hugegraph.unit.perf.testclass.TestClass.Bar;
import com.baidu.hugegraph.unit.perf.testclass.TestClass.Base;
import com.baidu.hugegraph.unit.perf.testclass.TestClass.Foo;
import com.baidu.hugegraph.unit.perf.testclass.TestClass.ManuallyProfile;
import com.baidu.hugegraph.unit.perf.testclass.TestClass.Sub;
import com.baidu.hugegraph.util.ReflectionUtil;
import com.google.common.reflect.ClassPath.ClassInfo;
import javassist.NotFoundException;
public class ReflectionUtilTest extends BaseUnitTest {
@Test
public void testIsSimpleType() {
Assert.assertTrue(ReflectionUtil.isSimpleType(byte.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(char.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(short.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(int.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(long.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(float.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(double.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(boolean.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(Byte.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(Character.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(Short.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(Integer.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(Long.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(Float.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(Double.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(Boolean.class));
Assert.assertTrue(ReflectionUtil.isSimpleType(String.class));
Assert.assertFalse(ReflectionUtil.isSimpleType(Object.class));
Assert.assertFalse(ReflectionUtil.isSimpleType(BaseUnitTest.class));
}
@Test
public void testGetMethodsAnnotatedWith() {
List<Method> methods;
methods = ReflectionUtil.getMethodsAnnotatedWith(Sub.class,
Watched.class,
false);
methods.sort((m1, m2) -> m1.getName().compareTo(m2.getName()));
Assert.assertEquals(2, methods.size());
Assert.assertEquals("func1", methods.get(0).getName());
Assert.assertEquals("func3", methods.get(1).getName());
methods = ReflectionUtil.getMethodsAnnotatedWith(Sub.class,
Watched.class,
true);
methods.sort((m1, m2) -> m1.getName().compareTo(m2.getName()));
Assert.assertEquals(3, methods.size());
Assert.assertEquals("func", methods.get(0).getName());
Assert.assertEquals("func1", methods.get(1).getName());
Assert.assertEquals("func3", methods.get(2).getName());
}
@Test
public void testClasses() throws IOException {
@SuppressWarnings("unchecked")
List<ClassInfo> classes = IteratorUtils.toList(ReflectionUtil.classes(
"com.baidu.hugegraph.util"));
Assert.assertEquals(17, classes.size());
classes.sort((c1, c2) -> c1.getName().compareTo(c2.getName()));
Assert.assertEquals("com.baidu.hugegraph.util.Bytes",
classes.get(0).getName());
Assert.assertEquals("com.baidu.hugegraph.util.CheckSocket",
classes.get(1).getName());
Assert.assertEquals("com.baidu.hugegraph.util.CollectionUtil",
classes.get(2).getName());
Assert.assertEquals("com.baidu.hugegraph.util.VersionUtil",
classes.get(16).getName());
}
@Test
public void testSuperClasses() throws NotFoundException {
List<String> classes = ReflectionUtil.superClasses(Sub.class.getName());
Assert.assertEquals(2, classes.size());
classes.sort((c1, c2) -> c1.compareTo(c2));
Assert.assertEquals(Base.class.getName(), classes.get(0));
Assert.assertEquals(Object.class.getName(), classes.get(1));
}
@Test
public void testNestedClasses() throws NotFoundException {
List<String> classes = ReflectionUtil.nestedClasses(
TestClass.class.getName());
Assert.assertEquals(5, classes.size());
classes.sort((c1, c2) -> c1.compareTo(c2));
Assert.assertEquals(Bar.class.getName(), classes.get(0));
Assert.assertEquals(Base.class.getName(), classes.get(1));
Assert.assertEquals(Foo.class.getName(), classes.get(2));
Assert.assertEquals(ManuallyProfile.class.getName(), classes.get(3));
Assert.assertEquals(Sub.class.getName(), classes.get(4));
}
@Test
public void testPackageName() {
String clazz = "com.baidu.hugegraph.unit.perf.testclass2.Test";
Assert.assertEquals("com.baidu.hugegraph.unit.perf.testclass2",
ReflectionUtil.packageName(clazz));
clazz = "com.baidu.hugegraph.unit.perf.testclass2.Test$Bar";
Assert.assertEquals("com.baidu.hugegraph.unit.perf.testclass2",
ReflectionUtil.packageName(clazz));
clazz = "com.baidu.hugegraph.unit.perf.testclass.Test$Bar";
Assert.assertEquals("com.baidu.hugegraph.unit.perf.testclass",
ReflectionUtil.packageName(clazz));
clazz = "com.baidu.hugegraph.unit.perf.testclass..Test$Bar";
Assert.assertEquals("com.baidu.hugegraph.unit.perf.testclass.",
ReflectionUtil.packageName(clazz));
clazz = "com";
Assert.assertEquals("", ReflectionUtil.packageName(clazz));
clazz = "com.";
Assert.assertEquals("com", ReflectionUtil.packageName(clazz));
clazz = "Test";
Assert.assertEquals("", ReflectionUtil.packageName(clazz));
clazz = ".Test";
Assert.assertEquals("", ReflectionUtil.packageName(clazz));
}
}