Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions ArchUnitNET/Domain/Extensions/EnumerableExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,26 @@ public static bool IsNullOrEmpty<T>(this IEnumerable<T> source)
{
return source == null || !source.Any();
}

public static string FormatDescription<T>(
this IEnumerable<T> source,
string emptyDescription,
string singleDescription,
string multipleDescription,
Func<T, string> elementDescription = null
)
{
var list = source as IList<T> ?? source.ToList();
elementDescription = elementDescription ?? (element => $"\"{element}\"");
switch (list.Count)
{
case 0:
return emptyDescription;
case 1:
return $"{singleDescription} {string.Join(" and ", list.Select(elementDescription))}";
default:
return $"{multipleDescription} {string.Join(" and ", list.Select(elementDescription))}";
}
}
}
}
74 changes: 66 additions & 8 deletions ArchUnitNET/Domain/Extensions/NamingExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,16 @@ namespace ArchUnitNET.Domain.Extensions
{
public static class NamingExtensions
{
public static bool NameEquals(this IHasName cls, string name)
{
return string.Equals(cls.Name, name, StringComparison.OrdinalIgnoreCase);
}

public static bool NameMatches(this IHasName cls, string pattern)
{
return pattern != null && Regex.IsMatch(cls.Name, pattern);
}

public static bool NameEndsWith(
this IHasName cls,
string pattern,
Expand Down Expand Up @@ -36,31 +46,79 @@ public static bool NameContains(
return cls.Name.IndexOf(pattern, stringComparison) >= 0;
}

public static bool NameEquals(this IHasName cls, string name)
public static bool FullNameEquals(this IHasName cls, string fullName)
{
return string.Equals(cls.Name, name, StringComparison.OrdinalIgnoreCase);
return string.Equals(cls.FullName, fullName, StringComparison.OrdinalIgnoreCase);
}

public static bool NameMatches(this IHasName cls, string pattern)
public static bool FullNameMatches(this IHasName cls, string pattern)
{
return pattern != null && Regex.IsMatch(cls.Name, pattern);
return pattern != null && Regex.IsMatch(cls.FullName, pattern);
}

public static bool FullNameEquals(this IHasName cls, string fullName)
public static bool FullNameEndsWith(this IHasName cls, string pattern)
{
return string.Equals(cls.FullName, fullName, StringComparison.OrdinalIgnoreCase);
return cls.FullName.EndsWith(pattern, StringComparison.OrdinalIgnoreCase);
}

public static bool FullNameMatches(this IHasName cls, string pattern)
public static bool FullNameStartsWith(this IHasName cls, string pattern)
{
return pattern != null && Regex.IsMatch(cls.FullName, pattern);
return cls.FullName.StartsWith(pattern, StringComparison.OrdinalIgnoreCase);
}

public static bool FullNameContains(this IHasName cls, string pattern)
{
return pattern != null && cls.FullName.ToLower().Contains(pattern.ToLower());
}

public static bool AssemblyQualifiedNameEquals(
this IHasAssemblyQualifiedName cls,
string assemblyQualifiedName
)
{
return string.Equals(
cls.AssemblyQualifiedName,
assemblyQualifiedName,
StringComparison.OrdinalIgnoreCase
);
}

public static bool AssemblyQualifiedNameMatches(
this IHasAssemblyQualifiedName cls,
string pattern
)
{
return pattern != null && Regex.IsMatch(cls.AssemblyQualifiedName, pattern);
}

public static bool AssemblyQualifiedNameEndsWith(
this IHasAssemblyQualifiedName cls,
string pattern
)
{
return cls.AssemblyQualifiedName.EndsWith(pattern, StringComparison.OrdinalIgnoreCase);
}

public static bool AssemblyQualifiedNameStartsWith(
this IHasAssemblyQualifiedName cls,
string pattern
)
{
return cls.AssemblyQualifiedName.StartsWith(
pattern,
StringComparison.OrdinalIgnoreCase
);
}

public static bool AssemblyQualifiedNameContains(
this IHasAssemblyQualifiedName cls,
string pattern
)
{
return pattern != null
&& cls.AssemblyQualifiedName.ToLower().Contains(pattern.ToLower());
}

[NotNull]
public static IEnumerable<TType> WhereNameIs<TType>(
this IEnumerable<TType> source,
Expand Down
6 changes: 6 additions & 0 deletions ArchUnitNET/Domain/IObjectProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,11 @@ namespace ArchUnitNET.Domain
public interface IObjectProvider<out T> : IHasDescription
{
IEnumerable<T> GetObjects(Architecture architecture);

string FormatDescription(
string emptyDescription,
string singleDescription,
string multipleDescription
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace ArchUnitNET.Fluent
{
public class ObjectProvider<T> : ISizedObjectProvider<T>
internal class ObjectProvider<T> : ISizedObjectProvider<T>
where T : ICanBeAnalyzed
{
private readonly List<T> _objects;
Expand All @@ -20,16 +20,32 @@ public ObjectProvider(IEnumerable<T> objects)

public string Description { get; }

public int Count => _objects.Count();
public int Count => _objects.Count;

public IEnumerable<T> GetObjects(Architecture architecture)
{
return _objects;
}

public string FormatDescription(
string emptyDescription,
string singleDescription,
string multipleDescription
)
{
switch (Count)
{
case 0:
return emptyDescription;
case 1:
return $"{singleDescription} {Description}";
}
return $"{multipleDescription} {Description}";
}

private bool Equals(ObjectProvider<T> other)
{
return string.Equals(Description, other.Description);
return _objects.SequenceEqual(other._objects);
}

public override bool Equals(object obj)
Expand All @@ -49,7 +65,12 @@ public override bool Equals(object obj)

public override int GetHashCode()
{
return Description != null ? Description.GetHashCode() : 0;
return _objects != null
? _objects.Aggregate(
0,
(current, obj) => (current * 397) ^ (obj?.GetHashCode() ?? 0)
)
: 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

namespace ArchUnitNET.Fluent
{
public class SystemTypeObjectProvider<T> : ISizedObjectProvider<T>
internal class SystemTypeObjectProvider<T> : ISizedObjectProvider<T>
where T : IType
{
private readonly List<Type> _types;
Expand Down Expand Up @@ -37,9 +37,25 @@ public IEnumerable<T> GetObjects(Architecture architecture)
);
}

public string FormatDescription(
string emptyDescription,
string singleDescription,
string multipleDescription
)
{
switch (Count)
{
case 0:
return emptyDescription;
case 1:
return $"{singleDescription} {Description}";
}
return $"{multipleDescription} {Description}";
}

private bool Equals(SystemTypeObjectProvider<T> other)
{
return string.Equals(Description, other.Description);
return _types.SequenceEqual(other._types);
}

public override bool Equals(object obj)
Expand All @@ -59,7 +75,12 @@ public override bool Equals(object obj)

public override int GetHashCode()
{
return Description != null ? Description.GetHashCode() : 0;
return _types != null
? _types.Aggregate(
0,
(current, type) => (current * 397) ^ (type?.GetHashCode() ?? 0)
)
: 0;
}
}
}
9 changes: 9 additions & 0 deletions ArchUnitNET/Fluent/BasicObjectProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@ public IEnumerable<T> GetObjects(Architecture architecture)
return architecture.GetOrCreateObjects(this, _objects);
}

public string FormatDescription(
string emptyDescription,
string singleDescription,
string multipleDescription
)
{
return $"{multipleDescription} {Description}";
}

public override string ToString()
{
return Description;
Expand Down
9 changes: 9 additions & 0 deletions ArchUnitNET/Fluent/Slices/GivenSlices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,14 @@ public IEnumerable<Slice> GetObjects(Architecture architecture)
{
return _ruleCreator.GetSlices(architecture);
}

public string FormatDescription(
string emptyDescription,
string singleDescription,
string multipleDescription
)
{
return $"{multipleDescription} {Description}";
}
}
}
29 changes: 0 additions & 29 deletions ArchUnitNET/Fluent/Syntax/DescriptionHelpers.cs

This file was deleted.

9 changes: 9 additions & 0 deletions ArchUnitNET/Fluent/Syntax/Elements/GivenObjects.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,15 @@ public IEnumerable<TRuleType> GetObjects(Architecture architecture)
}
}

public string FormatDescription(
string emptyDescription,
string singleDescription,
string multipleDescription
)
{
return $"{multipleDescription} {Description}";
}

public TRuleTypeThat That()
{
return Create<TRuleTypeThat, TRuleType>(_ruleCreator);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,15 @@ public IEnumerable<TRuleType> GetObjects(Architecture architecture)
}
}

public string FormatDescription(
string emptyDescription,
string singleDescription,
string multipleDescription
)
{
return $"{multipleDescription} {Description}";
}

public TGivenRuleTypeThat And()
{
_ruleCreator.AddPredicateConjunction(LogicalConjunctionDefinition.And);
Expand Down
Loading
Loading