Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix qodana issues part 2 #2264

Merged
merged 10 commits into from
Aug 23, 2023
19 changes: 4 additions & 15 deletions Src/FluentAssertions/Specialized/ExceptionAssertions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,6 @@ namespace FluentAssertions.Specialized;
public class ExceptionAssertions<TException> : ReferenceTypeAssertions<IEnumerable<TException>, ExceptionAssertions<TException>>
where TException : Exception
{
#region Private Definitions

private static readonly ExceptionMessageAssertion OuterMessageAssertion = new();

#endregion

public ExceptionAssertions(IEnumerable<TException> exceptions)
: base(exceptions)
{
Expand Down Expand Up @@ -86,7 +80,7 @@ public ExceptionAssertions(IEnumerable<TException> exceptions)
.ForCondition(Subject.Any())
.FailWith("Expected exception with message {0}{reason}, but no exception was thrown.", expectedWildcardPattern);

OuterMessageAssertion.Execute(Subject.Select(exc => exc.Message), expectedWildcardPattern, because,
ExceptionMessageAssertion.Execute(Subject.Select(exc => exc.Message), expectedWildcardPattern, because,
becauseArgs);

return this;
Expand Down Expand Up @@ -264,16 +258,11 @@ private static string BuildExceptionsString(IEnumerable<TException> exceptions)
"\t" + Formatter.ToString(exception)));
}

