private ClassInfo makeClassInfo(final String name) { final ClassInfo ci = ClassInfoMother.make(name); when(this.repository.fetchClass(ClassName.fromString(name))).thenReturn( Optional.ofNullable(ci)); return ci; }
@Test public void shouldCalculateHashForSuppledClass() { this.testee.fetchClass(String.class); verify(this.hashFunction).hash(any(byte[].class)); }
@Test public void shouldReportCodeLines() { final Optional<ClassInfo> aClass = this.testee .fetchClass(RepositoryTest.class); aClass.get().isCodeLine(139); // flakey }
@Test public void shouldReportCodeLines() { final Optional<ClassInfo> aClass = this.testee .fetchClass(RepositoryTest.class); aClass.get().isCodeLine(139); // flakey }
private void setupClassPath(final ClassByteArraySource source, final String clazz) { final Repository repository = new Repository(source); final ClassInfo ci = repository.fetchClass(ClassName.fromString(clazz)) .get(); when(this.code.getCode()).thenReturn(Collections.singletonList(ci)); }
@Test public void shouldProvideDetailsOfRequestedClasses() { when(this.repository.fetchClass(ClassName.fromString("Foo"))).thenReturn( Optional.ofNullable(this.foo)); when(this.repository.fetchClass(ClassName.fromString("Unknown"))) .thenReturn(Optional.<ClassInfo> empty()); assertEquals(Arrays.asList(this.foo), this.testee.getClassInfo(Arrays .asList(ClassName.fromString("Foo"), ClassName.fromString("Unknown")))); }
@Test public void shouldDetectInterfacesAsAbstract() { final Optional<ClassInfo> anInterface = this.testee .fetchClass(Serializable.class); assertTrue(anInterface.get().isAbstract()); }
@Test public void doesNotTreatInterfacesAsPartOfClassHierachy() { final Optional<ClassInfo> aClass = this.testee.fetchClass(Bottom.class); assertFalse(aClass.get().descendsFrom(ITop.class)); }
@Test public void shouldDetectConcreteClassesAsNotInterfaces() { final Optional<ClassInfo> aClass = this.testee.fetchClass(String.class); assertFalse(aClass.get().isInterface()); }
@Test public void shouldRecordMethodLevelAnnotations() { final Optional<ClassInfo> aClass = this.testee .fetchClass(HasAnnotatedMethod.class); assertTrue(aClass.get().hasAnnotation(Test.class)); }
@Test public void shouldReturnNoneWhenAskedForUnknownClass() { assertEquals(Optional.empty(), this.testee.fetchClass(ClassName.fromString("never.heard.of.you"))); }
@Test public void shouldRecordSourceFile() { final Optional<ClassInfo> aClass = this.testee.fetchClass(String.class); assertEquals("String.java", aClass.get().getSourceFileName()); }
@Test public void shouldOnlyQuerySourceForAnUnknownClassOnce() { this.testee = new Repository(this.source); when(this.source.getBytes(anyString())).thenReturn(Optional.<byte[]> empty()); this.testee.hasClass(ClassName.fromString("foo")); this.testee.fetchClass(ClassName.fromString("foo")); verify(this.source, times(1)).getBytes("foo"); }
@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 shouldFetchClassWhenApplied() { final Repository repository = mock(Repository.class); final NameToClassInfo testee = new NameToClassInfo(repository); testee.apply(ClassName.fromString("foo")); verify(repository).fetchClass(ClassName.fromString("foo")); }
@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 shouldReportSuperClass() { final Optional<ClassInfo> aClass = this.testee.fetchClass(Bar.class); assertEquals(ClassName.fromClass(Foo.class), aClass.get().getSuperClass() .get().getName()); }
@Test public void shouldFetchClassWhenApplied() { final Repository repository = mock(Repository.class); final NameToClassInfo testee = new NameToClassInfo(repository); testee.apply(ClassName.fromString("foo")); verify(repository).fetchClass(ClassName.fromString("foo")); }
@Test public void shouldCorrectlyNegotiateClassHierachies() { final Optional<ClassInfo> aClass = this.testee.fetchClass(Bottom.class); assertTrue(aClass.get().descendsFrom(Middle.class)); assertTrue(aClass.get().descendsFrom(Top.class)); assertTrue(aClass.get().descendsFrom(Object.class)); assertFalse(aClass.get().descendsFrom(String.class)); }
@Test public void shouldCorrectlyNegotiateClassHierachies() { final Optional<ClassInfo> aClass = this.testee.fetchClass(Bottom.class); assertTrue(aClass.get().descendsFrom(Middle.class)); assertTrue(aClass.get().descendsFrom(Top.class)); assertTrue(aClass.get().descendsFrom(Object.class)); assertFalse(aClass.get().descendsFrom(String.class)); }