private boolean descendsFrom(final ClassName clazz) { if (!this.getSuperClass().isPresent()) { return false; } if (this.getSuperClass().get().getName().equals(clazz)) { return true; } return getSuperClass().get().descendsFrom(clazz); }
private void makeTestee() { this.testee = new ClassInfo(null, null, this.data); }
public static Function<ClassInfo, HierarchicalClassId> toFullClassId() { return a -> a.getHierarchicalId(); } }
public BigInteger getDeepHash() { BigInteger hash = getHash(); final Optional<ClassInfo> parent = getParent(); if (parent.isPresent()) { hash = hash.add(parent.get().getHash()); } final Optional<ClassInfo> outer = getOuterClass(); if (outer.isPresent()) { hash = hash.add(outer.get().getHash()); } return hash; }
private SideEffect1<ClassInfo> throwErrorIfHasNoSourceFile() { return a -> { if (a.getSourceFileName() == null) { throw new PitHelpError(Help.NO_SOURCE_FILE, a.getName().asJavaName()); } }; }
@Test public void shouldReportSuperClassAsObjectWhenNoneDeclared() { final Optional<ClassInfo> aClass = this.testee.fetchClass(Foo.class); assertEquals(ClassName.fromClass(Object.class), aClass.get().getSuperClass() .get().getName()); }
@Test public void shouldCreateDifferentHierarchicalHashWhenParentClassChanges() { final ClassInfo parent = new ClassInfo(emptyClassPointer(), emptyClassPointer(), this.data); final ClassInfo classA = new ClassInfo(emptyClassPointer(), emptyClassPointer(), this.data); final ClassInfo classB = new ClassInfo(pointerTo(parent), emptyClassPointer(), this.data); assertFalse(classA.getHierarchicalId().getHierarchicalHash() .equals(classB.getHierarchicalId().getHierarchicalHash())); }
public static Function<ClassInfo, ClassName> toClassName() { return a -> a.getName(); }
@Test public void shouldReportWhenClassIsSynthetic() { this.data.access = Opcodes.ACC_SYNTHETIC | Opcodes.ACC_PUBLIC; final ClassInfo testee = new ClassInfo(emptyClassPointer(), emptyClassPointer(), this.data); assertTrue(testee.isSynthetic()); }
private String getOuterClassNameFor(final Class<?> clazz) { return this.testee.fetchClass(clazz).get().getOuterClass().get() .getName().asInternalName(); }
private static boolean isJUnit4Test(final ClassInfo clazz) { return clazz.hasAnnotation(RunWith.class) || clazz.hasAnnotation(Test.class); }
private static boolean isJUnit3Test(final ClassInfo clazz) { return clazz.descendsFrom(junit.framework.TestCase.class) || clazz.descendsFrom(junit.framework.TestSuite.class); }
private boolean isCodeLine(final int line) { return FCollection.contains(this.classesInFile, a -> a.isCodeLine(line)); }
public static Predicate<ClassInfo> matchIfAbstract() { return a -> a.isAbstract(); }
private static boolean isATest(final ClassInfo clazz) { return isJUnit3Test(clazz) || isJUnit4Test(clazz) || isATest(clazz.getSuperClass()); }
public boolean isTopLevelClass() { return !getOuterClass().isPresent(); }
@Test public void shouldRecordSourceFile() { final Optional<ClassInfo> aClass = this.testee.fetchClass(String.class); assertEquals("String.java", aClass.get().getSourceFileName()); }
@Test public void shouldReportSuperClass() { final Optional<ClassInfo> aClass = this.testee.fetchClass(Bar.class); assertEquals(ClassName.fromClass(Foo.class), aClass.get().getSuperClass() .get().getName()); }
@Test public void shouldCreateDifferentHierarchicalHashWhenOuterClassChanges() { final ClassInfo outer = new ClassInfo(emptyClassPointer(), emptyClassPointer(), this.data); final ClassInfo classA = new ClassInfo(emptyClassPointer(), emptyClassPointer(), this.data); final ClassInfo classB = new ClassInfo(emptyClassPointer(), pointerTo(outer), this.data); assertFalse(classA.getHierarchicalId().getHierarchicalHash() .equals(classB.getHierarchicalId().getHierarchicalHash())); }
private static Function<ClassInfo, String> classInfoToName() { return a -> a.getName().asInternalName(); }