private static ICondition <TRuleType> createPlantUmlCondition(PlantUmlDiagram diagram) { ClassDiagramAssociation classDiagramAssociation = new ClassDiagramAssociation(diagram); ConditionResult Condition(TRuleType ruleType) { if (ruleType.Dependencies.All(d => !classDiagramAssociation.Contains(d.Target))) { return(new ConditionResult(ruleType, true)); } List <string> allAllowedTargets = new List <string>(); allAllowedTargets.AddRange(classDiagramAssociation.GetNamespaceIdentifiersFromComponentOf(ruleType) .Concat(classDiagramAssociation.GetTargetNamespaceIdentifiers(ruleType)) .ToList()); var pass = true; var dynamicFailDescription = "does depend on"; foreach (var dependency in ruleType.GetTypeDependencies()) { if (classDiagramAssociation.Contains(dependency) && !allAllowedTargets.Any(pattern => dependency.FullNameMatches(pattern, true))) { dynamicFailDescription += pass ? " " + dependency.FullName : " and " + dependency.FullName; pass = false; } } return(new ConditionResult(ruleType, pass, dynamicFailDescription)); } return(new SimpleCondition <TRuleType>(Condition, "adhere to PlantUML diagram.")); }
public void ReportsIfClassIsContainedInAnyComponent() { using (MemoryStream memoryStream = new MemoryStream()) { ClassDiagramAssociation classDiagramAssociation = CreateAssociation(TestDiagram.From(memoryStream) .Component("Object").WithStereoTypes(typeof(object).Namespace) .Write()); Assert.True(classDiagramAssociation.Contains(Architecture.GetClassOfType(typeof(object))), "association contains " + typeof(object).Name); Assert.False(classDiagramAssociation.Contains(Architecture.GetClassOfType(typeof(Class2))), "association contains " + typeof(Class2).Name); } }