use of com.tngtech.archunit.lang.EvaluationResult in project ArchUnit by TNG.
the class CodeUnitsShouldTest method restricted_code_units_calls_by_methods_predicate.
@Test
@UseDataProvider("restricted_code_unit_calls_by_methods_rules")
public void restricted_code_units_calls_by_methods_predicate(ArchRule rule) {
EvaluationResult result = rule.evaluate(importClasses(ClassWithMethodAndConstructor.class, ClassCorrectlyCallingMethodAndConstructor.class, ClassWronglyCallingMethodAndConstructor.class));
assertThat(singleLineFailureReportOf(result)).contains("Rule 'code units should only be called by methods that").containsPattern(String.format("Method <%s.%s> calls method <%s.%s>", quote(ClassWronglyCallingMethodAndConstructor.class.getName()), quote(METHOD_CALL_WRONGLY), quote(ClassWithMethodAndConstructor.class.getName()), quote(METHOD_ONE_ARG))).containsPattern(String.format("Method <%s.%s> calls constructor <%s.%s>", quote(ClassWronglyCallingMethodAndConstructor.class.getName()), quote(METHOD_CALL_WRONGLY), quote(ClassWithMethodAndConstructor.class.getName()), quote(CONSTRUCTOR_ONE_ARG))).containsPattern(String.format("Constructor <%s.%s> calls constructor <%s.%s>", quote(ClassCorrectlyCallingMethodAndConstructor.class.getName()), quote(CONSTRUCTOR_ONE_ARG), quote(ClassWithMethodAndConstructor.class.getName()), quote(CONSTRUCTOR_ONE_ARG))).containsPattern(String.format("Constructor <%s.%s> calls method <%s.%s>", quote(ClassCorrectlyCallingMethodAndConstructor.class.getName()), quote(CONSTRUCTOR_ONE_ARG), quote(ClassWithMethodAndConstructor.class.getName()), quote(METHOD_ONE_ARG)));
}
use of com.tngtech.archunit.lang.EvaluationResult in project ArchUnit by TNG.
the class CodeUnitsShouldTest method types_match_for_methods.
@Test
public void types_match_for_methods() {
EvaluationResult result = methods().that().arePrivate().should(new ArchCondition<JavaMember>("exist") {
@Override
public void check(JavaMember item, ConditionEvents events) {
}
}).andShould(new ArchCondition<JavaMethod>("not exist") {
@Override
public void check(JavaMethod method, ConditionEvents events) {
events.add(SimpleConditionEvent.violated(method, "expected violation"));
}
}).evaluate(importClasses(ClassWithVariousMembers.class));
assertThat(Joiner.on(" ").join(result.getFailureReport().getDetails())).contains("expected violation");
}
use of com.tngtech.archunit.lang.EvaluationResult in project ArchUnit by TNG.
the class FieldsShouldTest method property_predicates.
@Test
@UseDataProvider("restricted_property_rule_ends")
public void property_predicates(ArchRule rule, Collection<String> expectedViolatingFields) {
EvaluationResult result = rule.evaluate(importClasses(ClassWithVariousMembers.class));
Set<String> actualFields = parseMembers(ClassWithVariousMembers.class, result.getFailureReport().getDetails());
assertThat(actualFields).containsOnlyElementsOf(expectedViolatingFields);
}
use of com.tngtech.archunit.lang.EvaluationResult in project ArchUnit by TNG.
the class ViolationHandlingTest method multiple_accesses_necessary_for_violation_are_reported_together.
@Test
public void multiple_accesses_necessary_for_violation_are_reported_together() {
EvaluationResult result = classes().should().accessField(Target.class, "notExisting").evaluate(importClasses(Origin.class, Target.class));
FieldAccessRecorder fieldAccessRecorder = new FieldAccessRecorder();
result.handleViolations(fieldAccessRecorder);
assertThat(fieldAccessRecorder.getRecords()).as("number of violations").hasSize(1);
ReportedViolation<JavaFieldAccess> reportedViolation = getOnlyElement(fieldAccessRecorder.getRecords());
assertThatAccesses(reportedViolation.accesses).contain(accessToTargetField("fieldOne")).contain(accessToTargetField("fieldTwo")).contain(accessToTargetField("fieldThree"));
}
use of com.tngtech.archunit.lang.EvaluationResult in project ArchUnit by TNG.
the class ViolationHandlingTest method method_calls_are_handled.
@Test
public void method_calls_are_handled() {
EvaluationResult result = noClasses().should().accessClassesThat().haveFullyQualifiedName(Target.class.getName()).evaluate(importClasses(Origin.class, Target.class));
MethodCallRecorder methodCallRecorder = new MethodCallRecorder();
result.handleViolations(methodCallRecorder);
assertThatAccesses(methodCallRecorder.getAccesses()).containOnly(expectedAccess().from(Origin.class, "call").to(Target.class, "callMeOne"), expectedAccess().from(Origin.class, "call").to(Target.class, "callMeTwo"));
}
Aggregations