private sealed class ExceptionMessageAssertion
private static class ExceptionMessageAssertion
{
public ExceptionMessageAssertion()
{
Context = "exception message";
}

public string Context { get; }
private const string Context = "exception message";

public void Execute(IEnumerable<string> messages, string expectation, string because, params object[] becauseArgs)
public static void Execute(IEnumerable<string> messages, string expectation, string because, params object[] becauseArgs)
{
using var _ = new AssertionScope();
var results = new AssertionResultSet();
Expand Down
27 changes: 10 additions & 17 deletions Src/FluentAssertions/Specialized/ExecutionTimeAssertions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,10 @@ public ExecutionTimeAssertions(ExecutionTime executionTime)
public AndConstraint<ExecutionTimeAssertions> BeLessThanOrEqualTo(TimeSpan maxDuration, string because = "",
params object[] becauseArgs)
{
bool Condition(TimeSpan duration) => duration <= maxDuration;
(bool isRunning, TimeSpan elapsed) = PollUntil(Condition, expectedResult: false, rate: maxDuration);
(bool isRunning, TimeSpan elapsed) = PollUntil(duration => duration <= maxDuration, expectedResult: false, rate: maxDuration);

Execute.Assertion
.ForCondition(Condition(elapsed))
.ForCondition(elapsed <= maxDuration)
.BecauseOf(because, becauseArgs)
.FailWith("Execution of " +
execution.ActionDescription.EscapePlaceholders() +
Expand Down Expand Up @@ -108,11 +107,10 @@ public ExecutionTimeAssertions(ExecutionTime executionTime)
public AndConstraint<ExecutionTimeAssertions> BeLessThan(TimeSpan maxDuration, string because = "",
params object[] becauseArgs)
{
bool Condition(TimeSpan duration) => duration < maxDuration;
(bool isRunning, TimeSpan elapsed) = PollUntil(Condition, expectedResult: false, rate: maxDuration);
(bool isRunning, TimeSpan elapsed) = PollUntil(duration => duration < maxDuration, expectedResult: false, rate: maxDuration);

Execute.Assertion
.ForCondition(Condition(execution.ElapsedTime))
.ForCondition(elapsed < maxDuration)
.BecauseOf(because, becauseArgs)
.FailWith("Execution of " +
execution.ActionDescription.EscapePlaceholders() + " should be less than {0}{reason}, but it required " +
Expand All @@ -139,11 +137,10 @@ public ExecutionTimeAssertions(ExecutionTime executionTime)
public AndConstraint<ExecutionTimeAssertions> BeGreaterThanOrEqualTo(TimeSpan minDuration, string because = "",
params object[] becauseArgs)
{
bool Condition(TimeSpan duration) => duration >= minDuration;
(bool isRunning, TimeSpan elapsed) = PollUntil(Condition, expectedResult: true, rate: minDuration);
(bool isRunning, TimeSpan elapsed) = PollUntil(duration => duration >= minDuration, expectedResult: true, rate: minDuration);

Execute.Assertion
.ForCondition(Condition(elapsed))
.ForCondition(elapsed >= minDuration)
.BecauseOf(because, becauseArgs)
.FailWith("Execution of " +
execution.ActionDescription.EscapePlaceholders() +
Expand Down Expand Up @@ -175,11 +172,10 @@ public ExecutionTimeAssertions(ExecutionTime executionTime)
public AndConstraint<ExecutionTimeAssertions> BeGreaterThan(TimeSpan minDuration, string because = "",
params object[] becauseArgs)
{
bool Condition(TimeSpan duration) => duration > minDuration;
(bool isRunning, TimeSpan elapsed) = PollUntil(Condition, expectedResult: true, rate: minDuration);
(bool isRunning, TimeSpan elapsed) = PollUntil(duration => duration > minDuration, expectedResult: true, rate: minDuration);

Execute.Assertion
.ForCondition(Condition(elapsed))
.ForCondition(elapsed > minDuration)
.BecauseOf(because, becauseArgs)
.FailWith("Execution of " +
execution.ActionDescription.EscapePlaceholders() + " should be greater than {0}{reason}, but it required " +
Expand Down Expand Up @@ -216,15 +212,12 @@ public ExecutionTimeAssertions(ExecutionTime executionTime)
TimeSpan minimumValue = expectedDuration - precision;
TimeSpan maximumValue = expectedDuration + precision;

bool MaxCondition(TimeSpan duration) => duration <= maximumValue;
bool MinCondition(TimeSpan duration) => duration >= minimumValue;

// for polling we only use max condition, we don't want poll to stop if
// elapsed time didn't even get to the acceptable range
(bool isRunning, TimeSpan elapsed) = PollUntil(MaxCondition, expectedResult: false, rate: maximumValue);
(bool isRunning, TimeSpan elapsed) = PollUntil(duration => duration <= maximumValue, expectedResult: false, rate: maximumValue);

Execute.Assertion
.ForCondition(MinCondition(elapsed) && MaxCondition(elapsed))
.ForCondition(elapsed >= minimumValue && elapsed <= maximumValue)
.BecauseOf(because, becauseArgs)
.FailWith("Execution of " + execution.ActionDescription.EscapePlaceholders() +
" should be within {0} from {1}{reason}, but it required " +
Expand Down
18 changes: 9 additions & 9 deletions Tests/FluentAssertions.Equivalency.Specs/SelectionRulesSpecs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ public void When_including_fields_it_should_succeed_if_just_the_included_field_m
// Act
Action act =
() =>
class1.Should().BeEquivalentTo(class2, opts => opts.Including(_ => _.Field1).Including(_ => _.Field2));
class1.Should().BeEquivalentTo(class2, opts => opts.Including(o => o.Field1).Including(o => o.Field2));
dennisdoomen marked this conversation as resolved.
Show resolved Hide resolved

// Assert
act.Should().NotThrow("the only selected fields have the same value");
Expand Down Expand Up @@ -518,7 +518,7 @@ public void When_including_fields_it_should_fail_if_any_included_field_do_not_ma
Action act =
() =>
class1.Should().BeEquivalentTo(class2,
opts => opts.Including(_ => _.Field1).Including(_ => _.Field2).Including(_ => _.Field3));
opts => opts.Including(o => o.Field1).Including(o => o.Field2).Including(o => o.Field3));

// Assert
act.Should().Throw<XunitException>().WithMessage("Expected field class1.Field3*");
Expand Down Expand Up @@ -669,7 +669,7 @@ public void When_excluding_members_it_should_pass_if_only_the_excluded_members_a
Action act =
() =>
class1.Should().BeEquivalentTo(class2,
opts => opts.Excluding(_ => _.Field3).Excluding(_ => _.Property1));
opts => opts.Excluding(o => o.Field3).Excluding(o => o.Property1));

// Assert
act.Should().NotThrow("the non-excluded fields have the same value");
Expand All @@ -696,7 +696,7 @@ public void When_excluding_members_it_should_fail_if_any_non_excluded_members_ar

// Act
Action act =
() => class1.Should().BeEquivalentTo(class2, opts => opts.Excluding(_ => _.Property1));
() => class1.Should().BeEquivalentTo(class2, opts => opts.Excluding(o => o.Property1));

// Assert
act.Should().Throw<XunitException>().WithMessage("Expected*Field3*");
Expand Down Expand Up @@ -1476,7 +1476,7 @@ public void Run_type_typing_ignores_hidden_properties_even_when_using_a_referenc
expectation.Property = "ExpectedBaseValue";

// Act / Assert
subject.Should().BeEquivalentTo(expectation, _ => _.RespectingRuntimeTypes());
subject.Should().BeEquivalentTo(expectation, o => o.RespectingRuntimeTypes());
}

[Fact]
Expand All @@ -1498,8 +1498,8 @@ public void Including_the_derived_property_excludes_the_hidden_property()
((AnotherBaseWithProperty)expectation).Property = "ExpectedBaseValue";

// Act / Assert
subject.Should().BeEquivalentTo(expectation, _ => _
.Including(_ => _.Property));
subject.Should().BeEquivalentTo(expectation, opt => opt
.Including(o => o.Property));
}

[Fact]
Expand All @@ -1515,7 +1515,7 @@ public void Excluding_the_property_hiding_the_base_class_one_does_not_reveal_the
((AnotherBaseWithProperty)expectation).Property = "ExpectedBaseValue";

// Act
Action act = () => subject.Should().BeEquivalentTo(expectation, _ => _
Action act = () => subject.Should().BeEquivalentTo(expectation, o => o
.Excluding(b => b.Property));

// Assert
Expand Down Expand Up @@ -1646,7 +1646,7 @@ public void Including_the_derived_field_excludes_the_hidden_field()
// Act / Assert
subject.Should().BeEquivalentTo(expectation, options => options
.IncludingFields()
.Including(_ => _.Field));
.Including(o => o.Field));
}

[Fact]
Expand Down