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 GetNamespaceIdentifierAssociatedWithClass() { using (MemoryStream memoryStream = new MemoryStream()) { string expectedNamespaceIdentifier = typeof(SomeOriginClass).Namespace; ClassDiagramAssociation classDiagramAssociation = CreateAssociation(TestDiagram.From(memoryStream) .Component("A").WithStereoTypes(expectedNamespaceIdentifier) .Component("B").WithStereoTypes(".*.Noclasshere") .Write()); Class clazz = Architecture.GetClassOfType(typeof(SomeOriginClass)); Assert.Equal(expectedNamespaceIdentifier, classDiagramAssociation.GetNamespaceIdentifiersFromComponentOf(clazz).Single()); } }