Skip to content

Commit 4ad6232

Browse files
authored
Assert Conditions now contain an AssertionMetadata object containing delegate durations (#1795)
1 parent b526f67 commit 4ad6232

45 files changed

Lines changed: 163 additions & 70 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

TUnit.Assertions/AssertConditions/BaseAssertCondition.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public AssertionResult FailWithMessage(string message)
3030
internal virtual string GetExpectationWithReason()
3131
=> $"{GetExpectation()}{GetBecauseReason()}";
3232

33-
internal abstract Task<AssertionResult> GetAssertionResult(object? actualValue, Exception? exception, string? actualExpression);
33+
internal abstract Task<AssertionResult> GetAssertionResult(object? actualValue, Exception? exception, AssertionMetadata assertionMetadata, string? actualExpression);
3434

3535
internal void SetSubject(string? subject)
3636
=> Subject = subject;
@@ -41,24 +41,30 @@ public abstract class BaseAssertCondition<TActual> : BaseAssertCondition
4141

4242
internal Task<AssertionResult> GetAssertionResult(AssertionData assertionData)
4343
{
44-
return GetAssertionResult(assertionData.Result, assertionData.Exception, assertionData.ActualExpression);
44+
return GetAssertionResult(assertionData.Result, assertionData.Exception, new AssertionMetadata
45+
{
46+
StartTime = assertionData.Start,
47+
EndTime = assertionData.End
48+
}, assertionData.ActualExpression);
4549
}
4650

47-
internal override Task<AssertionResult> GetAssertionResult(object? actualValue, Exception? exception, string? actualExpression)
51+
internal override Task<AssertionResult> GetAssertionResult(object? actualValue, Exception? exception,
52+
AssertionMetadata assertionMetadata, string? actualExpression)
4853
{
4954
if (actualValue is not null && actualValue is not TActual)
5055
{
5156
throw new AssertionException($"Expected {typeof(TActual).Name} but received {actualValue.GetType().Name}");
5257
}
5358

54-
return GetAssertionResult((TActual?) actualValue, exception, actualExpression);
59+
return GetAssertionResult((TActual?) actualValue, exception, assertionMetadata, actualExpression);
5560
}
5661

5762
internal TActual? ActualValue { get; private set; }
5863
internal Exception? Exception { get; private set; }
5964
public string? ActualExpression { get; private set; }
6065

61-
public Task<AssertionResult> GetAssertionResult(TActual? actualValue, Exception? exception, string? actualExpression = null)
66+
public Task<AssertionResult> GetAssertionResult(TActual? actualValue, Exception? exception,
67+
AssertionMetadata assertionMetadata, string? actualExpression = null)
6268
{
6369
ActualValue = actualValue;
6470
Exception = exception;
@@ -69,8 +75,9 @@ public Task<AssertionResult> GetAssertionResult(TActual? actualValue, Exception?
6975
AssertionScope.GetCurrentAssertionScope()?.RemoveException(exception);
7076
}
7177

72-
return GetResult(actualValue, exception);
78+
return GetResult(actualValue, exception, assertionMetadata);
7379
}
7480

75-
protected abstract Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception);
81+
protected abstract Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception,
82+
AssertionMetadata assertionMetadata);
7683
}

