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);
            }
        }