Skip to content

Commit 6d7cfe5

Browse files
committed
BenMorris/NetArchTest#147 - add user option: SerachForDependencyInFieldConstant = false
1 parent 4047464 commit 6d7cfe5

File tree

6 files changed

+27
-17
lines changed

6 files changed

+27
-17
lines changed

sources/NetArchTest/Dependencies/DependencySearch.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ internal class DependencySearch
1414
{
1515
private readonly bool explainYourself;
1616
private readonly IDependencyFilter dependencyFilter;
17+
private readonly bool serachForDependencyInFieldConstant;
1718

1819

19-
public DependencySearch(bool explainYourself, IDependencyFilter dependencyFilter = null)
20+
public DependencySearch(bool explainYourself, bool serachForDependencyInFieldConstant = false, IDependencyFilter dependencyFilter = null)
2021
{
2122
this.explainYourself = explainYourself;
2223
this.dependencyFilter = dependencyFilter;
24+
this.serachForDependencyInFieldConstant = serachForDependencyInFieldConstant;
2325
}
2426

2527

@@ -28,42 +30,42 @@ public DependencySearch(bool explainYourself, IDependencyFilter dependencyFilter
2830
/// </summary>
2931
public IEnumerable<TypeSpec> FindTypesThatHaveDependencyOnAny(IEnumerable<TypeSpec> input, IEnumerable<string> dependencies)
3032
{
31-
return FindTypes(input, HaveDependency_CheckingStrategy.TypeOfCheck.HaveDependencyOnAny, dependencies, true);
33+
return FindTypes(input, HaveDependency_CheckingStrategy.TypeOfCheck.HaveDependencyOnAny, dependencies);
3234
}
3335

3436
/// <summary>
3537
/// Finds types that have a dependency on every item in the given list of dependencies.
3638
/// </summary>
3739
public IEnumerable<TypeSpec> FindTypesThatHaveDependencyOnAll(IEnumerable<TypeSpec> input, IEnumerable<string> dependencies)
3840
{
39-
return FindTypes(input, HaveDependency_CheckingStrategy.TypeOfCheck.HaveDependencyOnAll, dependencies, true);
41+
return FindTypes(input, HaveDependency_CheckingStrategy.TypeOfCheck.HaveDependencyOnAll, dependencies);
4042
}
4143

4244
/// <summary>
4345
/// Finds types that may have a dependency on any item in the given list of dependencies, but cannot have a dependency that is not in the list.
4446
/// </summary>
4547
public IEnumerable<TypeSpec> FindTypesThatOnlyHaveDependencyOnAnyOrNone(IEnumerable<TypeSpec> input, IEnumerable<string> dependencies)
4648
{
47-
return FindTypes(input, HaveDependency_CheckingStrategy.TypeOfCheck.OnlyHaveDependenciesOnAnyOrNone, dependencies, false);
49+
return FindTypes(input, HaveDependency_CheckingStrategy.TypeOfCheck.OnlyHaveDependenciesOnAnyOrNone, dependencies);
4850
}
4951

5052
/// <summary>
5153
/// Finds types that have a dependency on any item in the given list of dependencies, but cannot have a dependency that is not in the list.
5254
/// </summary>
5355
public IEnumerable<TypeSpec> FindTypesThatOnlyHaveDependencyOnAny(IEnumerable<TypeSpec> input, IEnumerable<string> dependencies)
5456
{
55-
return FindTypes(input, HaveDependency_CheckingStrategy.TypeOfCheck.OnlyHaveDependenciesOnAny, dependencies, false);
57+
return FindTypes(input, HaveDependency_CheckingStrategy.TypeOfCheck.OnlyHaveDependenciesOnAny, dependencies);
5658
}
5759

5860
/// <summary>
5961
/// Finds types that have a dependency on every item in the given list of dependencies, but cannot have a dependency that is not in the list.
6062
/// </summary>
6163
public IEnumerable<TypeSpec> FindTypesThatOnlyOnlyHaveDependencyOnAll(IEnumerable<TypeSpec> input, IEnumerable<string> dependencies)
6264
{
63-
return FindTypes(input, HaveDependency_CheckingStrategy.TypeOfCheck.OnlyHaveDependenciesOnAll, dependencies, false);
65+
return FindTypes(input, HaveDependency_CheckingStrategy.TypeOfCheck.OnlyHaveDependenciesOnAll, dependencies);
6466
}
6567

66-
private IEnumerable<TypeSpec> FindTypes(IEnumerable<TypeSpec> input, HaveDependency_CheckingStrategy.TypeOfCheck typeOfCheck, IEnumerable<string> dependencies, bool serachForDependencyInFieldConstant)
68+
private IEnumerable<TypeSpec> FindTypes(IEnumerable<TypeSpec> input, HaveDependency_CheckingStrategy.TypeOfCheck typeOfCheck, IEnumerable<string> dependencies)
6769
{
6870
var searchTree = new CachedNamespaceTree(dependencies);
6971
var context = new TypeCheckingContext(serachForDependencyInFieldConstant, explainYourself, dependencyFilter);
@@ -82,7 +84,7 @@ private IEnumerable<TypeSpec> FindTypes(IEnumerable<TypeSpec> input, HaveDepende
8284
public IEnumerable<TypeSpec> FindTypesThatAreUsedByAny(IEnumerable<TypeSpec> input, IEnumerable<string> users, IEnumerable<TypeSpec> allTypes)
8385
{
8486
var filterTree = new CachedNamespaceTree(users);
85-
var context = new TypeCheckingContext(false, explainYourself, dependencyFilter);
87+
var context = new TypeCheckingContext(serachForDependencyInFieldConstant, explainYourself, dependencyFilter);
8688
var strategy = new AreUsedBy_CheckingStrategy();
8789

8890

sources/NetArchTest/Functions/FunctionDelegates_Dependencies.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ internal static partial class FunctionDelegates
1212
internal static IEnumerable<TypeSpec> HaveDependencyOnAny(FunctionSequenceExecutionContext context, IEnumerable<TypeSpec> input, IEnumerable<string> dependencies, bool condition)
1313
{
1414
// Get the types that contain the dependencies
15-
var search = new DependencySearch(context.IsFailPathRun, context.DependencyFilter);
15+
var search = new DependencySearch(context.IsFailPathRun, context.UserOptions.SerachForDependencyInFieldConstant, context.DependencyFilter);
1616
var results = search.FindTypesThatHaveDependencyOnAny(input, dependencies);
1717
return input.Where(t => t.IsPassing == condition);
1818
}
@@ -21,7 +21,7 @@ internal static IEnumerable<TypeSpec> HaveDependencyOnAny(FunctionSequenceExecut
2121
internal static IEnumerable<TypeSpec> HaveDependencyOnAll(FunctionSequenceExecutionContext context, IEnumerable<TypeSpec> input, IEnumerable<string> dependencies, bool condition)
2222
{
2323
// Get the types that contain the dependencies
24-
var search = new DependencySearch(context.IsFailPathRun, context.DependencyFilter);
24+
var search = new DependencySearch(context.IsFailPathRun, context.UserOptions.SerachForDependencyInFieldConstant, context.DependencyFilter);
2525
var results = search.FindTypesThatHaveDependencyOnAll(input, dependencies);
2626

2727
return input.Where(t => t.IsPassing == condition);
@@ -30,7 +30,7 @@ internal static IEnumerable<TypeSpec> HaveDependencyOnAll(FunctionSequenceExecut
3030
/// <summary> Function for finding types that have a dependency on type other than one of the supplied types.</summary>
3131
internal static IEnumerable<TypeSpec> OnlyHaveDependenciesOnAnyOrNone(FunctionSequenceExecutionContext context, IEnumerable<TypeSpec> input, IEnumerable<string> dependencies, bool condition)
3232
{
33-
var search = new DependencySearch(context.IsFailPathRun, context.DependencyFilter);
33+
var search = new DependencySearch(context.IsFailPathRun, context.UserOptions.SerachForDependencyInFieldConstant, context.DependencyFilter);
3434
var results = search.FindTypesThatOnlyHaveDependencyOnAnyOrNone(input, dependencies);
3535

3636
return input.Where(t => t.IsPassing == condition);
@@ -40,7 +40,7 @@ internal static IEnumerable<TypeSpec> OnlyHaveDependenciesOnAnyOrNone(FunctionSe
4040

4141
internal static IEnumerable<TypeSpec> AreUsedByAny(FunctionSequenceExecutionContext context, IEnumerable<TypeSpec> input, IEnumerable<string> dependencies, bool condition)
4242
{
43-
var search = new DependencySearch(context.IsFailPathRun, context.DependencyFilter);
43+
var search = new DependencySearch(context.IsFailPathRun, context.UserOptions.SerachForDependencyInFieldConstant, context.DependencyFilter);
4444
var results = search.FindTypesThatAreUsedByAny(input, dependencies, context.AllTypes);
4545
return input.Where(t => t.IsPassing == condition);
4646
}

sources/NetArchTest/Options.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,15 @@ public record class Options
1010
public static readonly Options Default = new Options();
1111

1212

13+
/// <summary>
14+
/// Allows to specify how strings will be compared, default: InvariantCultureIgnoreCase
15+
/// </summary>
1316
public StringComparison Comparer { get; init; } = StringComparison.InvariantCultureIgnoreCase;
1417

18+
19+
/// <summary>
20+
/// Determines if dependency analysis should look for dependency in string field constant, default: false
21+
/// </summary>
22+
public bool SerachForDependencyInFieldConstant { get; init; } = false;
1523
}
16-
}
24+
}

sources/NetArchTest/Slices/Model/Filters/HaveDependenciesBetweenSlices.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ internal sealed class HaveDependenciesBetweenSlices : IFilter
99
{
1010
public IEnumerable<TypeTestResult> Execute(SlicedTypes slicedTypes)
1111
{
12-
var dependencySearch = new DependencySearch(false);
12+
var dependencySearch = new DependencySearch(false, false);
1313
var result = new List<TypeTestResult>(slicedTypes.TypeCount);
1414

1515
for (int i = 0; i < slicedTypes.Slices.Count; i++)

tests/NetArchTest.Rules.UnitTests/DependencySearch/Utils/DependencySearchUtils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public static IEnumerable<TypeSpec> GetTypesThatResideInTheSameNamespaceButWitho
6363
private static void FindTypesWithAnyDependencies(IEnumerable<TypeSpec> subjects, IEnumerable<string> dependencies, bool expectToFind)
6464
{
6565
// Arrange
66-
var search = new global::NetArchTest.Dependencies.DependencySearch(false);
66+
var search = new global::NetArchTest.Dependencies.DependencySearch(false, true);
6767

6868
// Act
6969
// Search against the dependencies

tests/NetArchTest.Rules.UnitTests/NetArchTest.UnitTests.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
<ItemGroup>
1010
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
11-
<PackageReference Include="xunit" Version="2.6.2" />
12-
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.4">
11+
<PackageReference Include="xunit" Version="2.9.2" />
12+
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
1313
<PrivateAssets>all</PrivateAssets>
1414
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
1515
</PackageReference>

0 commit comments

Comments
 (0)