TUnit.Assertions/AssertConditions/Connectors/AndAssertCondition.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ public AndAssertCondition(BaseAssertCondition condition1, BaseAssertCondition co
2222
internal override string GetExpectationWithReason()
2323
=> $"{_condition1.GetExpectationWithReason()}{Environment.NewLine} and {_condition2.GetExpectationWithReason()}";
2424

25-
internal sealed override async Task<AssertionResult> GetAssertionResult(object? actualValue, Exception? exception, string? actualExpression)
25+
internal sealed override async Task<AssertionResult> GetAssertionResult(object? actualValue, Exception? exception, AssertionMetadata assertionMetadata, string? actualExpression)
2626
{
27-
return (await _condition1.GetAssertionResult(actualValue, exception, actualExpression))
28-
.And(await _condition2.GetAssertionResult(actualValue, exception, actualExpression));
27+
return (await _condition1.GetAssertionResult(actualValue, exception, assertionMetadata, actualExpression))
28+
.And(await _condition2.GetAssertionResult(actualValue, exception, assertionMetadata, actualExpression));
2929
}
3030

3131
internal override void SetBecauseReason(BecauseReason becauseReason)

TUnit.Assertions/AssertConditions/Connectors/OrAssertCondition.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ public OrAssertCondition(BaseAssertCondition condition1, BaseAssertCondition con
2121
internal override string GetExpectationWithReason()
2222
=> $"{_condition1.GetExpectationWithReason()}{Environment.NewLine} or {_condition2.GetExpectationWithReason()}";
2323

24-
internal sealed override async Task<AssertionResult> GetAssertionResult(object? actualValue, Exception? exception, string? actualExpression)
24+
internal sealed override async Task<AssertionResult> GetAssertionResult(object? actualValue, Exception? exception, AssertionMetadata assertionMetadata, string? actualExpression)
2525
{
26-
return (await _condition1.GetAssertionResult(actualValue, exception, actualExpression))
27-
.Or(await _condition2.GetAssertionResult(actualValue, exception, actualExpression));
26+
return (await _condition1.GetAssertionResult(actualValue, exception, assertionMetadata, actualExpression))
27+
.Or(await _condition2.GetAssertionResult(actualValue, exception, assertionMetadata, actualExpression));
2828
}
2929

3030
internal override void SetBecauseReason(BecauseReason becauseReason)

TUnit.Assertions/AssertConditions/DelegateAssertCondition.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ public void WithComparer(Func<TException?, AssertionDecision> comparer)
1515
_customComparers.Add(comparer);
1616
}
1717

18-
protected override Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception)
18+
protected override Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception,
19+
AssertionMetadata assertionMetadata)
1920
{
2021
if (exception != null && exception is not TException)
2122
{

TUnit.Assertions/AssertConditions/EnumerableSatisfiesAssertCondition.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public EnumerableSatisfiesAssertCondition(Func<TInner?, Task<TExpected>?> mapper
2323
protected override string GetExpectation()
2424
=> $"to satisfy {_assertionBuilderExpression}";
2525

26-
protected override async Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception)
26+
protected override async Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception,
27+
AssertionMetadata assertionMetadata)
2728
{
2829
if (actualValue is null)
2930
{
@@ -34,7 +35,7 @@ protected override async Task<AssertionResult> GetResult(TActual? actualValue, E
3435
foreach (var itemValue in actualValue)
3536
{
3637
var currentIndex = i++;
37-
var assertionResult = await GetResult(itemValue, exception);
38+
var assertionResult = await GetResult(itemValue, exception, assertionMetadata);
3839
if (assertionResult.IsPassed)
3940
{
4041
continue;
@@ -46,15 +47,15 @@ protected override async Task<AssertionResult> GetResult(TActual? actualValue, E
4647
return mergedAsserts;
4748
}
4849

49-
private async Task<AssertionResult> GetResult(TInner? itemValue, Exception? exception)
50+
private async Task<AssertionResult> GetResult(TInner? itemValue, Exception? exception, AssertionMetadata assertionMetadata)
5051
{
5152
var innerItemTask = _mapper(itemValue);
5253
var innerItem = innerItemTask == null ? default : await innerItemTask;
5354
var innerAssertionBuilder = new ValueAssertionBuilder<TExpected?>(innerItem, "");
5455
var assertion = _assertionBuilder(innerAssertionBuilder);
5556
foreach (var baseAssertCondition in assertion.Assertions)
5657
{
57-
var result = await baseAssertCondition.GetAssertionResult(innerItem, exception, "");
58+
var result = await baseAssertCondition.GetAssertionResult(innerItem, exception, assertionMetadata, "");
5859
if (!result.IsPassed)
5960
{
6061
return result;

TUnit.Assertions/AssertConditions/ExpectedValueAssertCondition.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ public void WithComparer(Func<TActual?, TExpected?, AssertionDecision> comparer)
2020
_customComparers.Add(comparer);
2121
}
2222

23-
protected override Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception)
23+
protected override Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception,
24+
AssertionMetadata assertionMetadata)
2425
{
2526
var expected = ExpectedValue;
2627

TUnit.Assertions/AssertConditions/NotNullExpectedValueAssertCondition.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ public class NotNullExpectedValueAssertCondition<TActual> : BaseAssertCondition<
55
protected override string GetExpectation()
66
=> "to not be null";
77

8-
protected override Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception)
8+
protected override Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception,
9+
AssertionMetadata assertionMetadata)
910
=> AssertionResult
1011
.FailIf(actualValue is null,
1112
"it was");

TUnit.Assertions/AssertConditions/NullExpectedValueAssertCondition.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ public class NullExpectedValueAssertCondition<TActual> : BaseAssertCondition<TAc
55
protected override string GetExpectation()
66
=> "to be null";
77

8-
protected override Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception)
8+
protected override Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception,
9+
AssertionMetadata assertionMetadata)
910
=> AssertionResult
1011
.FailIf(actualValue is not null,
1112
$"found {actualValue}");

TUnit.Assertions/AssertConditions/SatisfiesAssertCondition.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public SatisfiesAssertCondition(Func<TActual, Task<TExpected>?> mapper,
2222
protected override string GetExpectation()
2323
=> $"to satisfy {_assertionBuilderExpression}";
2424

25-
protected override async Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception)
25+
protected override async Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception,
26+
AssertionMetadata assertionMetadata)
2627
{
2728
if (actualValue is null)
2829
{
@@ -39,7 +40,7 @@ protected override async Task<AssertionResult> GetResult(TActual? actualValue, E
3940

4041
foreach (var baseAssertCondition in ((ISource)assertion).Assertions)
4142
{
42-
var result = await baseAssertCondition.GetAssertionResult(innerItem, exception, "");
43+
var result = await baseAssertCondition.GetAssertionResult(innerItem, exception, assertionMetadata, "");
4344

4445
if (!result.IsPassed)
4546
{

TUnit.Assertions/AssertConditions/ValueAssertCondition.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ public void WithComparer(Func<TActual?, AssertionDecision> comparer)
1818
_customComparers.Add(comparer);
1919
}
2020

21-
protected override Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception)
21+
protected override Task<AssertionResult> GetResult(TActual? actualValue, Exception? exception,
22+
AssertionMetadata assertionMetadata)
2223
{
2324
if (exception is not null)
2425
{

0 commit comments

Comments
 (0)