use of com.tngtech.archunit.core.importer.ClassFileImporter in project solarthing by wildmountainfarms.
the class ArchTest method testClassesThatMustImplementEquals.
@Test
void testClassesThatMustImplementEquals() {
JavaClasses importedClasses = new ClassFileImporter().importPackages("me.retrodaredevil.solarthing");
Collection<JavaClass> classesToCheck = new ArrayList<>();
// we want to be able to compare all execution reasons
classesToCheck.addAll(importedClasses.get(ExecutionReason.class).getAllSubclasses());
// required for OpenSourceExecutionReason
classesToCheck.addAll(importedClasses.get(OpenSourcePacket.class).getAllSubclasses());
classesToCheck.addAll(importedClasses.get(ActivePeriod.class).getAllSubclasses());
// DeleteAlterPacket uses this, and DeleteAlterPacket must implement equals correctly
classesToCheck.addAll(importedClasses.get(UpdateToken.class).getAllSubclasses());
for (JavaClass javaClass : classesToCheck) {
if (javaClass.isInterface()) {
continue;
}
boolean doesClassOverrideEquals = javaClass.getMethods().stream().anyMatch(method -> "equals".equals(method.getName()));
if (!doesClassOverrideEquals) {
fail("equals is not implemented for " + javaClass);
}
}
}
use of com.tngtech.archunit.core.importer.ClassFileImporter in project gradle by gradle.
the class ArchUnitFixtureTest method checkThatMethodHasOnlyAllowedArgumentTypesOrReturnTypes.
@Nonnull
private ConditionEvent checkThatMethodHasOnlyAllowedArgumentTypesOrReturnTypes(String methodName, Class<?>... arguments) {
ArchCondition<JavaMethod> archCondition = haveOnlyArgumentsOrReturnTypesThatAre(resideInAnyPackage("java.lang").or(primitive).or(resideInAnyPackage("java.util")).as("allowed"));
JavaClass javaClass = new ClassFileImporter().importClass(AllowedMethodTypesClass.class);
JavaMethod validMethod = javaClass.getMethod(methodName, arguments);
ConditionEvents events = new ConditionEvents();
archCondition.check(validMethod, events);
assertThat(events).hasSize(1);
return events.iterator().next();
}
use of com.tngtech.archunit.core.importer.ClassFileImporter in project archifacts by archifacts.
the class C4ModelBuilderTest method assert_that_containers_are_added_to_the_c4_model.
@Test
void assert_that_containers_are_added_to_the_c4_model() {
final JavaClasses javaClasses = new ClassFileImporter().importPackages("org.archifacts.integration.c4.model.domain");
final Application application = Application.builder().descriptor(defaultContainerDescriptor).buildApplication(javaClasses);
final C4ModelBuilder c4ModelBuilder = C4Model.builder(new Workspace(this.getClass().getSimpleName(), null));
application.getArtifacts().stream().map(Artifact::getContainer).filter(Optional::isPresent).map(Optional::get).distinct().forEach(c4ModelBuilder::container);
final C4Model c4Model = c4ModelBuilder.build();
final Set<Container> containers = c4Model.softwareSystem().getContainers();
assertThat(containers).hasSize(1).extracting(Container::getName, Container::getTechnology).containsExactly(tuple("DefaultContainer", "ContainerType1"));
final Set<Component> components = containers.iterator().next().getComponents();
assertThat(components).isEmpty();
}
use of com.tngtech.archunit.core.importer.ClassFileImporter in project archifacts by archifacts.
the class C4ModelBuilderTest method assert_that_misc_artifacts_are_added_to_the_c4_model.
@Test
void assert_that_misc_artifacts_are_added_to_the_c4_model() {
final JavaClasses javaClasses = new ClassFileImporter().importPackages("org.archifacts.integration.c4.model.domain");
final Application application = Application.builder().descriptor(buildingBlockType1Descriptor).descriptor(defaultContainerDescriptor).descriptor(referenceDescriptor).buildApplication(javaClasses);
final C4ModelBuilder c4ModelBuilder = C4Model.builder(new Workspace(this.getClass().getSimpleName(), null));
application.getArtifacts().stream().filter(MiscArtifact.class::isInstance).forEach(c4ModelBuilder::artifact);
final C4Model c4Model = c4ModelBuilder.build();
final Set<Container> containers = c4Model.softwareSystem().getContainers();
assertThat(containers).hasSize(1).extracting(Container::getName, Container::getTechnology).containsExactly(tuple("DefaultContainer", "ContainerType1"));
final Set<Component> components = containers.iterator().next().getComponents();
assertThat(components).hasSize(1).extracting(Component::getName, Component::getTechnology).containsExactly(tuple("MiscArtifact1", "Misc"));
}
use of com.tngtech.archunit.core.importer.ClassFileImporter in project archifacts by archifacts.
the class C4ModelBuilderTest method assert_that_computation_rule_is_applied_to_relationship.
@Test
void assert_that_computation_rule_is_applied_to_relationship() {
final JavaClasses javaClasses = new ClassFileImporter().importPackages("org.archifacts.integration.c4.model.domain");
final Application application = Application.builder().descriptor(buildingBlockType1Descriptor).descriptor(defaultContainerDescriptor).descriptor(referenceDescriptor).buildApplication(javaClasses);
final C4ModelBuilder c4ModelBuilder = C4Model.builder(new Workspace(this.getClass().getSimpleName(), null));
application.getArtifacts().stream().forEach(c4ModelBuilder::artifact);
application.getRelationships().stream().forEach(c4ModelBuilder::relationship);
final BuildingBlock source = application.getBuildingBlocksOfType(buildingBlockType1).iterator().next();
final Artifact target = application.getArtifacts().stream().filter(MiscArtifact.class::isInstance).findFirst().get();
c4ModelBuilder.relartionshipRule().predicate(a -> true).computation((relationship, lookup) -> Set.of(lookup.component(source).uses(lookup.component(target), "uses"), lookup.component(target).uses(lookup.component(source), "is used by")));
final C4Model c4Model = c4ModelBuilder.build();
final Set<Container> containers = c4Model.softwareSystem().getContainers();
assertThat(containers).hasSize(1).extracting(Container::getName, Container::getTechnology).containsExactly(tuple("DefaultContainer", "ContainerType1"));
final Container container = containers.iterator().next();
final Component class1ForBuildingBlockType1 = container.getComponentWithName("Class1ForBuildingBlockType1");
assertThat(class1ForBuildingBlockType1).isNotNull();
final Component miscArtifact1 = container.getComponentWithName("MiscArtifact1");
assertThat(miscArtifact1).isNotNull();
assertThat(container.getComponents()).flatMap(Component::getRelationships).hasSize(2).extracting(Relationship::getDescription, Relationship::getSource, Relationship::getDestination).containsExactlyInAnyOrder(tuple("uses", class1ForBuildingBlockType1, miscArtifact1), tuple("is used by", miscArtifact1, class1ForBuildingBlockType1));
}
Aggregations