Duplicate tests
This commit is contained in:
@ -0,0 +1,142 @@
|
|||||||
|
/*
|
||||||
|
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.sourceforge.pmd.lang.java.types;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.function.ThrowingRunnable;
|
||||||
|
import org.junit.rules.ExpectedException;
|
||||||
|
|
||||||
|
import net.sourceforge.pmd.lang.java.ast.ASTAnnotationTypeDeclaration;
|
||||||
|
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
|
||||||
|
import net.sourceforge.pmd.lang.java.ast.ASTEnumDeclaration;
|
||||||
|
import net.sourceforge.pmd.lang.java.ast.ASTMarkerAnnotation;
|
||||||
|
import net.sourceforge.pmd.lang.java.ast.ASTName;
|
||||||
|
import net.sourceforge.pmd.lang.java.ast.TypeNode;
|
||||||
|
import net.sourceforge.pmd.lang.java.symboltable.BaseNonParserTest;
|
||||||
|
|
||||||
|
public class TypeTestUtilTest extends BaseNonParserTest {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final ExpectedException expect = ExpectedException.none();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIsAFallback() {
|
||||||
|
|
||||||
|
ASTClassOrInterfaceDeclaration klass =
|
||||||
|
java.parse("package org; import java.io.Serializable; "
|
||||||
|
+ "class FooBar implements Serializable {}")
|
||||||
|
.getFirstDescendantOfType(ASTClassOrInterfaceDeclaration.class);
|
||||||
|
|
||||||
|
|
||||||
|
Assert.assertNull(klass.getType());
|
||||||
|
Assert.assertTrue(TypeTestUtil.isA("org.FooBar", klass));
|
||||||
|
Assert.assertTrue(TypeTestUtil.isA("java.io.Serializable", klass));
|
||||||
|
Assert.assertTrue(TypeTestUtil.isA(Serializable.class, klass));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIsAFallbackEnum() {
|
||||||
|
|
||||||
|
ASTEnumDeclaration klass =
|
||||||
|
java.parse("package org; "
|
||||||
|
+ "enum FooBar implements Iterable {}")
|
||||||
|
.getFirstDescendantOfType(ASTEnumDeclaration.class);
|
||||||
|
|
||||||
|
|
||||||
|
Assert.assertNull(klass.getType());
|
||||||
|
Assert.assertTrue(TypeTestUtil.isA("org.FooBar", klass));
|
||||||
|
assertIsA(klass, Iterable.class);
|
||||||
|
assertIsA(klass, Enum.class);
|
||||||
|
assertIsA(klass, Serializable.class);
|
||||||
|
assertIsA(klass, Object.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIsAFallbackAnnotation() {
|
||||||
|
|
||||||
|
ASTAnnotationTypeDeclaration klass =
|
||||||
|
java.parse("package org; import foo.Stuff;"
|
||||||
|
+ "public @interface FooBar {}")
|
||||||
|
.getFirstDescendantOfType(ASTAnnotationTypeDeclaration.class);
|
||||||
|
|
||||||
|
|
||||||
|
Assert.assertNull(klass.getType());
|
||||||
|
Assert.assertTrue(TypeTestUtil.isA("org.FooBar", klass));
|
||||||
|
assertIsA(klass, Annotation.class);
|
||||||
|
assertIsA(klass, Object.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If we don't have the annotation on the classpath,
|
||||||
|
* we should resolve the full name via the import, if possible
|
||||||
|
* and compare then. Only after that, we should compare the
|
||||||
|
* simple names.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testIsAFallbackAnnotationSimpleNameImport() {
|
||||||
|
ASTName annotation = java.parse("package org; import foo.Stuff; @Stuff public class FooBar {}")
|
||||||
|
.getFirstDescendantOfType(ASTMarkerAnnotation.class).getFirstChildOfType(ASTName.class);
|
||||||
|
|
||||||
|
Assert.assertNull(annotation.getType());
|
||||||
|
Assert.assertTrue(TypeTestUtil.isA("foo.Stuff", annotation));
|
||||||
|
Assert.assertFalse(TypeTestUtil.isA("other.Stuff", annotation));
|
||||||
|
// if the searched class name is not fully qualified, then the search should still be successfull
|
||||||
|
Assert.assertTrue(TypeTestUtil.isA("Stuff", annotation));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNullNode() {
|
||||||
|
Assert.assertFalse(TypeTestUtil.isA(String.class, null));
|
||||||
|
Assert.assertFalse(TypeTestUtil.isA("java.lang.String", null));
|
||||||
|
Assert.assertFalse(TypeTestUtil.isExactlyA(String.class, null));
|
||||||
|
Assert.assertFalse(TypeTestUtil.isExactlyA("java.lang.String", null));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNullClass() {
|
||||||
|
final ASTName node = java.parse("package org; import foo.Stuff; @Stuff public class FooBar {}")
|
||||||
|
.getFirstDescendantOfType(ASTMarkerAnnotation.class).getFirstChildOfType(ASTName.class);
|
||||||
|
Assert.assertNotNull(node);
|
||||||
|
|
||||||
|
Assert.assertThrows(NullPointerException.class, new ThrowingRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
TypeTestUtil.isA((String) null, node);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Assert.assertThrows(NullPointerException.class, new ThrowingRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
TypeTestUtil.isA((Class<?>) null, node);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Assert.assertThrows(NullPointerException.class, new ThrowingRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
TypeTestUtil.isExactlyA((Class<?>) null, node);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Assert.assertThrows(NullPointerException.class, new ThrowingRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
TypeTestUtil.isExactlyA((String) null, node);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertIsA(TypeNode node, Class<?> type) {
|
||||||
|
Assert.assertTrue("TypeTestUtil::isA with class arg: " + type.getCanonicalName(),
|
||||||
|
TypeTestUtil.isA(type, node));
|
||||||
|
Assert.assertTrue("TypeTestUtil::isA with string arg: " + type.getCanonicalName(),
|
||||||
|
TypeTestUtil.isA(type.getCanonicalName(), node));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user