package com.tngtech.archunit.core.importer.resolvers; import java.net.URI; import java.net.URISyntaxException; import com.tngtech.archunit.base.Optional; import com.tngtech.archunit.core.domain.JavaClass; import com.tngtech.archunit.core.importer.resolvers.ClassResolver.ClassUriImporter; import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import static com.tngtech.archunit.core.domain.TestUtils.javaClassViaReflection; import static com.tngtech.archunit.testutil.Assertions.assertThat; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; public class ClassResolverFromClassPathTest { @Rule public final MockitoRule mockitoRule = MockitoJUnit.rule(); @Mock private ClassUriImporter uriImporter; private ClassResolverFromClasspath resolver = new ClassResolverFromClasspath(); @Test public void finds_uri_of_class_on_classpath() throws URISyntaxException { JavaClass expectedJavaClass = javaClassViaReflection(Object.class); when(uriImporter.tryImport(uriOf(Object.class))).thenReturn(Optional.of(expectedJavaClass)); resolver.setClassUriImporter(uriImporter); Optional<JavaClass> result = resolver.tryResolve(Object.class.getName()); assertThat(result).contains(expectedJavaClass); } @Test public void is_resilient_if_URI_cant_be_located() throws URISyntaxException { resolver.setClassUriImporter(uriImporter); Optional<JavaClass> result = resolver.tryResolve("sooo.Wrong"); assertThat(result).isAbsent(); verifyNoMoreInteractions(uriImporter); } private URI uriOf(Class<?> clazz) throws URISyntaxException { return getClass().getResource("/" + clazz.getName().replace('.', '/') + ".class").toURI(); } }