Skip to content

Commit

Permalink
Add ThatAre[Not]Abstract to MethodInfoSelector.cs as mentioned in Issue
Browse files Browse the repository at this point in the history
  • Loading branch information
94sedighi committed Dec 5, 2022
1 parent 0a04100 commit 92f1c39
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 1 deletion.
20 changes: 20 additions & 0 deletions Src/FluentAssertions/Types/MethodInfoSelector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,26 @@ public MethodInfoSelector ThatAreNotDecoratedWithOrInherit<TAttribute>()
return this;
}

/// <summary>
/// Only return methods that are abstract
/// </summary>
/// <returns></returns>
public MethodInfoSelector ThatAreAbstract()
{
selectedMethods = selectedMethods.Where(method => method.IsAbstract);
return this;
}

/// <summary>
/// Only return methods that are not abstract
/// </summary>
/// <returns></returns>
public MethodInfoSelector ThatAreNotAbstract()
{
selectedMethods = selectedMethods.Where(method => !method.IsAbstract);
return this;
}

/// <summary>
/// Only return methods that are async.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2466,11 +2466,13 @@ namespace FluentAssertions.Types
public FluentAssertions.Types.MethodInfoSelector ThatReturnVoid { get; }
public System.Collections.Generic.IEnumerator<System.Reflection.MethodInfo> GetEnumerator() { }
public FluentAssertions.Types.TypeSelector ReturnTypes() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWithOrInherit<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
Expand Down Expand Up @@ -2765,4 +2767,4 @@ namespace FluentAssertions.Xml
public bool CanHandle(object value) { }
public void Format(object value, FluentAssertions.Formatting.FormattedObjectGraph formattedGraph, FluentAssertions.Formatting.FormattingContext context, FluentAssertions.Formatting.FormatChild formatChild) { }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2596,11 +2596,13 @@ namespace FluentAssertions.Types
public FluentAssertions.Types.MethodInfoSelector ThatReturnVoid { get; }
public System.Collections.Generic.IEnumerator<System.Reflection.MethodInfo> GetEnumerator() { }
public FluentAssertions.Types.TypeSelector ReturnTypes() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWithOrInherit<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2468,11 +2468,13 @@ namespace FluentAssertions.Types
public FluentAssertions.Types.MethodInfoSelector ThatReturnVoid { get; }
public System.Collections.Generic.IEnumerator<System.Reflection.MethodInfo> GetEnumerator() { }
public FluentAssertions.Types.TypeSelector ReturnTypes() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWithOrInherit<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2468,11 +2468,13 @@ namespace FluentAssertions.Types
public FluentAssertions.Types.MethodInfoSelector ThatReturnVoid { get; }
public System.Collections.Generic.IEnumerator<System.Reflection.MethodInfo> GetEnumerator() { }
public FluentAssertions.Types.TypeSelector ReturnTypes() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWithOrInherit<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2417,11 +2417,13 @@ namespace FluentAssertions.Types
public FluentAssertions.Types.MethodInfoSelector ThatReturnVoid { get; }
public System.Collections.Generic.IEnumerator<System.Reflection.MethodInfo> GetEnumerator() { }
public FluentAssertions.Types.TypeSelector ReturnTypes() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWithOrInherit<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2468,11 +2468,13 @@ namespace FluentAssertions.Types
public FluentAssertions.Types.MethodInfoSelector ThatReturnVoid { get; }
public System.Collections.Generic.IEnumerator<System.Reflection.MethodInfo> GetEnumerator() { }
public FluentAssertions.Types.TypeSelector ReturnTypes() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreDecoratedWithOrInherit<TAttribute>()
where TAttribute : System.Attribute { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAbstract() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotAsync() { }
public FluentAssertions.Types.MethodInfoSelector ThatAreNotDecoratedWith<TAttribute>()
where TAttribute : System.Attribute { }
Expand Down
51 changes: 51 additions & 0 deletions Tests/FluentAssertions.Specs/Types/MethodInfoSelectorSpecs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,34 @@ public void When_selecting_methods_not_decorated_with_a_noninheritable_attribute
methods.Should().ContainSingle();
}

[Fact]
public void When_selecting_methods_that_are_abstract_it_should_only_return_the_applicable_methods()
{
// Arrange
Type type = typeof(TestClassForMethodSelectorWithAbstractAndVirtualMethods);

// Act
IEnumerable<MethodInfo> methods = type.Methods().ThatAreAbstract().ToArray();

// Assert
int abstractMethodsCount = 3;
methods.Should().HaveCount(abstractMethodsCount);
}

[Fact]
public void When_selecting_methods_that_are_not_abstract_it_should_only_return_the_applicable_methods()
{
// Arrange
Type type = typeof(TestClassForMethodSelectorWithAbstractAndVirtualMethods);

// Act
IEnumerable<MethodInfo> methods = type.Methods().ThatAreNotAbstract().ToArray();

// Assert
int notAbstractMethodsCount = 7;
methods.Should().HaveCount(notAbstractMethodsCount);
}

[Fact]
public void When_selecting_methods_that_are_async_it_should_only_return_the_applicable_methods()
{
Expand Down Expand Up @@ -504,4 +532,27 @@ public class DummyMethodAttribute : Attribute
public bool Filter { get; set; }
}

internal abstract class TestClassForMethodSelectorWithAbstractAndVirtualMethods
{
public abstract void PublicAbstractMethod();

protected abstract void ProtectedAbstractMethod();

internal abstract void InternalAbstractMethod();

public virtual void PublicVirtualMethod() { }

protected virtual void ProptectedVirtualMethod() { }

internal virtual void InternalVirtualMethod() { }

public void PublicNotAbstractMethod() { }

protected void ProtectedNotAbstractMethod() { }

internal void InternalNotAbstractMethod() { }

private void PrivateAbstractMethod() { }
}

#endregion

0 comments on commit 92f1c39

Please sign in to comment.