diff --git a/ArchUnitNET/Fluent/Syntax/Elements/ObjectConditionsDefinition.cs b/ArchUnitNET/Fluent/Syntax/Elements/ObjectConditionsDefinition.cs index f60ba30af..7de8b78c1 100644 --- a/ArchUnitNET/Fluent/Syntax/Elements/ObjectConditionsDefinition.cs +++ b/ArchUnitNET/Fluent/Syntax/Elements/ObjectConditionsDefinition.cs @@ -1439,7 +1439,7 @@ IEnumerable Condition(IEnumerable ruleTypes, Archite { var dynamicFailDescription = "does depend on"; var first = true; - foreach (var type in failedObject.GetTypeDependencies().Union(typeList)) + foreach (var type in failedObject.GetTypeDependencies().Intersect(typeList)) { dynamicFailDescription += first ? " " + type.FullName : " and " + type.FullName; first = false; @@ -1471,7 +1471,7 @@ IEnumerable Condition(IEnumerable ruleTypes) { var dynamicFailDescription = "does depend on"; var first = true; - foreach (var type in failedObject.GetTypeDependencies().Union(typeList)) + foreach (var type in failedObject.GetTypeDependencies().Intersect(typeList)) { dynamicFailDescription += first ? " " + type.FullName : " and " + type.FullName; first = false; @@ -1516,7 +1516,7 @@ IEnumerable Condition(IEnumerable ruleTypes, Archite { var dynamicFailDescription = "does depend on"; var first = true; - foreach (var type in failedObject.GetTypeDependencies().Union(iTypeList)) + foreach (var type in failedObject.GetTypeDependencies().Intersect(iTypeList)) { dynamicFailDescription += first ? " " + type.FullName : " and " + type.FullName; first = false; diff --git a/ArchUnitNETTests/Fluent/DependencyErrorMessageTests.cs b/ArchUnitNETTests/Fluent/DependencyErrorMessageTests.cs new file mode 100644 index 000000000..95af9e9db --- /dev/null +++ b/ArchUnitNETTests/Fluent/DependencyErrorMessageTests.cs @@ -0,0 +1,77 @@ +// Copyright 2019 Florian Gather +// Copyright 2019 Fritz Brandhuber +// Copyright 2020 Pavel Fischer +// +// SPDX-License-Identifier: Apache-2.0 +// + +using System.Linq; +using ArchUnitNET.Domain; +using ArchUnitNET.Loader; +using Xunit; +using static ArchUnitNET.Fluent.ArchRuleDefinition; + +namespace ArchUnitNETTests.Fluent +{ + public class DependencyErrorMessageTests + { + private static readonly Architecture Architecture = + StaticTestArchitectures.ArchUnitNETTestArchitecture; + + [Fact] + public void ErrorMessageType() + { + var rule = Classes().That() + .HaveFullNameMatching(typeof(DependencyErrorMessageTestClass).FullName) + .Should().NotDependOnAny(typeof(ErrorMessageClass1), typeof(ErrorMessageClass2)); + var failDescription = rule.Evaluate(Architecture).ToList().First().Description; + Assert.DoesNotContain(typeof(string).FullName, failDescription); + Assert.DoesNotContain(typeof(ErrorMessageClass2).FullName, failDescription); + Assert.Contains(typeof(ErrorMessageClass1).FullName, failDescription); + } + + [Fact] + public void ErrorMessageIType() + { + var dependencyClass = Classes().That().HaveFullNameMatching(typeof(ErrorMessageClass1).FullName).Or().HaveFullNameMatching(typeof(ErrorMessageClass2).FullName) + .GetObjects(Architecture).ToList(); + var rule = Classes().That() + .HaveFullNameMatching(typeof(DependencyErrorMessageTestClass).FullName) + .Should().NotDependOnAny(dependencyClass); + var failDescription = rule.Evaluate(Architecture).ToList().First().Description; + Assert.DoesNotContain(typeof(string).FullName, failDescription); + Assert.DoesNotContain(typeof(ErrorMessageClass2).FullName, failDescription); + Assert.Contains(typeof(ErrorMessageClass1).FullName, failDescription); + } + + [Fact] + public void ErrorMessageIObjectProvider() + { + var dependencyClass = Classes().That().HaveFullNameMatching(typeof(ErrorMessageClass1).FullName).Or() + .HaveFullNameMatching(typeof(ErrorMessageClass2).FullName); + var rule = Classes().That() + .HaveFullNameMatching(typeof(DependencyErrorMessageTestClass).FullName) + .Should().NotDependOnAny(dependencyClass); + var failDescription = rule.Evaluate(Architecture).ToList().First().Description; + Assert.DoesNotContain(typeof(string).FullName, failDescription); + Assert.DoesNotContain(typeof(ErrorMessageClass2).FullName, failDescription); + Assert.Contains(typeof(ErrorMessageClass1).FullName, failDescription); + } + } + + public class DependencyErrorMessageTestClass + { + ErrorMessageClass1 testData = new ErrorMessageClass1(); + private string testString = ""; + } + + public class ErrorMessageClass1 + { + + } + + public class ErrorMessageClass2 + { + + } +}